Ship is an AI-native, batteries-included full-stack TypeScript SaaS starter
Hono
oRPC
Drizzle
Postgres
Tailwind
BullMQEvery resource owns its schema, endpoints, middlewares, handlers, crons and methods. Files are mounted by path, types flow from the API to the client. One obvious way to do things, for you and your agents.
[userId]/update.ts becomes PUT /users/{userId}. Zod validates input and output, gates put the user on context.
Hono
oRPCA plugin is a folder of API resources, web routes and packages that merges into your codebase. Once installed the files are yours to edit. Like shadcn, but for your entire stack.
Drizzle ORM + Postgres. DbService per table, codegen, migrations, soft delete, mutation events.
S3-compatible uploads and presigned URLs. Garage in Docker locally, Wasabi or AWS in production.
React Email templates sent through Resend. Preview server on localhost:4000 while you edit.
Socket.IO with a Redis adapter. ioEmitter.publishToUser() from any handler, rooms gated by session.
Crons discovered from resources/*/crons. Runs as its own process with its own Dockerfile.
DigitalOcean Apps, Render, DigitalOcean Kubernetes or AWS EKS. Dockerfiles for api, web, scheduler and migrator.
better-auth: email + password, verification, reset, Google OAuth. Sign-in pages and the app shell.
Admin dashboard with a paginated, searchable user list. isAdmin gate on the API.
Conversations and messages on the Vercel AI SDK. Gemini by default, swap the model in one call.
The minimal example: schema, 3 endpoints, a canEdit middleware and a route. Copy it for your own resource.
One command asks 3 questions, then scaffolds the monorepo, installs the plugins, runs codegen and writes the first migration.
A local page for every running service, with an API explorer that reads resources/*: each endpoint with its route, middlewares and schemas, plus crons, handlers and methods.