Skip to main content
Run voyant --help for inline usage, and voyant <command> --help where a command has its own usage. Global flags: --help / -h and --version / -v.

Open-source commands

Scaffolding

Scaffold a new project from a template. --template operator uses the built-in operator application; you can also pass a path to a local starter directory.

Code generation

Scaffold a new module package under packages/<name> with the standard module layout.
Scaffold a deployment-local extension under src/extensions/<name>/ that attaches to an existing module’s surface — for adding routes (and optionally a detail table) to a module like bookings without forking it. Generates index.ts (via defineDeploymentExtension), routes.ts, and validation.ts; no package.json/tsconfig.json, since an extension is not a package.Flags:
  • --module <target>required; the existing module the extension attaches to (extension.module), e.g. bookings.
  • --public — mount on the public surface (/v1/public/<module>) instead of the default admin surface (/v1/admin/<module>).
  • --with-schema — also emit a schema.ts 1:1 extension table keyed to the target record by a plain-text column (no cross-module foreign key).
  • --dir <path> — base directory; defaults to src/extensions.
  • --force — overwrite existing files.
Emit a defineLink snippet for a cross-module relationship. Each argument is a <module>.<entity> reference, for example crm.person products.product. Flags: --left-list and --right-list (make each side a list), and --cascade (emit { deleteCascade: true }).

Configuration

Inspect the nearest voyant.config.* manifest: print it, validate it, or show which file resolved.

Admin

Emit admin.extensions.generated.ts from the manifest. --check verifies it is in sync without rewriting.
Emit the code-assembled admin route module. Auto-includes the built-in core entry when it resolves. Add --files for the legacy thin-file output, or --out <file> / --routes-dir <dir> to override paths.
Emit the generated destination resolver map.
Check parity between the manifest, admin extensions, and routes or destinations.

Database

Proxy Drizzle Kit commands. generate defaults to a timestamp prefix. These are also available as voyant db:generate, voyant db:migrate, voyant db:studio, voyant db:push, and voyant db:check.
Print or emit the manifest-derived schema list. --style=specifier|file selects module specifiers (default) or absolute paths; --emit writes the generated schema file, optionally to --out <file>; --config <path> points at a specific voyant.config.ts.
Emit link-table DDL, or with --emit-drizzle a generated Drizzle schema for declared links. --out <file> writes to a file instead of stdout; --links <path> / --template <path> point at the link definitions to read.
Report migration drift across manifest, schema, prefix, and link checks.

Preflight and scripts

Preflight checks: env and bindings (env.d.ts against wrangler.jsonc), db doctor, and admin doctor. Exits non-zero on any gate.
Bump the @voyant-travel/framework BOM (meta-package) and install. --to <version> pins a target version (otherwise the latest); --dry-run reports what would change without writing; --package <name> upgrades a different meta-package. Follow with voyant db migrate && voyant doctor.
Run a TypeScript or JavaScript script with the Voyant loader hook and native type stripping.

Cloud commands

These need a Voyant token. See CLI overview for login, organizations, and token resolution. Every cloud command accepts the following global flags:
Emit machine-readable output. On failure, errors are returned as a stable { "error": { "code", "message" } } envelope on stderr.
Target a specific organization (also VOYANT_CLOUD_ORG). Needed only when you are logged in to more than one.
Override the resolved token and API base URL for a single command.
Approve destructive actions non-interactively. Required for deletes when there is no TTY, so agents never hang on a prompt.

Authentication and organizations

Authorize via the browser device flow, or paste a token for CI and headless use. API tokens are organization-bound, so each org you log in to is stored separately. --no-browser prints the device URL instead of opening it; --no-validate skips the token validation call.
Remove a stored credential — one organization with --org, or all of them for the API URL.
Show the resolved API URL, where the token came from, and the organization it is bound to.
Manage which organization the CLI targets. list shows the orgs you are logged in to (the active one is marked), use <slug|id> switches the active org, and current prints it. When you belong to several orgs and none is selected, commands fail with a clear message instead of guessing.

Apps and deployments

Manage apps in the active organization. create <slug> [--name <n>]; delete <app> --yes also tears down the app’s external resources.
Manage an app environment’s variables (default environment production). set <KEY> <value> [--secret] upserts; values are always masked on read.
Trigger a deployment for an app environment (default production).
Inspect and control deployments: list them, show one, stream build logs, cancel a running deploy, or roll back to a previous one (cancel/rollback need --yes).
Read a deployed app’s runtime logs, or stream them live with --follow (-f). Filter with --level, --search, and a time window via --since 1h / --from / --to. In follow mode, --interval <secs> sets the poll interval (default 3).

Databases and storage

Manage managed databases in the active organization. create <name> [--kind neon|d1] (default neon); delete <id> --yes.
branches <id> lists a database’s branches; connection <id> [--branch <b>] [--direct] prints a connection string (pooled by default).
Manage R2 storage buckets. create <name>; delete <id> --yes.

Vault

List the vaults in the active organization with their secret counts (metadata only).
List secret keys and versions in a vault. Values are never shown.
Upsert a secret. If value is omitted, it is read from stdin.
Delete a secret.
The CLI cannot decrypt secrets — there is no secrets get. voyant login mints tokens without the vault:read scope the decrypt endpoints require. Reveal a value in the dashboard, or use a server-side app token with vault:read (see Vault).