Runtimes
What the static runtime runs, what it costs, when to use it.
VibeHost's default runtime is static, and it's currently the only one that is generally available. The CLI sets runtime: static when you run vibehost app create, and you rarely need to think about it again.
Two server runtimes are in private beta:
nextjs, for Next.js apps with API routes, middleware, ISR and the like, andnode, for plain Node.js servers such as Express. The CLI can deploy both (nodearrived in CLI v4.8.0), but the API accepts them only for workspaces in the beta. If you need one, email contact@vibehost.com and we'll add your workspace to the waitlist.
At a glance
| static | |
|---|---|
| Default | Yes |
| Deploy-to-routable | First deploy at once; a redeploy within about a minute |
| Cold start | none |
| Custom domain | Yes |
| Concurrency | unbounded |
| Filesystem at runtime | read-only |
| Pricing tier | Free / Business |
When to use it
flowchart TD
Start{"What does your app need?"} --> Server["Server-side code at runtime?<br/>(API routes, server actions,<br/>middleware, ISR, dynamic routing)"]
Server -- no --> Static["static runtime"]
Server -- yes --> Beta["Private beta.<br/>Email contact@vibehost.com"]
Static --> StaticBack["Frameworks: Vite, Astro,<br/>SvelteKit (static), Hugo,<br/>Next.js export, Eleventy"]
style Static fill:#d4f4d4
style Beta fill:#fff4d8
Start with static. It serves from the edge with no cold start and has no per-request constraints.
What it is
- You upload your build output (HTML, CSS, JS, fonts, images) to VibeHost as a tarball.
- VibeHost stores the files in edge object storage and serves them by path.
- Routes that don't map to a file return 404, or the SPA fallback if
--spais set. - The edge enforces the visibility, password, and share-link gates.
Best fit
- Marketing pages, blogs, docs sites.
- Single-page apps (React, Vue, Svelte) with
--spafor client-side routing. - Pre-rendered build output from any framework (Astro, Eleventy, Hugo, SvelteKit static adapter, Next.js export).
Things to know
- The tarball must include
index.htmlsomewhere. The CLI finds the doc root on its own. - Size caps: 500 MB compressed total, 100 MB per file, 50 000 entries. See static sites.
- A
_redirectsfile at the root works like Netlify's. See static sites.
Switching runtime
You can't switch an app's runtime in place. If you need to move an app to a different runtime, say after the server runtime leaves beta, create a new app and deploy again:
vibehost app create my-app-v2 --runtime static
vibehost link --app my-app-v2
vibehost deployThen point DNS and share links at the new app, and delete the old one after the cutover.
The migration walkthroughs cover static sites:
See also
- Static sites has framework recipes.
- Limits lists per-runtime quotas.
- Errors covers
UNSUPPORTED_RUNTIMEand related codes.
VibeHost vs Replit: where to host a Replit app after you build it
Replit builds and publishes in one place, billed from credits. Compare what moving a Replit-built static app to VibeHost changes about cost and access.
Error codes
Every error code the API and CLI can return, what it means, and how to handle it.