Shipping a frontend
The deploy flow, framework detection, and build output.
Shipping a frontend is one click, or one chat message. Modus detects how your project builds, runs the build in an isolated container, collects the output, and pushes it to your provider, then returns a live URL.
The flow
- You click Deploy (or ask Modus to). A deployment record is created with status building and an id returns immediately.
- In the background: Modus validates the provider token (fail-fast), builds in an isolated directory, collects the output files, and pushes them to the provider.
- Status moves building → deploying → ready (with the live URL), or error (with the message).
Deploys are asynchronous: the UI returns right away and the work happens in the background, so you're never blocked watching a spinner.
Framework detection
Modus detects your framework and picks the right build:
| Framework | Build | Output |
|---|---|---|
react-vite | vite build --base=./ | dist |
vue-vite | vite build --base=./ | dist |
svelte-vite | vite build --base=./ | dist |
nextjs | next build (export) | out |
static-html | (no build) | workspace root |
After the build, Modus looks for the output in dist/, then build/, then out/, and ships the first one it finds.
Limits
Builds run with a 120-second timeout and ship up to 1000 files, excluding node_modules, .git, and build artifacts. Files are built locally and uploaded; there's no provider-side build step.