CLI reference
All commands, flags, options, and real-world examples for the coldstart CLI
The coldstart CLI provides 5 commands to scaffold, extend, and configure complete Turborepo monorepos.
pnpm dlx @yabbal/coldstart <command>coldstart init
Interactive project creation. Walks through 14 prompts and generates a complete monorepo.
Synopsis
coldstart init [--dry-run] [--verify]Flags
| Flag | Description |
|---|---|
--dry-run | Display the file tree without writing anything to disk |
--verify | Run check-types (TypeScript) after generation to validate output |
Examples
pnpm dlx @yabbal/coldstart initpnpm dlx @yabbal/coldstart init --dry-runpnpm dlx @yabbal/coldstart init --verifyPrompt options
The interactive flow asks for the following fields in order:
| # | Field | Type | Default | Description |
|---|---|---|---|---|
| 1 | name | text | — | Lowercase alphanumeric + dashes (e.g. my-app) |
| 2 | displayName | text | Auto from name | Human-readable name (e.g. My App) |
| 3 | description | text | — | Short project description |
| 4 | packageScope | text | @{name} | npm package scope (e.g. @myapp) |
| 5 | platforms | multiselect | — | web, mobile, desktop, api (min 1) |
| 6 | webMode | select | — | landing, app, or landing+app (only if web selected) |
| 7 | domain | select | — | Product category (finance, health, ecommerce, etc.) |
| 8 | billing | select | none | Billing model (only shown if api or mobile selected) |
| 9 | billingProvider | select | polar | Stripe or Polar (only shown if billing is not none) |
| 10 | oauthProviders | multiselect | [] | Google, GitHub, Apple (only if api or web selected) |
| 11 | multiTenant | confirm | false | Organization support (only if api or web selected) |
| 12 | rbac | confirm | true | Roles and permissions (only if multiTenant is true) |
| 13 | i18n | confirm | true | Internationalization |
| 14 | locales | text | en, fr | Comma-separated locale codes (only if i18n enabled) |
After all prompts, a summary is displayed for review. Generation starts only after explicit confirmation.
coldstart init requires an interactive terminal (TTY). For non-interactive usage (CI, Claude Code), use coldstart replay with a config file instead.
coldstart create
Create a project from a natural language description. The CLI infers platforms, domain, billing model, and features from keywords in your description.
Synopsis
coldstart create "<description>" [--dry-run] [--verify]Flags
| Flag | Description |
|---|---|
--dry-run | Display the file tree without writing anything to disk |
--verify | Run check-types (TypeScript) after generation to validate output |
Examples
coldstart create "a SaaS dashboard with Stripe subscription and Google OAuth"coldstart create "a fitness app with mobile and web, freemium billing"coldstart create "e-commerce marketplace with multi-tenant, per-seat billing"coldstart create "an international e-learning platform with courses, i18n in en fr es de"coldstart create "a productivity desktop app with Tauri and task management"coldstart create "food delivery app with mobile and credits billing" --dry-runHow inference works
The CLI performs keyword matching on your description to infer configuration values. It works in this order:
Platforms — Scans for keywords like web, mobile, desktop, api, dashboard, expo, tauri, backend. If mobile is detected, api is auto-added. If nothing matches, defaults to web.
Web mode — If web is detected, keywords like landing, marketing infer landing mode; dashboard, saas, admin infer app mode; both together or api present defaults to landing+app.
Domain — Matches against domain-specific keywords (e.g. fitness maps to health, shop maps to ecommerce, task maps to productivity).
Billing — Looks for billing-related keywords. If none match but api or mobile is selected, defaults to freemium.
Provider — stripe or checkout selects Stripe; otherwise defaults to Polar.
Features — Detects i18n (and extracts locale codes), multi-tenant, and RBAC from keywords.
Name — Extracts a slug from the description (up to 3 words), removing articles and stop words.
Confirmation flow
After inference, the CLI enters an interactive confirmation flow:
- Project name — pre-filled from inference, editable
- Display name — pre-filled, editable
- Output directory — pre-filled as
./{name}, editable - Summary — all inferred values displayed for review (platforms, domain, billing, i18n, etc.)
- Confirmation — explicit "Start generation?" prompt
You can edit name, display name, and output directory. All other inferred values are shown in the summary. If inference got something wrong, cancel and use coldstart init for full control.
coldstart create requires an interactive terminal (TTY) for the confirmation flow. For fully non-interactive usage, use coldstart replay.
Keyword reference
coldstart replay
Regenerate a project from a .coldstart.json config file. Deterministic: the same config always produces the same output.
Synopsis
coldstart replay <config-file> [--dry-run] [--verify]Flags
| Flag | Description |
|---|---|
--dry-run | Display the file tree without writing anything to disk |
--verify | Run check-types (TypeScript) after generation to validate output |
Examples
coldstart replay .coldstart.jsoncoldstart replay config.json --dry-runcoldstart replay my-project/.coldstart.json --verifyThis is the command Claude Code uses internally. The skill writes a temp config file and runs coldstart replay to generate the project non-interactively.
Complete config file example
{
"name": "fittrack",
"displayName": "FitTrack",
"description": "A fitness tracking app with workout plans and nutrition",
"packageScope": "@fittrack",
"platforms": ["web", "mobile", "api"],
"webMode": "landing+app",
"domain": "health",
"billing": "freemium",
"billingProvider": "polar",
"i18n": true,
"locales": ["en", "fr"],
"multiTenant": false,
"rbac": false,
"oauthProviders": ["google", "apple"],
"outputDir": "./fittrack"
}CI/CD usage
Use replay in CI pipelines to scaffold projects from a config file:
name: Scaffold project
on:
workflow_dispatch:
inputs:
config:
description: "Path to .coldstart.json"
required: true
jobs:
scaffold:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v4
with:
version: 10
- uses: actions/setup-node@v4
with:
node-version: 24
cache: pnpm
- name: Generate project
run: pnpm dlx @yabbal/coldstart replay ${{ github.event.inputs.config }} --verify
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: scaffolded-project
path: ./outputcoldstart add
Add a platform or feature to an existing project. Reads .coldstart.json from the current directory, runs the relevant generators, then updates the config file, CLAUDE.md, skills, and MCP servers.
Synopsis
coldstart add <module> [flags]Available modules
| Module | What it generates | Dependencies |
|---|---|---|
web | Next.js app via create-next-app (Tailwind v4, shadcn/ui, next-themes), PostHog analytics, web auth if api exists | None |
mobile | Expo app via create-expo-app (React Native, Uniwind, HeroUI Native), PostHog analytics, mobile auth if api exists | None |
api | Hono API + Better Auth + Drizzle ORM + Neon, env validation, db package, email templates (React Email), web/mobile auth wiring | None |
desktop | Tauri 2 app (Rust backend, shared web frontend) | Requires web |
coldstart add web
coldstart add web --web-mode landing+app
coldstart add mobile
coldstart add api
coldstart add desktop| Module | What it generates | Dependencies |
|---|---|---|
billing | Billing code (webhooks, middleware, helpers) for chosen model and provider | None (auto-enables multiTenant for per-seat) |
auth | OAuth provider configuration in Better Auth and client-side login buttons | Requires api in platforms |
i18n | Internationalization config, locale files, next-intl setup | None |
tenant | Multi-tenant organization support + RBAC (roles, permissions) | None (auto-enables rbac) |
coldstart add billing --model subscription --billing-provider stripe
coldstart add billing --model credits --billing-provider polar
coldstart add auth --providers google,github,apple
coldstart add i18n --locales en,fr,es,de
coldstart add tenantFlags
| Flag | Applies to | Values | Description |
|---|---|---|---|
--web-mode | web | landing, app, landing+app | Web application mode |
--model | billing | freemium, subscription, one-time, credits, per-seat, multi-tier | Billing model |
--billing-provider | billing | polar, stripe | Payment provider |
--providers | auth | google, github, apple (comma-separated) | OAuth providers to add |
--locales | i18n | Locale codes (comma-separated) | Supported locales |
What happens when you add a module
Every add command follows the same pattern:
Read .coldstart.json from the current directory
Validate the module can be added (not already present, dependencies met)
Run the relevant generator(s) to create files
Regenerate CLAUDE.md, skills script, and MCP servers to reflect the new module
Update .coldstart.json with the new configuration
Format all code with Biome
In non-interactive mode (CI, Claude Code), all required flags must be passed explicitly. For example, coldstart add billing without --model will fail in a non-TTY environment.
coldstart setup
Interactive infrastructure onboarding. Reads .coldstart.json from the current directory and offers to configure each service step by step.
Synopsis
coldstart setupServices configured
The setup wizard adapts to your project's platforms and features. Each step is optional and can be skipped:
| Service | Condition | What it does |
|---|---|---|
| Neon database | api in platforms | Runs db:generate and provides instructions for DATABASE_URL and db:migrate |
| Vercel | web in platforms | Links the web app via vercel link |
| EAS (Expo) | mobile in platforms | Initializes Expo Application Services via eas-cli init |
| Stripe | billing + Stripe provider | Shows setup instructions: products, webhook URL, API keys |
| Polar | billing + Polar provider | Shows setup instructions: products, webhook URL, webhook secret |
| RevenueCat | billing + mobile | Shows setup instructions: API keys, entitlements |
| Resend | api in platforms | Shows setup instructions: API key, email templates |
Example output
┌ ━━━ Infrastructure setup ━━━
│
◇ Set up the Neon database now? Yes
│ → Set DATABASE_URL in apps/api/.env
│ → Then run: pnpm -F @myapp/db db:migrate
│
◇ Set up Vercel deployment now? No
│
◇ Initialize EAS (Expo Application Services)? Yes
│
◇ View billing setup instructions? Yes
│ → Polar: create your products on dashboard.polar.sh
│ → Polar: configure the webhook URL to your API
│ → Polar: add POLAR_WEBHOOK_SECRET in apps/api/.env
│
◇ View Resend (emails) setup instructions? No
│
┌ Onboarding summary
│ ✔ Database
│ ○ Vercel (skipped)
│ ✔ EAS
│ ✔ Billing
│ ○ Resend (skipped)
└coldstart setup requires an interactive terminal (TTY). Run it manually after project generation.
Global options
These flags are available on all commands via Commander:
| Flag | Description |
|---|---|
--version | Display the CLI version |
--help | Show help for the command |
coldstart --version
coldstart init --help
coldstart add --helpExit codes
| Code | Meaning |
|---|---|
0 | Success |
1 | Error (invalid config, missing file, validation failure, non-TTY on interactive command) |