Connect your own VPS and deploy on it for free

Hosting for Bunderstack

Your database, buckets, queues and environment come straight from your declaration

Free on your own VPS · no markup on the managed path

src/bunderstack.ts
export const backend = bunderstack({  schema,  database: { adapter: libsql() },  storage: {    buckets: {      avatars: { visibility: 'public' },      invoices: { visibility: 'private' },    },  },  jobs: (jobs) => ({    sendReceipt: jobs.job({ handler }),    digest: jobs.cron({ schedule: '0 9 * * *', handler }),  }),  env: appEnv,})export const app = await backend.start()
acme/storefront #42

Bunderhost deployed a preview for this pull request

storefront-pr-42.preview.bunderhost.app

  • database branched, copy-on-write
  • bucket forked, zero-copy
  • reachable only with a signed grant
storefront · productionlive
db.provisionstorefront-prod ready1.2s
bucket.provisionbh-storefront-ab120.9s
runtime.ensureAppruntime ready0.4s
github.clonestorefront@a1b2c3d2.1s
buildimage pushed48s
deploymachine healthy6.3s
storefront · production
  • Deploy logs
  • Runtime logs
  • SQL explorer
  • Files
  • Users
  • Emails
  • Queues & cron
  • Domains

Or let your agent do it

Paste this into Claude Code, Cursor, or any MCP client. It connects itself, asks you to approve the access in a browser, and takes the repository to a live URL.

Give this to your agent

Set up Bunderhost for this repository and deploy it.

Add an MCP server named "bunderhost" at https://your-bunderhost-domain/mcp. It will ask you to
authorize — open the link it gives you; I will sign in there and choose an
organization. Then read bunderhost://guide/project-onboarding and follow it.

Creating the project and deploying to production both need my explicit yes.
Never ask me for an environment value in this chat — open a setup session
and give me the URL. Report success only after get_environment_health says
`ok`.

No token to copy: the agent asks for access, and you approve it in the browser.

From repo to running in four steps

bunderhost.app/projects/storefront

New project

  1. 01Connect the repositoryPick the repo and the branch that deploys
  2. 02Commit the blueprintDeclarations are read off the committed revision
  3. 03Fill the environmentBunderhost supplies what it provisioned; you add the rest
  4. 04DeployOne click, and the stack goes up

Code in, infrastructure out

Provisioned from the declaration your app already ships with — per environment, on every deploy

src/bunderstack.ts

Provisioned for you

Created per environment, on every deploy

  • DatabaseTurso
  • Object storageTigris S3
  • Queues & cronBunderstack
  • Environmentvalidated

Runs on

Pick one — the dashboard is the same either way

  • Managed machineFly
  • Your own serverVPS

Bring your own

Optional, and billed by the provider directly

  • EmailResend
  • DomainCloudflare DNS

Next level PR experience, built for agentic era

Get a functional clone of your on every PR. The data and the files branch with the code

  1. 01A pull request opensThe webhook lands and a durable job takes ownership of the branch
  2. 02The blueprint is verified, then builtValidated on the branch before anything is provisioned, then built
  3. 03The database branches, copy-on-writeTurso seeds from production — real rows, no dump, no shared writes
  4. 04The bucket forks, zero-copyThe branch sees every object and writes only its own
  5. 05A private preview URLIts own hostname, reachable only with a short-lived signed grant
acme/storefrontPR #42
App

storefront

branch image
App

storefront-pr-42

Database

storefront-prod

copy-on-write
Database

storefront-pr-42

Bucket

bh-storefront-prod

zero-copy fork
Bucket

bh-storefront-pr-42

Reachable at

storefront-pr-42.preview.bunderhost.app

signed grant · expires

Free on your server, managed on ours

Our infrastructurePaid

Press deploy. Your app is up

  • Machines, database and buckets included
  • Previews on every pull request
  • Hostnames and TLS handled
Your own VPSFree

Bring a server. The bill stays yours

  • One SSH bootstrap installs the runtime
  • Caddy and TLS configured for you
  • Same dashboard, same logs

Bring-your-own Fly and Turso accounts are next

Everything after the deploy

Every surface is scoped to the environment you are looking at

View emails

Every message with its delivery state, and the rendered mail itself

Sent mail · production

Verify your email

delivered

Your order shipped

opened

Password reset

bounced

Rendered message

Database console

Browse schema, read tables, run queries

db.bunderhost.app · storefront-prod
Tables
  • users
  • sessions
  • orders
  • line_items
  • payments
select status, count(*) from orders group by 1
statuscount
paid1 284
pending37
refunded12

See S3 files

Browse the buckets your blueprint declared, preview images inline, download or delete

avatars · invoices
avatars/ada.png48 KB
avatars/grace.png52 KB
invoices/2026-08.pdf1.2 MB
invoices/2026-07.pdf1.1 MB

Runtime logs

The step trail of every deploy, output from the running process, and your queues and schedules

storefront · production
Deploy trail
db.provision1.2s
bucket.provision0.9s
build48s
deploy6.3s
Background

sendReceipt · queue

12 done · 0 failed

digest · cron

next 09:00

Runtime

listening on :3000

Connect your agent with MCP

It reads logs, ships deploys and inspects migrations, under a token you scope yourself

POST /mcp · acme

why did the last deploy fail?

list_deployments project=storefront

get_deployment_logs deployment=latest

bucket.provision failed — NotImplemented from the storage API

deploy_project project=storefront

Token scopesreaddeployproject:write

Connect a repo, ship it

Free in preview, and free on your own server after that