Skip to content

ShipQ

Declare your schema. Write your queries. Ship your API. ShipQ is a compiler toolchain for backend code — not an ORM.

ShipQ treats your schema, queries, and handler registrations as build targets. When you change any of those inputs, re-run the relevant compile step — and ShipQ generates everything else: typed query runners, server wiring, OpenAPI specs, admin UIs, TypeScript clients, and test harnesses.

Compile-Time Over Runtime

Schema, queries, and handler registries are build targets — not runtime reflection magic. Errors surface at compile time, not in production.

Three-Compiler Chain

Schema compiler: migrations → typed schema bindings. Query compiler: PortSQL DSL → typed query runners. Handler compiler: API packages → server wiring, OpenAPI, tests, and TS clients.

Multi-Database by Construction

The same query DSL compiles to Postgres, MySQL, and SQLite — handling quoting, placeholders, JSON aggregation, and dialect differences automatically.

SQL-Shaped Data Access

You write SQL-shaped query code using a typed Go DSL (PortSQL), not ActiveRecord-like object graphs. Query boundaries are explicit and testable.

Self-Contained Projects

ShipQ embeds its runtime libraries into your repo and rewrites imports. Your generated project has zero dependency on a published ShipQ module.

Full-Stack Codegen

From a single handler compile, get an OpenAPI spec, API docs UI, admin UI, HTTP test client, integration tests, and TypeScript HTTP clients with optional React/Svelte hooks.

Terminal window
# Initialize a project
shipq init
# Set up your database
shipq db setup
# Add authentication
shipq auth
shipq signup
# Define your schema
shipq migrate new pets name:string species:string age:int
shipq migrate up
# Generate CRUD endpoints + tests
shipq resource pets all
# Compile everything
shipq handler compile
# Run tests and start the server
go test ./... -v
go run ./cmd/server

Core Concepts

Understand the compiler chain and how ShipQ’s three compilers feed each other.