This is the manual for the vukem command. It lists every command, every flag, what each one writes to disk, the errors you may hit and how to fix them. Each command has a one-line purpose, a usage line, arguments, flags, and two examples: a realistic one and an advanced one. All output shown was captured from the real command.
For a guided tour with explanations and analogies, read the CLI overview. Use this page when you already know what you want and need the exact syntax.
You will find:
- A cheat sheet of all commands
- The global flags, environment variables and exit codes
- Common workflows, end to end
- Links to one reference page per command group
Command cheat sheet#
Commands marked global run in the vukem binary and work on files. Commands marked app run inside your project's cmd/app binary: vukem builds it and passes the arguments through (how delegation works).
| Command | Kind | One-liner |
|---|---|---|
vukem new | global | Create a project from the embedded starter |
vukem serve | global | Run the app in development and restart it on changes |
vukem build | global | Build the assets and the production binary |
vukem version | global | Print the CLI version |
vukem list | global | List the commands |
vukem install:auth | global | Add login, registration, password reset, verification |
vukem install:api | global | Add API tokens, /api/v1, CORS, rate limiting |
vukem install:admin | global | Add the admin panel at /admin |
vukem install:flags | global | Add feature flags |
vukem install:billing | global | Add Stripe subscriptions |
vukem install:inertia | global | Turn the HTMX starter into an Inertia app |
vukem boost:install | global | Add guidelines and an MCP server for AI agents |
vukem make:controller | global | Create a controller |
vukem make:model | global | Create a model, optionally with migration, factory, controller |
vukem make:migration | global | Create a timestamped migration and register it |
vukem make:middleware | global | Create an HTTP middleware |
vukem make:request | global | Create a validated request struct |
vukem make:command | global | Create an app command and register it |
vukem make:provider | global | Create a provider and register it |
vukem make:resource | global | Create an API resource (JSON transformer) |
vukem make:factory | global | Create a model factory |
vukem make:seeder | global | Create a seeder and register it |
vukem make:event | global | Create an event type |
vukem make:listener | global | Create an event listener and register it |
vukem make:job | global | Create a queued job and register its handler |
vukem make:mail | global | Create a mailable and its view |
vukem make:policy | global | Create an authorization policy and register it |
vukem make:admin-resource | global | Create an admin panel resource for a model |
vukem make:test | global | Create a test that uses the fluent client |
vukem make:proto | global | Create a gRPC service .proto and buf files |
vukem codegen:rpc | global | Generate Go and connect-go code from proto/ |
vukem key:generate | global | Write a new APP_KEY to .env |
vukem key:rotate | global | Replace APP_KEY and keep the old one |
vukem down | global | Put the app in maintenance mode |
vukem up | global | Leave maintenance mode |
vukem migrate | app | Run pending migrations |
vukem migrate:rollback | app | Roll back the last batch or N migrations |
vukem migrate:reset | app | Roll back every migration |
vukem migrate:fresh | app | Drop all tables and migrate again |
vukem migrate:status | app | Show which migrations ran |
vukem db:seed | app | Run the seeders |
vukem db:wipe | app | Drop every table |
vukem route:list | app | List the registered routes |
vukem about | app | Show the application and environment summary |
vukem queue:work | app | Process queued jobs |
vukem queue:failed | app | List failed jobs |
vukem queue:retry | app | Re-queue failed jobs |
vukem queue:forget | app | Delete failed jobs |
vukem schedule:run | app | Run the scheduled tasks that are due now |
vukem schedule:work | app | Run the scheduler in the foreground |
vukem schedule:list | app | List the tasks and their next run |
vukem cache:prune | app | Delete expired database cache entries |
vukem session:prune | app | Delete expired database sessions |
vukem openapi:export | app | Print the OpenAPI 3.1 document |
vukem openapi:serve | app | Preview the API reference locally (opt-in) |
vukem codegen:types | app | Generate TypeScript types and Zod schemas |
vukem codegen:routes | app | Generate typed frontend routes |
vukem codegen:client | app | Generate a typed API client in TypeScript or Go |
vukem ssr:start | app | Run the Inertia SSR server and restart it on crash |
vukem ssr:check | app | Check that the SSR server answers /health |
vukem boost:mcp | app | MCP server for coding agents (started by agents) |
vukem <your command> | app | Commands you add with vukem make:command |
Global flags#
These work on the vukem binary itself, before any command.
| Flag | What it does |
|---|---|
-h, --help, help, list | Print the command list. Same as running vukem with no arguments. |
help <command> | Print the usage line, description and flags of one global command. It exits 2 for an unknown name. |
<command> -h | Same as help <command>. For an app command it prints the flags of that command only. |
-v, --version, version | Print vukem <version>. A build from a checkout prints devel. |
Per-command rules:
- Flags use Go's
flagpackage:-forceand--forceare the same.--event=Xand--event Xare the same. - On global commands flags may come before or after the arguments:
vukem make:model Comment -mequalsvukem make:model -m Comment. - On app commands flags must come before positional arguments.
db:seedis the exception: it reads seeder names first, then flags. --ends flag parsing.- Boolean flags do not combine: write
-m -f -c, not-mfc. - There is no
--env,--quietor--no-colorflag. Output is plain text with no colour.
Environment variables#
The global CLI reads almost nothing from the environment:
| Variable | Read by | Effect |
|---|---|---|
PATH | all | Finds go, git, npm, bun, pnpm, yarn, buf, protoc, node |
CGO_ENABLED | build, delegated builds | A value you set wins; otherwise builds run with CGO_ENABLED=0 |
Everything else is read by your app, from the process environment or the .env file in the project root. The ones the CLI commands rely on:
| Variable | Default | Used by |
|---|---|---|
APP_ENV | development | Destructive commands need -force when it is production |
APP_DEBUG | false | Must be false when APP_ENV=production, or every app command fails to boot |
APP_KEY | none | Sessions and encryption. Written by key:generate, new |
APP_PREVIOUS_KEYS | none | Old keys kept by key:rotate |
HOST, PORT | localhost, 3000 | serve, about |
DATABASE_URL | file:storage/database.sqlite | migrate*, db:* |
QUEUE_CONNECTION, QUEUE_NAMES, QUEUE_CONCURRENCY | sync, default, 4 | queue:* |
SCHEDULE_TIMEZONE | UTC | schedule:* |
OPENAPI_PREFIX | none | Default for -prefix in openapi:export and codegen:* |
SHUTDOWN_TIMEOUT | 15s | How long queue:work waits for running jobs after Ctrl+C |
See Configuration for the full list.
Exit codes#
| Code | Meaning |
|---|---|
0 | Success |
1 | Failure. The message starts with error: for global commands. |
2 | Usage error: unknown command, missing or extra argument, bad flag value. Global commands also print Run 'vukem list' for the available commands. |
A delegated app command returns its own exit code unchanged. A bare vukem <unknown> is delegated too, so inside a project it prints the app's command list and exits 2.
How commands are found#
- If the name is a global command,
vukemruns it. - Otherwise
vukembuildscmd/appinto.vukem/bin/appand runs it with the same arguments, standard streams and environment. It rebuilds only when a.go,.templ,go.mod,go.sumor.buildtagsfile is newer than the binary. - Outside a project you get
unknown command "migrate" (app commands need a Vukem project with cmd/app).
You may skip step 2 and run the binary yourself: go run ./cmd/app migrate.
Common workflows#
New API project#
vukem new shop --api --module github.com/acme/shop
cd shop
vukem migrate
vukem serveMigrated: 20260101000000_create_posts_table
Migrated: 20261024221606_create_users_table
Migrated: 20261024221607_create_auth_tablesThen curl localhost:3000/up answers {"status":"ok"}. Check the routes with vukem route:list.
Add a resource end to end#
A Comment that belongs to the blog:
vukem make:model Comment -m -f -c
vukem make:request StoreComment
vukem make:policy Comment
vukem make:test Comments
vukem migrateFill the migration, the model fields and the controller, register the routes in routes/, then run go test ./.... For an API, use make:resource Comment for the JSON shape and vukem codegen:client for a client. See reference: make.
Seed and migrate#
vukem make:seeder Post
vukem migrate:fresh
vukem db:seedmigrate:fresh drops every table and migrates again, db:seed fills them. In production add -force on purpose and only after reading the guard.
Build for production#
vukem codegen:types -prefix /api -o resources/js/types.ts
vukem build -o bin/shop
export APP_ENV=production APP_DEBUG=false MAIL_MAILER=log
./bin/shop migrate
./bin/shopvukem build runs templ generate and vite build when the project has them, then go build -trimpath -ldflags="-s -w" with CGO_ENABLED=0. The binary contains every app command, so a server without the vukem CLI still runs ./bin/shop migrate. In production the app refuses to boot without MAIL_MAILER (smtp, resend, mailtrap or log). See Single binary.
Reference pages#
Create a project, run it, build it.
Every generator and gRPC code generation.
Add authentication, API, admin, flags, billing, Inertia.
Migrations, seeders and wipe.
Keys, maintenance, routes, queue, scheduler, OpenAPI and codegen.