Create a New App
heximon create scaffolds a complete, working app — a module, a controller, a provider, the
heximon.config.ts capability manifest, and the Vite + TypeScript setup — so your first pnpm dev is
minutes away. A brand-new machine needs nothing pre-installed: every package manager's create
convention maps onto the same command.
pnpm create heximon my-app
npm create heximon@latest my-app
yarn create heximon my-app
bun create heximon my-app
heximon create my-app # with the CLI installed globally
Run it bare and it prompts for everything; run it with flags (--yes accepts every default) and it's
CI-scriptable:
pnpm create heximon my-shop -- --template database --validator zod --yes
npm create heximon@latest my-shop -- --template database --validator zod --yes
yarn create heximon my-shop --template database --validator zod --yes
bun create heximon my-shop --template database --validator zod --yes
What you choose
| Prompt | Options | Default | Flag |
|---|---|---|---|
| Project name | a directory-safe name | my-heximon-app | the positional argument |
| Template | minimal / database | minimal | --template |
| Validator | zod / valibot / none | zod | --validator |
| Install dependencies | yes / no | yes (interactive) | --install / --no-install |
| Git init | yes / no | yes | --git / --no-git |
minimal— the smallest real app: one module, one controller with routes declared by handler parameter types, one constructor-injected provider.database— a tasks CRUD API over Drizzle ORM on libsql/SQLite (:memory:by default, so there is no database server to install), including an in-process end-to-end test viacreateTestApp.- The validator choice adds a schema file and a validated
POSTroute — one schema declaration is both the body's static type and its runtime validator.nonekeeps hand-checked bodies.
--pm npm|pnpm|yarn|bun overrides the detected package manager (the one that invoked create wins by
default); --cwd picks the parent directory.
Where templates come from
Templates live in heximon/starters — one directory per
template — and are fetched with giget at create time, so template
fixes reach you without waiting for a framework release. The CLI tries the branch matching its own
minor version first (v0.1 for a 0.1.x CLI) and falls back to main.
After fetching, it stamps your project name and pins every @heximon/* dependency to the CLI's own
version (the CLI releases in lockstep with the framework, so the two always agree).
Scaffolding into an existing git repository skips git init automatically — nesting a repository is
never what you want.
After it runs
cd my-app
pnpm install # if you skipped the install step
pnpm dev # http://localhost:3000
cd my-app
npm install # if you skipped the install step
npm run dev # http://localhost:3000
cd my-app
yarn install # if you skipped the install step
yarn run dev # http://localhost:3000
cd my-app
bun install # if you skipped the install step
bun run dev # http://localhost:3000
Then read the generated heximon.config.ts: it is the app's capability manifest — the entire HTTP
layer is the one HttpPlugin entry, and every capability you add later (events, CQRS, queues, …) is
one more plugin in the same list.
See also
- Quick start — the same first app, built by hand step by step.
- Installation — what each installed package does.
- The heximon CLI — the full command surface.
The heximon CLI
heximon create, deploy, provision, and migrations — the commands the unscoped heximon package ships, scaffolding new apps, resolving credentials, running vp build, and shelling the vendor CLI for you.
Migrations from the CLI
heximon migrations generate/migrate/status/push — DatabaseConfigDetector auto-detects your DrizzleXConfig files, DotenvCascade loads .env, and DrizzleKitRunner drives .bin-resolved drizzle-kit with no hand-written drizzle.config.ts.