CLI Reference
Complete reference for all noboil CLI commands — project scaffolding, code generation, diagnostics, and migrations.
Three CLIs ship with noboil. noboil handles project creation and top-level ops. noboil convex and noboil stdb are database-specific. All three support --version and --help.
Running noboil with no args opens an interactive dashboard with single-key hotkeys. / filters commands, ↑↓ navigates recent history, any letter runs the matching command instantly.
Live help output
These blocks are regenerated from actual CLI --help output by doc/scripts/gen-cli-help.ts. They are the source of truth for every flag and description.
noboil --help
noboil — schema-first, zero-boilerplate fullstack
Usage:
noboil <command> [options]
Commands:
add Add a table/endpoint (auto-detects DB from .noboilrc.json)
completions Print or install shell completion script
convex Run a Convex subcommand (add, check, docs, migrate, viz, doctor)
doctor Check project health and version alignment
eject Detach from upstream, convert to standalone
init Create a new noboil project
status Show project drift, last sync, and health at a glance
stdb Run a SpacetimeDB subcommand (add, dev, generate, migrate, use, viz, ...)
sync Pull and apply upstream changes
tool Run or scaffold a tool (new, remove, codegen, docgen, or <provider> <name>)
upgrade Install the latest noboil version
Run noboil <command> --help for command-specific options.noboil init --help
noboil init — create a new noboil project
Usage:
noboil init [directory]
Options:
--db=convex|spacetimedb Skip database prompt
--no-demos Skip demo apps
--skip-install Skip bun install after scaffolding
--no-git Skip auto git init + initial commit
--help, -h Show this helpnoboil doctor --help
noboil doctor — check project health
Usage:
noboil doctor [--fix] [--last-error]
Options:
--fix Auto-remediate common issues (install deps, patch tsconfig)
--last-error Print the most recent crash log
--help, -h Show this helpnoboil status --help
noboil status — snapshot of the current project
Usage:
noboil status
Shows: database, scaffolded-from hash, drift vs upstream, last sync, install health.noboil sync --help
noboil sync — pull upstream changes
Usage:
noboil sync [options]
Options:
--dry-run Show what would change without writing files
--force Update files even when locally modified
--help, -h Show this helpnoboil eject --help
noboil eject — inline noboil library locally
Usage:
noboil eject [--dry-run] [--yes]
Options:
--dry-run Show what would change without writing files
--yes, -y Skip confirmation prompt
--help, -h Show this helpnoboil upgrade --help
noboil upgrade — install latest noboil
Usage:
noboil upgrade [--global]
Options:
--global, -g Upgrade the globally installed binary (bun add -g noboil@latest)
--help, -h Show this helpnoboil convex --help
noboil/convex — Zod schema → fullstack app
Usage:
noboil convex <command> [options]
Commands:
add Add a new table/endpoint to your project
check Validate schema/factory consistency
docs Generate API documentation
doctor Run project diagnostics
migrate Schema diff and migration plans
viz Visualize schema relationships
Run noboil convex <command> --help for command-specific options.noboil convex add --help
noboil convex add — add a new table/endpoint to your project
Usage:
noboil convex add <table-name> [options]
Options:
--type=TYPE Table type: owned, org, singleton, cache, child, log, kv, quota (default: owned)
--fields=FIELDS Field definitions (e.g. "title:string,done:boolean,priority:enum(low,medium,high)")
--parent=TABLE Parent table name (required for child type)
--convex-dir=DIR Convex directory (default: convex)
--app-dir=DIR App directory (default: src/app)
--help, -h Show this help
Examples:
$ noboil convex add todo --fields="title:string,done:boolean"
$ noboil convex add wiki --type=org --fields="title:string,content:string,status:enum(draft,published)"
$ noboil convex add message --type=child --parent=chat --fields="text:string"
$ noboil convex add profile --type=singleton --fields="displayName:string,bio:string?"
$ noboil convex add movie --type=cache --fields="title:string,tmdb_id:number"
$ noboil convex add vote --type=log --parent=poll --fields="optionIdx:number,voter:string"
$ noboil convex add siteConfig --type=kv --fields="active:boolean,message:string"
$ noboil convex add apiQuota --type=quotanoboil stdb --help
noboil stdb — Zod schema → fullstack app
Usage:
noboil stdb <command> [options]
Commands:
add Add a new table/reducer to your project
check Validate schema/reducer consistency
dev Start integrated local development workflow
docs Generate API documentation
doctor Run project diagnostics
generate Generate project files (docker-compose, etc.)
migrate Schema diff and publish migration plans
use Switch SpacetimeDB target (local / cloud)
validate Lint schema, reducers, indexes, and access control
viz Visualize schema relationships
Run noboil stdb <command> --help for command-specific options.noboil stdb add --help
noboil stdb add — add a new table/reducer to your project
Usage:
noboil stdb add <table-name> [options]
Options:
--type=TYPE Table type: owned, org, singleton, cache, child, log, kv, quota (default: owned)
--fields=FIELDS Field definitions (e.g. "title:string,done:boolean,priority:enum(low,medium,high)")
--parent=TABLE Parent table name (required for child type)
--module-dir=DIR SpacetimeDB module directory (default: module)
--app-dir=DIR App directory (default: src/app)
--help, -h Show this help
Examples:
$ noboil stdb add todo --fields="title:string,done:boolean"
$ noboil stdb add wiki --type=org --fields="title:string,content:string,status:enum(draft,published)"
$ noboil stdb add message --type=child --parent=chat --fields="text:string"
$ noboil stdb add profile --type=singleton --fields="displayName:string,bio:string?"
$ noboil stdb add movie --type=cache --fields="title:string,externalId:string"
$ noboil stdb add vote --type=log --parent=poll --fields="option:string"
$ noboil stdb add siteConfig --type=kv --fields="active:boolean,message:string"
$ noboil stdb add apiQuota --type=quotaFlag reference (parsed from --help)
Same data as the help blocks above, parsed into scannable per-command tables.
Parsed flag tables for every --help block above. 19 flags total.
noboil init — 4 option(s)
| Flag | Description |
|---|---|
| `--db=convex\ | spacetimedb` |
--no-demos | Skip demo apps |
--skip-install | Skip bun install after scaffolding |
--no-git | Skip auto git init + initial commit |
noboil doctor — 2 option(s)
| Flag | Description |
|---|---|
--fix | Auto-remediate common issues (install deps, patch tsconfig) |
--last-error | Print the most recent crash log |
noboil sync — 2 option(s)
| Flag | Description |
|---|---|
--dry-run | Show what would change without writing files |
--force | Update files even when locally modified |
noboil eject — 1 option(s)
| Flag | Description |
|---|---|
--dry-run | Show what would change without writing files |
noboil convex add — 5 option(s)
| Flag | Description |
|---|---|
--type=TYPE | Table type: owned, org, singleton, cache, child, log, kv, quota (default: owned) |
--fields=FIELDS | Field definitions (e.g. "title:string,done:boolean,priority:enum(low,medium,high)") |
--parent=TABLE | Parent table name (required for child type) |
--convex-dir=DIR | Convex directory (default: convex) |
--app-dir=DIR | App directory (default: src/app) |
noboil stdb add — 5 option(s)
| Flag | Description |
|---|---|
--type=TYPE | Table type: owned, org, singleton, cache, child, log, kv, quota (default: owned) |
--fields=FIELDS | Field definitions (e.g. "title:string,done:boolean,priority:enum(low,medium,high)") |
--parent=TABLE | Parent table name (required for child type) |
--module-dir=DIR | SpacetimeDB module directory (default: module) |
--app-dir=DIR | App directory (default: src/app) |
Commands at a glance
| CLI | Command | Hotkey | What it does |
|---|---|---|---|
noboil | (no args) | — | Interactive dashboard |
noboil | init | i | Create a new project |
noboil | status | t | Project snapshot (drift, sync age, health) |
noboil | doctor | d | Health check; --fix auto-remediates |
noboil | sync | s | Pull upstream changes (offline-cached) |
noboil | add | a | Scaffold a table — auto-dispatches by DB |
noboil | eject | e | Inline library code, remove deps |
noboil | upgrade | u | bun add noboil@latest |
noboil | completions | c | Print or install shell completions |
noboil | convex <cmd> | — | Run a Convex subcommand (see below) |
noboil | stdb <cmd> | — | Run a SpacetimeDB subcommand (see below) |
noboil convex | add | — | Generate a new table with CRUD |
noboil convex | check | — | Validate schema/factory consistency |
noboil convex | doctor | — | Project diagnostics with health score |
noboil convex | migrate | — | Schema diff and migration plans |
noboil convex | viz | — | Visualize schema relationships |
noboil convex | docs | — | Generate API documentation |
noboil stdb | add | — | Generate a new table with reducers |
noboil stdb | check | — | Validate schema/factory consistency |
noboil stdb | doctor | — | Project diagnostics with health score |
noboil stdb | dev | — | Start integrated local dev workflow |
noboil stdb | migrate | — | Schema diff and migration plans |
noboil stdb | use | — | Switch SpacetimeDB target |
noboil stdb | generate docker | — | Generate docker-compose.yml |
noboil stdb | viz | — | Visualize schema relationships |
noboil stdb | docs | — | Generate API documentation |
noboil stdb | validate | — | Alias for check --health |
noboil
init
Create a new noboil project.
noboil init [directory]| Flag | Type | Default | Description |
|---|---|---|---|
--db | convex | spacetimedb | prompt | Skip the database selection prompt |
--no-demos | boolean | false | Skip demo apps |
--skip-install | boolean | false | Skip bun install after scaffolding |
--no-git | boolean | false | Skip auto git init + initial commit |
Examples
bunx noboil@latest init my-appbunx noboil@latest init my-app --db=spacetimedb --no-demos --skip-installTerminal walkthrough:
$ bunx noboil@latest init my-app
Pick your database:
1. Convex (hosted, reactive queries, server functions)
2. SpacetimeDB (self-hosted, subscriptions, Rust module)
Choice (1/2): 1
Include demo apps? (Y/n): Y
Project directory: my-app
✓ scaffolding...
✓ cleaning up unused files...
✓ patching package.json...
✓ installing dependencies...
Done! Project created at my-app
$ cd my-app
$ bun setup:convex # or bun setup:spacetimedb
$ bun dev
Docs: https://noboil.dev/docsAfter init, the project contains a .noboilrc.json manifest:
{
"db": "convex",
"includeDemos": true,
"scaffoldedAt": "2026-04-13T...",
"scaffoldedFrom": "abc1234",
"version": 1
}| Field | Purpose |
|---|---|
db | Selected database backend |
includeDemos | Whether demo apps were included |
scaffoldedAt | Timestamp of project creation |
scaffoldedFrom | Git commit hash of the template used |
version | Manifest schema version |
Don't edit this file manually — noboil sync and noboil doctor read it to understand your project. If you need to switch databases, run noboil init again in a fresh directory.
doctor
Check project health.
noboil doctor [--fix] [--last-error]| Flag | Type | Description |
|---|---|---|
--fix | boolean | Auto-remediate warnings (install deps, patch tsconfig customConditions) |
--last-error | boolean | Print the most recent crash log from ~/.noboil/last-error.log |
Checks: package.json presence, noboil dep, bun version, node_modules, tsconfig.json, manifest, upstream sync state, and database-specific directories.
status
Project snapshot — drift vs upstream, sync age, install health. Read-only.
noboil statusWalks up directories to find .noboilrc.json, so it works from any subdirectory. Warns if the last sync is >30 days old.
upgrade
Install the latest noboil. Inside a noboil project adds to deps; outside, defaults to -g (global).
noboil upgrade [--global]completions
Print or install a shell completion script.
noboil completions bash | zsh | fish # print to stdout
noboil completions install bash | zsh | fish # append to your shell rcsync
Pull upstream template updates into an existing project without overwriting local changes.
noboil sync [options]| Flag | Type | Default | Description |
|---|---|---|---|
--dry-run | boolean | false | Show what would change without writing files |
--force | boolean | false | Update files even when locally modified |
Examples
noboil syncnoboil sync --dry-runnoboil sync --forceeject
Inline all noboil/* library code directly into your project and remove the package dependencies.
noboil eject [options]| Flag | Type | Default | Description |
|---|---|---|---|
--dry-run | boolean | false | Show what would change without writing files |
Examples
noboil ejectnoboil eject --dry-runNote: After ejecting, sync and doctor behavior changes because your project is detached from the upstream template.
Namespaces and auto-dispatch
Instead of invoking noboil convex / noboil stdb directly, you can run them through the unified noboil entry:
noboil convex add post # same as noboil convex add post
noboil stdb add post # same as noboil stdb add post
noboil add post # auto-dispatches based on .noboilrc.jsonnoboil add reads .noboilrc.json (walking up from cwd) to pick the right backend. Useful if you forget which DB the project uses.
Plugin hooks (noboil.config.ts)
Create noboil.config.ts at the project root to run code around scaffolding operations:
import { defineConfig } from 'noboil/config'
export default defineConfig({
hooks: {
beforeAdd: async ({ db, name, type, fields }) => {
// runs before 'noboil add' writes files
// throw to cancel
},
afterAdd: async ({ db, name, type, fields }) => {
// runs after files are written
// e.g. notify team Slack, run a formatter, etc.
}
}
})NoboilConfig
| Field | Type |
|---|---|
fieldTypes? | Record<string, CustomFieldType> |
hooks? | `{ afterAdd?: (ctx: AddContext) => Promise<void> \ |
AddContext (passed to beforeAdd / afterAdd)
| Field | Type |
|---|---|
db | `'convex' \ |
fields | \{ name: string; optional: boolean; type: string \}[] |
name | string |
parent | string |
type | string |
CustomFieldType (entries of fieldTypes)
| Field | Type |
|---|---|
convex | string |
description? | string |
stdb | string |
Hooks are skipped when --dry-run is passed. Config files ending in .ts, .mts, .js, .mjs are all accepted.
Database CLIs
add
Generate a new table with typed schema, factory wiring, and CRUD endpoints.
noboil convex add <table> [flags]| Flag | Type | Default | Description |
|---|---|---|---|
--type | owned | org | singleton | cache | child | owned | Table type |
--fields | string | — | Comma-separated field definitions |
--parent | string | — | Parent table name (required for child type) |
--dry-run | boolean | false | Print what would be generated without writing files |
Run with no <table> to launch an interactive Ink wizard (table name, type, field-by-field entry, live preview, esc goes back, x on review pops last field).
Table types
| Type | Description |
|---|---|
owned | User-owned CRUD |
org | Org-scoped CRUD |
singleton | One record per user |
cache | External API cache |
child | Nested under a parent table |
Field syntax — pass via --fields="…" or as positional tokens after the table name.
| Syntax | Meaning |
|---|---|
name:type | Required field |
name:type? | Optional field |
status:enum(a,b,c) | Enum field |
Examples
noboil convex add todo --fields="title:string,done:boolean"noboil convex add wiki --type=org --fields="title:string,content:string,status:enum(draft,published)"noboil convex add message --type=child --parent=chat --fields="text:string"check
Validate schema and factory consistency.
noboil convex check [flags]| Flag | Type | Default | Description |
|---|---|---|---|
--schema | boolean | false | Check schema definitions |
--endpoints | boolean | false | Check endpoint coverage |
--indexes | boolean | false | Check index definitions |
--access | boolean | false | Check access control patterns |
--health | boolean | false | Run all health checks |
doctor
Run project diagnostics and print a health score.
noboil convex doctormigrate
Generate a schema diff and migration plan.
noboil convex migrate [flags]| Flag | Type | Default | Description |
|---|---|---|---|
--from | string | — | Git ref to diff from (e.g. HEAD~3) |
--file | string | — | Path to a schema file to diff against |
--snapshot | boolean | false | Save current schema as a snapshot |
Examples
noboil convex migratenoboil convex migrate --from HEAD~3noboil convex migrate --snapshotviz
Visualize schema relationships.
noboil convex viz [flags]| Flag | Type | Default | Description |
|---|---|---|---|
--mermaid | boolean | false | Output as Mermaid diagram syntax |
docs
Generate API documentation for your Convex backend.
noboil convex docs [flags]| Flag | Type | Default | Description |
|---|---|---|---|
--markdown | boolean | false | Output as Markdown |
--full | boolean | false | Include internal endpoints |
add
Generate a new SpacetimeDB table with typed schema and reducers.
noboil stdb add <table> [flags]| Flag | Type | Default | Description |
|---|---|---|---|
--type | owned | org | singleton | cache | child | owned | Table type |
--fields | string | — | Comma-separated field definitions |
--parent | string | — | Parent table name (required for child type) |
--dry-run | boolean | false | Print what would be generated without writing files |
Run with no <table> to launch an interactive Ink wizard (table name, type, field-by-field entry, live preview, esc goes back, x on review pops last field).
Table types
| Type | Description |
|---|---|
owned | User-owned CRUD |
org | Org-scoped CRUD |
singleton | One record per user |
cache | External API cache |
child | Nested under a parent table |
Field syntax — pass via --fields="…" or as positional tokens after the table name.
| Syntax | Meaning |
|---|---|
name:type | Required field |
name:type? | Optional field |
status:enum(a,b,c) | Enum field |
Examples
noboil stdb add todo --fields="title:string,done:boolean"noboil stdb add wiki --type=org --fields="title:string,content:string,status:enum(draft,published)"noboil stdb add message --type=child --parent=chat --fields="text:string"check
Validate schema and factory consistency.
noboil stdb check [flags]| Flag | Type | Default | Description |
|---|---|---|---|
--schema | boolean | false | Check schema definitions |
--endpoints | boolean | false | Check endpoint coverage |
--indexes | boolean | false | Check index definitions |
--access | boolean | false | Check access control patterns |
--health | boolean | false | Run all health checks |
doctor
Run project diagnostics and print a health score. Checks SpacetimeDB-specific dependencies in addition to the standard checks.
noboil stdb doctordev
Start the integrated local dev workflow: Docker, module publish, watch mode, and Next.js.
noboil stdb dev [flags]| Flag | Type | Default | Description |
|---|---|---|---|
--module-dir | string | — | Path to the SpacetimeDB module directory |
--no-docker | boolean | false | Skip starting Docker |
--no-watch | boolean | false | Skip watch mode for module changes |
Example
noboil stdb dev --module-dir backend/spacetimedbmigrate
Generate a schema diff and migration plan.
noboil stdb migrate [flags]| Flag | Type | Default | Description |
|---|---|---|---|
--from | string | — | Git ref to diff from (e.g. HEAD~3) |
--file | string | — | Path to a schema file to diff against |
--snapshot | boolean | false | Save current schema as a snapshot |
Examples
noboil stdb migratenoboil stdb migrate --from HEAD~3noboil stdb migrate --snapshotuse
Switch the active SpacetimeDB target.
noboil stdb use <local|cloud>Examples
noboil stdb use localnoboil stdb use cloudgenerate docker
Generate a docker-compose.yml for local SpacetimeDB development.
noboil stdb generate docker [flags]| Flag | Type | Default | Description |
|---|---|---|---|
--force | boolean | false | Overwrite existing docker-compose.yml |
--stdout | boolean | false | Print to stdout instead of writing a file |
Examples
noboil stdb generate dockernoboil stdb generate docker --stdoutviz
Visualize schema relationships.
noboil stdb viz [flags]| Flag | Type | Default | Description |
|---|---|---|---|
--mermaid | boolean | false | Output as Mermaid diagram syntax |
docs
Generate API documentation for your SpacetimeDB module.
noboil stdb docs [flags]| Flag | Type | Default | Description |
|---|---|---|---|
--markdown | boolean | false | Output as Markdown |
--full | boolean | false | Include internal reducers |
validate
Alias for check --health. Runs all health checks.
noboil stdb validate