manic build
Production pipeline — lint, Bun bundles, OXC minify, provider hooks.
manic build
manic build produces the build.outdir bundle (default .manic/): browser client, optional API bundles, server.js, minification, then provider.build adapters.
Implementation: packages/manic/src/cli/commands/build.ts.
Pipeline map
Stages Group roughly into quality, bundles, polish, and providers:
Stage checklist
| Stage | Artifact / effect |
|---|---|
| oxlint | Aborts build on failures |
| Clean | Fresh outdir/client tree |
| Bun plugins | plugins[].preload registered before Bun.build |
| Manifest | app/~routes.generated.ts |
| Client | Hashed chunks under outdir/client |
| HTML | outdir/client/index.html (+ plugin injectHtml) |
Plugin build | emitClientFile, HTML mutations |
| API | outdir/api/*.js or skipped in frontend mode |
| Server | outdir/server.js |
| Minify | client/, api/, server.js |
| Providers | Vercel / Cloudflare / Netlify adapters |
Pipeline (ordered)
-
Oxlint gate — Runs
oxlint .(prefersnode_modules/.bin/oxlint). Build aborts on failure. -
Clean & scaffold —
rm -rf <outdir>,mkdir -p <outdir>/client. -
Register Bun plugins — Imports each
plugins[].preloadand registersdefault/pluginviaBun.plugin()before bundling. -
Route manifest — Writes
app/~routes.generated.tsviawriteRoutesManifest. -
Client bundle — Resolves
./app/main(app/main.tsx/.jsxrequired).Bun.buildwithtarget: 'browser',oxcPlugin(),bun-plugin-tailwind, hashedentry/chunk/assetnames under<outdir>/client. -
HTML — Reads
app/index.htmlwhen present; injects built JS (and Tailwind CSS link); otherwise emits a minimal shell with#root. Writes<outdir>/client/index.html. -
Optional
assets/copy — If a rootassets/folder exists, copies it to<outdir>/client/assets. -
plugins[].build— Runs Manicbuildhooks withemitClientFile,injectHtml, discoveredpageRoutes,dist, etc.;apiRoutespassed here is[]during this stage. -
API bundles — Skipped when
mode === 'frontend'. Otherwise globsapp/api/**/index.ts,Bun.buildeach entry (target: 'bun',dependenciesexternalized frompackage.json), outputs<outdir>/api/<route-path>.js. Writes/.well-known/api-catalogunderclientwhen any API route exists. -
Server bundle — Rewrites
~manic.tsHTML import toBun.file("<outdir>/client/index.html").text(), emitsserver.js(target: 'bun',oxcPlugin()). -
Minify — Parallel oxc-minify (es2022, mangle) over
client/,api/(if present), andserver.js. -
Providers — Invokes
provider.build({ dist, config, apiEntries, clientDir, serverFile })for each configuredManicProvider.
Console ends with artifact sizes and Start: bun start hint.
Output layout
Default <outdir> is .manic — configurable via build.outdir in manic.config.ts (Configuration).
CLI notes
manic builddoes not expose--out-diras a CLI flag; changebuild.outdirin config.- Parsed
--port/--networkfrom the root CLI are not read insidebuild()today.