Deployment
Build once and deploy either the provider-neutral static output or generated Node server.
Know what the build produces
tavo build emits two provider-neutral deployment outputs. Treat .tavo/build as generated output and rebuild it after every application change.
text.tavo/build/client/ static assets and prerendered HTML
.tavo/build/server/start.mjs generated Node production serverChoose static hosting or Node
Static hosting can serve CSR and prerendered output but cannot run server loaders, route actions, or sessions. Run the generated Node server when the application needs request-time behavior.
bashnpx tavo build
PORT=4174 node .tavo/build/server/start.mjsVerify the deployed boundary
Business logic stays in route modules and server-only application services. Core 1.0 publishes static and Node deployment outputs.
Rebuild after every source change.
Publish .
tavo/build/client to a static host or run.tavo/build/server/start.mjswith Node.Configure trusted hosts, canonical origin, CSP, secrets, and monitor authentication.
Exercise a real SSR request, a client navigation, an action, and an error response.
Inspect generated route sizes and enforce budgets in CI.
Build artifact contract
text.tavo/build/client/
static assets and prerendered HTML
.tavo/build/server/start.mjs
generated Node production servertavo build creates both provider-neutral outputs, discovers routes, generates route types, and attempts eligible prerenders. Invalid bundles or JavaScript budget violations fail the command.
Static and Node production output
| API / option | Type | Default | Behavior |
|---|---|---|---|
.tavo/build/client | directory | always generated | Static assets and prerendered HTML suitable for any static host. |
.tavo/build/server/start.mjs | Node entry | always generated | Generated production server for SSR, loaders, actions, sessions, plugins, and monitoring. |
Production handler failure behavior
GET and HEAD render pages. Other methods dispatch a matching route action.
A non-page method without a matching action returns 405 with Allow: GET, HEAD.
The Node handler rejects bodies larger than
maxRequestBodyByteswith 413; the default is 10MiB.Uncaught route, plugin, and handler failures return a hardened generic 500 response rather than exposing an exception.
canonicalOriginmust be a credential-free HTTP(S) origin with no path, query, or hash; invalid input throwsTAVO_SSR_001.Page and action responses receive baseline security headers. Add deployment-specific CSP and proxy policy at the platform boundary.
Node client disconnects abort request-owned work; streaming responses also cancel their active reader.
Monitor CLI defaults
| API / option | Type | Default | Behavior |
|---|---|---|---|
--url | URL | http://127.0.0.1:4174 | The CLI appends /_tavo/monitor unless it is already present. |
--token | string | TAVO_MONITOR_TOKEN | Sent as a Bearer token. Never place monitor credentials in a query string. |
--once | boolean | false | Without this flag, monitor refreshes continuously. |
--interval | milliseconds | 1000 | Watch interval, clamped to a minimum of 250 ms. |
--json | boolean | false | Prints the complete payload instead of the human table. |
Look up exact public types
Follow linked API names to their canonical TypeScript declarations and package boundaries.