noboil

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 help

noboil 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 help

noboil 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 help

noboil 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 help

noboil 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 help

noboil 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=quota

noboil 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=quota

Flag 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)

FlagDescription
`--db=convex\spacetimedb`
--no-demosSkip demo apps
--skip-installSkip bun install after scaffolding
--no-gitSkip auto git init + initial commit

noboil doctor — 2 option(s)

FlagDescription
--fixAuto-remediate common issues (install deps, patch tsconfig)
--last-errorPrint the most recent crash log

noboil sync — 2 option(s)

FlagDescription
--dry-runShow what would change without writing files
--forceUpdate files even when locally modified

noboil eject — 1 option(s)

FlagDescription
--dry-runShow what would change without writing files

noboil convex add — 5 option(s)

FlagDescription
--type=TYPETable type: owned, org, singleton, cache, child, log, kv, quota (default: owned)
--fields=FIELDSField definitions (e.g. "title:string,done:boolean,priority:enum(low,medium,high)")
--parent=TABLEParent table name (required for child type)
--convex-dir=DIRConvex directory (default: convex)
--app-dir=DIRApp directory (default: src/app)

noboil stdb add — 5 option(s)

FlagDescription
--type=TYPETable type: owned, org, singleton, cache, child, log, kv, quota (default: owned)
--fields=FIELDSField definitions (e.g. "title:string,done:boolean,priority:enum(low,medium,high)")
--parent=TABLEParent table name (required for child type)
--module-dir=DIRSpacetimeDB module directory (default: module)
--app-dir=DIRApp directory (default: src/app)

Commands at a glance

CLICommandHotkeyWhat it does
noboil(no args)Interactive dashboard
noboilinitiCreate a new project
noboilstatustProject snapshot (drift, sync age, health)
noboildoctordHealth check; --fix auto-remediates
noboilsyncsPull upstream changes (offline-cached)
noboiladdaScaffold a table — auto-dispatches by DB
noboilejecteInline library code, remove deps
noboilupgradeubun add noboil@latest
noboilcompletionscPrint or install shell completions
noboilconvex <cmd>Run a Convex subcommand (see below)
noboilstdb <cmd>Run a SpacetimeDB subcommand (see below)
noboil convexaddGenerate a new table with CRUD
noboil convexcheckValidate schema/factory consistency
noboil convexdoctorProject diagnostics with health score
noboil convexmigrateSchema diff and migration plans
noboil convexvizVisualize schema relationships
noboil convexdocsGenerate API documentation
noboil stdbaddGenerate a new table with reducers
noboil stdbcheckValidate schema/factory consistency
noboil stdbdoctorProject diagnostics with health score
noboil stdbdevStart integrated local dev workflow
noboil stdbmigrateSchema diff and migration plans
noboil stdbuseSwitch SpacetimeDB target
noboil stdbgenerate dockerGenerate docker-compose.yml
noboil stdbvizVisualize schema relationships
noboil stdbdocsGenerate API documentation
noboil stdbvalidateAlias for check --health

noboil

init

Create a new noboil project.

noboil init [directory]
FlagTypeDefaultDescription
--dbconvex | spacetimedbpromptSkip the database selection prompt
--no-demosbooleanfalseSkip demo apps
--skip-installbooleanfalseSkip bun install after scaffolding
--no-gitbooleanfalseSkip auto git init + initial commit

Examples

bunx noboil@latest init my-app
bunx noboil@latest init my-app --db=spacetimedb --no-demos --skip-install

Terminal 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/docs

After init, the project contains a .noboilrc.json manifest:

{
  "db": "convex",
  "includeDemos": true,
  "scaffoldedAt": "2026-04-13T...",
  "scaffoldedFrom": "abc1234",
  "version": 1
}
FieldPurpose
dbSelected database backend
includeDemosWhether demo apps were included
scaffoldedAtTimestamp of project creation
scaffoldedFromGit commit hash of the template used
versionManifest 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]
FlagTypeDescription
--fixbooleanAuto-remediate warnings (install deps, patch tsconfig customConditions)
--last-errorbooleanPrint 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 status

Walks 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 rc

sync

Pull upstream template updates into an existing project without overwriting local changes.

noboil sync [options]
FlagTypeDefaultDescription
--dry-runbooleanfalseShow what would change without writing files
--forcebooleanfalseUpdate files even when locally modified

Examples

noboil sync
noboil sync --dry-run
noboil sync --force

eject

