Service as Code
Shiprock turns a JSON schema into a production backend — database, REST + GraphQL APIs, auth, billing, jobs, and 12 more modules. No boilerplate. No vendor lock-in. Just ship.
No spam. Just a heads-up when it ships.
From schema to running backend in three steps.
Collections, fields, validation, computed values, security policies. Your schema is the single source of truth.
{
"collections": {
"posts": {
"schema": {
"properties": {
"title": { "type": "string" },
"status": {
"enum": ["draft", "published"]
}
}
}
}
}
} Auth, billing, storage, jobs, realtime, email, webhooks, admin. Each module is independent and production-ready.
# shiprock.yaml
auth:
enabled: true
providers: [google, github]
billing:
enabled: true
provider: stripe
storage:
enabled: true
backend: s3 One command. Database tables, REST + GraphQL APIs, OpenAPI docs, admin dashboard, and hypermedia links. All generated.
$ shiprock dev Shiprock v2.0 collections posts → /api/posts (5 endpoints) modules auth → /auth billing → /billing storage → /storage services docs → /_docs graphql → /graphql admin → /_admin Listening on http://localhost:8080
Computed fields, security policies, and API configuration — all declared in JSON. Shiprock generates the database, endpoints, validation, and documentation.
{
"name": "Blog Service",
"settings": { "basePath": "/api" },
"collections": {
"posts": {
"schema": {
"properties": {
"title": { "type": "string", "minLength": 1 },
"content": { "type": "string" },
"slug": { "compute": "slugify(title)" },
"excerpt": { "compute": "truncate(content, 200)" },
"status": {
"enum": ["draft", "published", "archived"],
"default": "draft"
}
},
"required": ["title", "content"]
},
"api": { "rest": true, "path": "/posts" },
"rls": { "enabled": true, "ownerField": "authorId" }
}
}
} // REST + GraphQL APIs, zero code GET /api/posts List, filter, search GET /api/posts/:id Read one POST /api/posts Create PATCH /api/posts/:id Update DELETE /api/posts/:id Delete POST /graphql Full GraphQL API // Automatic from your schema slug computed from title, cached excerpt computed from content, cached RLS owner-only access enforced in DB Validation from JSON Schema constraints Pagination ?page=2&limit=20 Full-text ?q=search+terms Migrations auto-generated, auto-run OpenAPI /_docs (interactive) HATEOAS _links + _forms in responses
Declarative hooks chain actions together. Create records, send emails, call external APIs, trigger jobs — all from JSON.
{
"hooks": {
"afterCreate": [
{
"action": "create",
"collection": "activity",
"data": {
"type": "post_created",
"userId": "{{ context.userId }}"
}
},
{
"action": "email",
"to": "{{ doc.authorEmail }}",
"template": "post-published"
},
{
"action": "webhook",
"url": "https://api.slack.com/notify",
"body": { "text": "New post: {{ doc.title }}" }
}
]
}
} No handler code. No controller files. No middleware chain.
Production-grade services. Each independent, each opt-in. Enable in one line of YAML.
JWT, OAuth, sessions, user management.
Stripe subscriptions, metering, entitlements.
File uploads with S3, GCS, or local backends.
Persistent queues, cron, retries with backoff.
WebSocket, presence, live data subscriptions.
SMTP, SES, SendGrid. Templates and delivery tracking.
Outgoing delivery with retry, circuit breakers, HMAC.
Auto-generated dashboard. Browse data, manage users.
Event tracking, funnels, A/B testing, alerts.
Versioned pages with markdown and full-text search.
Embeddings and semantic search over collections.
Serverless handlers in Go, Node.js, or Python.
Every feature below is generated from your schema or enabled with one config flag. Zero application code required.
100+ built-in functions: slugify, markdown, truncate, date math, aggregations. Cached with automatic invalidation.
Multi-step workflows in JSON. Create records, send emails, call APIs, trigger jobs -- no code required.
Schema changes automatically migrate the database. No migration files. No downtime during dev.
Per-user data isolation enforced at the database layer. Define policies in your schema, forget about them.
Both APIs auto-generated from your schema. Filtering, pagination, sorting, introspection included.
Atomic or independent. Up to 100 ops per request in a single transaction.
Full change history per record. Revert, compare, audit. Git for your data.
Aggregated counts, sums, and lookups that stay in sync automatically. No N+1 queries.
Tenant routing, isolated data, per-org billing, feature flags. SaaS infrastructure out of the box.
Schema changes apply instantly. No server restart. Database migrates, routes regenerate, connections refresh.
Every instance serves OpenAPI docs, interactive explorer, and a unified discovery endpoint.
shiprock deploy fly generates Dockerfile, provisions Postgres, and deploys. Also supports Railway, Render, k8s.
One command generates infrastructure, provisions a database, and deploys.
$ shiprock deploy fly Creating app shiprock-blog Provisioning Postgres shiprock-blog-db Generating Dockerfile done Deploying v1 https://shiprock-blog.fly.dev is live
Also supports Railway, Render, Coolify, Kubernetes, Docker, and raw binaries.
Shiprock is under active development. Get notified when early access opens.
No spam. No vendor lock-in. Just a better way to build backends.