coldstart

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.

Install
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

FlagDescription
--dry-runDisplay the file tree without writing anything to disk
--verifyRun check-types (TypeScript) after generation to validate output

Examples

Basic usage
pnpm dlx @yabbal/coldstart init
Preview without writing files
pnpm dlx @yabbal/coldstart init --dry-run
Generate and verify TypeScript compilation
pnpm dlx @yabbal/coldstart init --verify

Prompt options

The interactive flow asks for the following fields in order:

#FieldTypeDefaultDescription
1nametextLowercase alphanumeric + dashes (e.g. my-app)
2displayNametextAuto from nameHuman-readable name (e.g. My App)
3descriptiontextShort project description
4packageScopetext@{name}npm package scope (e.g. @myapp)
5platformsmultiselectweb, mobile, desktop, api (min 1)
6webModeselectlanding, app, or landing+app (only if web selected)
7domainselectProduct category (finance, health, ecommerce, etc.)
8billingselectnoneBilling model (only shown if api or mobile selected)
9billingProviderselectpolarStripe or Polar (only shown if billing is not none)
10oauthProvidersmultiselect[]Google, GitHub, Apple (only if api or web selected)
11multiTenantconfirmfalseOrganization support (only if api or web selected)
12rbacconfirmtrueRoles and permissions (only if multiTenant is true)
13i18nconfirmtrueInternationalization
14localestexten, frComma-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

FlagDescription
--dry-runDisplay the file tree without writing anything to disk
--verifyRun check-types (TypeScript) after generation to validate output

Examples

SaaS with subscription billing
coldstart create "a SaaS dashboard with Stripe subscription and Google OAuth"
Mobile fitness app
coldstart create "a fitness app with mobile and web, freemium billing"
E-commerce marketplace
coldstart create "e-commerce marketplace with multi-tenant, per-seat billing"
Multilingual education platform
coldstart create "an international e-learning platform with courses, i18n in en fr es de"
Desktop + web app
coldstart create "a productivity desktop app with Tauri and task management"
Preview inference results
coldstart create "food delivery app with mobile and credits billing" --dry-run

How 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.

Providerstripe 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:

  1. Project name — pre-filled from inference, editable
  2. Display name — pre-filled, editable
  3. Output directory — pre-filled as ./{name}, editable
  4. Summary — all inferred values displayed for review (platforms, domain, billing, i18n, etc.)
  5. 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

FlagDescription
--dry-runDisplay the file tree without writing anything to disk
--verifyRun check-types (TypeScript) after generation to validate output

Examples

Regenerate from saved config
coldstart replay .coldstart.json
Preview output
coldstart replay config.json --dry-run
Replay and verify types
coldstart replay my-project/.coldstart.json --verify

This 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

.coldstart.json
{
  "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:

.github/workflows/scaffold.yml
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: ./output

coldstart 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

ModuleWhat it generatesDependencies
webNext.js app via create-next-app (Tailwind v4, shadcn/ui, next-themes), PostHog analytics, web auth if api existsNone
mobileExpo app via create-expo-app (React Native, Uniwind, HeroUI Native), PostHog analytics, mobile auth if api existsNone
apiHono API + Better Auth + Drizzle ORM + Neon, env validation, db package, email templates (React Email), web/mobile auth wiringNone
desktopTauri 2 app (Rust backend, shared web frontend)Requires web
Add platforms
coldstart add web
coldstart add web --web-mode landing+app
coldstart add mobile
coldstart add api
coldstart add desktop
ModuleWhat it generatesDependencies
billingBilling code (webhooks, middleware, helpers) for chosen model and providerNone (auto-enables multiTenant for per-seat)
authOAuth provider configuration in Better Auth and client-side login buttonsRequires api in platforms
i18nInternationalization config, locale files, next-intl setupNone
tenantMulti-tenant organization support + RBAC (roles, permissions)None (auto-enables rbac)
Add features
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 tenant

Flags

FlagApplies toValuesDescription
--web-modeweblanding, app, landing+appWeb application mode
--modelbillingfreemium, subscription, one-time, credits, per-seat, multi-tierBilling model
--billing-providerbillingpolar, stripePayment provider
--providersauthgoogle, github, apple (comma-separated)OAuth providers to add
--localesi18nLocale 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 setup

Services configured

The setup wizard adapts to your project's platforms and features. Each step is optional and can be skipped:

ServiceConditionWhat it does
Neon databaseapi in platformsRuns db:generate and provides instructions for DATABASE_URL and db:migrate
Vercelweb in platformsLinks the web app via vercel link
EAS (Expo)mobile in platformsInitializes Expo Application Services via eas-cli init
Stripebilling + Stripe providerShows setup instructions: products, webhook URL, API keys
Polarbilling + Polar providerShows setup instructions: products, webhook URL, webhook secret
RevenueCatbilling + mobileShows setup instructions: API keys, entitlements
Resendapi in platformsShows 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:

FlagDescription
--versionDisplay the CLI version
--helpShow help for the command
Examples
coldstart --version
coldstart init --help
coldstart add --help

Exit codes

CodeMeaning
0Success
1Error (invalid config, missing file, validation failure, non-TTY on interactive command)

On this page