Inline all noboil/* library code directly into your project and remove the package dependencies.

noboil eject [options]
FlagTypeDefaultDescription
--dry-runbooleanfalseShow what would change without writing files

Examples

noboil eject
noboil eject --dry-run

Note: 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.json

noboil 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

FieldType
fieldTypes?Record&lt;string, CustomFieldType&gt;
hooks?`{ afterAdd?: (ctx: AddContext) => Promise<void> \

AddContext (passed to beforeAdd / afterAdd)

FieldType
db`'convex' \
fields\{ name: string; optional: boolean; type: string \}[]
namestring
parentstring
typestring

CustomFieldType (entries of fieldTypes)

FieldType
convexstring
description?string
stdbstring

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]
FlagTypeDefaultDescription
--typeowned | org | singleton | cache | childownedTable type
--fieldsstringComma-separated field definitions
--parentstringParent table name (required for child type)
--dry-runbooleanfalsePrint 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

TypeDescription
ownedUser-owned CRUD
orgOrg-scoped CRUD
singletonOne record per user
cacheExternal API cache
childNested under a parent table

Field syntax — pass via --fields="…" or as positional tokens after the table name.

SyntaxMeaning
name:typeRequired 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]
FlagTypeDefaultDescription
--schemabooleanfalseCheck schema definitions
--endpointsbooleanfalseCheck endpoint coverage
--indexesbooleanfalseCheck index definitions
--accessbooleanfalseCheck access control patterns
--healthbooleanfalseRun all health checks

doctor

Run project diagnostics and print a health score.

noboil convex doctor

migrate

Generate a schema diff and migration plan.

noboil convex migrate [flags]
FlagTypeDefaultDescription
--fromstringGit ref to diff from (e.g. HEAD~3)
--filestringPath to a schema file to diff against
--snapshotbooleanfalseSave current schema as a snapshot

Examples

noboil convex migrate
noboil convex migrate --from HEAD~3
noboil convex migrate --snapshot

viz

Visualize schema relationships.

noboil convex viz [flags]
FlagTypeDefaultDescription
--mermaidbooleanfalseOutput as Mermaid diagram syntax

docs

Generate API documentation for your Convex backend.

noboil convex docs [flags]
FlagTypeDefaultDescription
--markdownbooleanfalseOutput as Markdown
--fullbooleanfalseInclude internal endpoints

add

Generate a new SpacetimeDB table with typed schema and reducers.

noboil stdb add <table> [flags]
FlagTypeDefaultDescription
--typeowned | org | singleton | cache | childownedTable type
--fieldsstringComma-separated field definitions
--parentstringParent table name (required for child type)
--dry-runbooleanfalsePrint 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

TypeDescription
ownedUser-owned CRUD
orgOrg-scoped CRUD
singletonOne record per user
cacheExternal API cache
childNested under a parent table

Field syntax — pass via --fields="…" or as positional tokens after the table name.

SyntaxMeaning
name:typeRequired 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]
FlagTypeDefaultDescription
--schemabooleanfalseCheck schema definitions
--endpointsbooleanfalseCheck endpoint coverage
--indexesbooleanfalseCheck index definitions
--accessbooleanfalseCheck access control patterns
--healthbooleanfalseRun all health checks

doctor

Run project diagnostics and print a health score. Checks SpacetimeDB-specific dependencies in addition to the standard checks.

noboil stdb doctor

dev

Start the integrated local dev workflow: Docker, module publish, watch mode, and Next.js.

noboil stdb dev [flags]
FlagTypeDefaultDescription
--module-dirstringPath to the SpacetimeDB module directory
--no-dockerbooleanfalseSkip starting Docker
--no-watchbooleanfalseSkip watch mode for module changes

Example

noboil stdb dev --module-dir backend/spacetimedb

migrate

Generate a schema diff and migration plan.

noboil stdb migrate [flags]
FlagTypeDefaultDescription
--fromstringGit ref to diff from (e.g. HEAD~3)
--filestringPath to a schema file to diff against
--snapshotbooleanfalseSave current schema as a snapshot

Examples

noboil stdb migrate
noboil stdb migrate --from HEAD~3
noboil stdb migrate --snapshot

use

Switch the active SpacetimeDB target.

noboil stdb use <local|cloud>

Examples

noboil stdb use local
noboil stdb use cloud

generate docker

Generate a docker-compose.yml for local SpacetimeDB development.

noboil stdb generate docker [flags]
FlagTypeDefaultDescription
--forcebooleanfalseOverwrite existing docker-compose.yml
--stdoutbooleanfalsePrint to stdout instead of writing a file

Examples

noboil stdb generate docker
noboil stdb generate docker --stdout

viz

Visualize schema relationships.

noboil stdb viz [flags]
FlagTypeDefaultDescription
--mermaidbooleanfalseOutput as Mermaid diagram syntax

docs

Generate API documentation for your SpacetimeDB module.

noboil stdb docs [flags]
FlagTypeDefaultDescription
--markdownbooleanfalseOutput as Markdown
--fullbooleanfalseInclude internal reducers

validate

Alias for check --health. Runs all health checks.

noboil stdb validate

On this page