Skip to main content
create-ship-app is the Ship CLI. One command scaffolds a pnpm + Turborepo monorepo, copies your chosen plugins into the repo, and wires a deployment target — ready to run.
npx @paralect/ship init
npx create-ship-app@latest init resolves to the same CLI. Both run version 3.0.0.
It downloads the real template from paralect/ship, so what you scaffold is exactly what the docs describe — no abstraction layer between you and your code.

The scaffold flow

init walks you through three questions, then builds the project.
1

Pick a setup

Two shapes — see Architecture for the full picture:
  • PostgreSQL + TanStack Start — full-stack. You get apps/api (Hono + oRPC + Drizzle + PostgreSQL) and apps/web (TanStack Start), with end-to-end types flowing from the API to the client.
  • TanStack Start web-onlyapps/web only, no apps/api. Backend logic runs as type-safe server functions inside the Start server. No database, no API to maintain.
2

Choose plugins

A multiselect — space to toggle, enter to confirm. Each plugin merges into your codebase, the same way shadcn/ui adds components. See Plugins.
PluginWhat it adds
auth-starterbetter-auth wiring + the web sign-in/up pages and app shell
adminAdmin dashboard with a user list (requires auth-starter)
mailerResend + React Email templates → @ship/emails
cloud-storageS3-compatible file upload (Garage in dev, Wasabi/AWS in prod)
notesNotes CRUD — a worked example resource
ai-chatStreaming AI chat via @ship/ai (requires auth-starter)
auth-starter and admin are pre-selected for the full-stack setup. In the web-only setup, plugins that need a backend are hidden.
3

Choose a deployment target

Pick where this ships. The CLI drops the matching CI workflows and infrastructure-as-code into your repo.
A run looks like this:
Hey! Let's build your Ship 🚀

✔ What is the name of your project? … my-ship-app
? Which setup do you want? › - Use arrow-keys. Return to submit.
❯  PostgreSQL + TanStack Start (full-stack)
   TanStack Start web-only
? Which plugins do you want to install? (space to toggle, enter to confirm)
❯ ◉ auth-starter   better-auth wiring + web sign-in/up
  ◉ admin          Admin dashboard with a user list
  ◯ mailer         Resend + React Email templates
  ◯ cloud-storage  S3-compatible file upload
  ◯ notes          Notes CRUD — example resource
  ◯ ai-chat        Streaming AI chat via @ship/ai
? What deployment type would you like to use? › - Use arrow-keys. Return to submit.
❯  Digital Ocean Apps
   Render
   Digital Ocean Managed Kubernetes
   AWS EKS
Then start it:
cd my-ship-app
pnpm start
pnpm start brings up infrastructure, runs migrations, and starts every service.

Naming the project

Pass a directory to skip the name prompt:
npx @paralect/ship my-ship-app
The CLI validates the name against npm rules and refuses to scaffold into a non-empty folder.

Skipping the deployment prompt

Pass --deployment (-d) with a shortcut to answer that question up front:
npx @paralect/ship my-ship-app --deployment do-apps
ShortcutTarget
do-appsDigital Ocean Apps
renderRender
do-kubernetesDigital Ocean Managed Kubernetes
aws-eksAWS EKS

Adding plugins later

The CLI doesn’t stop at scaffold time. From inside an existing Ship project, pull a plugin into your repo:
npx @paralect/ship install <plugin-name>
npx @paralect/ship install ai-chat
install copies the plugin’s resources, routes and packages into your codebase — apps/api/src/resources/..., apps/web/src/routes/..., packages/... — so from then on every line is yours to edit. See Plugins for the full catalog.

Command reference

CommandDoes
initScaffold a new project interactively
<project-directory>Scaffold into a named directory
install <plugin>Merge a plugin into the current project
-d, --deployment <type>Preselect the deployment target
-v, --versionPrint the CLI version