apps

git push.
The rest is our problem.

Connect a GitHub repo and every push builds on a fresh Firecracker microVM, health-checks, then atomically flips traffic to the new version — the old one is torn down behind it. Framework auto-detected, runtime pinned by your repo, and nothing billed while the app sleeps.

0s
downtime per deploy
$0
while idle
any
framework via mise
git push — zero-downtime deploy
deploy

Every deploy is a brand-new machine.

A deploy never mutates the running app. It provisions a fresh sandbox, shallow-clones the exact commit, builds, starts, and HTTP health-checks the port — only then does traffic flip, atomically, blue-green. A push to the tracked branch does all of this pinned to the pushed commit.

Why blue-green on microVMs

Because the build runs beside the live version, a broken build never touches production — a deploy that fails its health check simply never receives traffic. When the flip does happen, the previous deployment is kept for one-click rollback and its sandbox torn down.

clone + buildhealth-checkflip traffic
terminal — npm i -g @pandastack/sdk
pandastack app create \
  --name my-site \
  --git-url https://github.com/me/my-site
pandastack app deploy <app-id>

# queued -> building -> deploying -> live
# with GitHub connected + auto_deploy: true,
# every push to main deploys the pushed commit
frameworks

Bring the framework you already have.

No pin needed: Next.js, Vite, CRA, Node, Python, and static sites are detected from the repo, with install, build, and start commands filled in. Runtimes come from mise — your .nvmrc, .python-version, .tool-versions, or mise.toml picks the exact versions — and explicit overrides win whenever you set them.

Detection, in precedence order

An explicit framework pin on the app wins first, then a committed pandastack.json, then auto-detection from the files present. The runtime base is Ubuntu 24.04 with Node 22 LTS, Python 3.12, Go, and Bun pre-warmed — anything else is a version file away.

explicit pinrepo manifestauto-detect
pandastack.json — committed at the repo root
{
  "type": "vite",
  "outputDir": "dist",
  "installCommand": "pnpm install",
  "buildCommand": "pnpm build",
  "startCommand": "node server.js"
}
scale to zero

Idle costs exactly nothing.

After the idle window — 15 minutes by default, tunable down to 60 seconds — a sleeping app releases CPU, RAM, and disk entirely. The next real request boots a fresh sandbox from the deploy-time artifact and is answered; you pay nothing for the hours in between.

Sleep on idle

The sandbox is released completely; what survives is the immutable artifact baked at the end of the last successful deploy.

Wake on request

The next request boots from that artifact — typically sub-second — and concurrent requests during a wake coalesce into one boot.

Bots can't pin it awake

Uptime monitors, crawlers, and health-path probes are classified before they touch the app — a monitor gets a cheap 200 while it sleeps.

Or stay always-on

Set auto_hibernate: false for a payment webhook or an API polled on a tight SLA — the first request answers as fast as the thousandth.

day 2

The boring parts are already handled.

A background monitor health-checks every running app on a 30-second loop and restarts a wedged process in place — and the everyday operations are one call each.

A URL that never moves

Each app gets a stable https URL that survives every blue-green flip and every sleep/wake cycle — it always forwards to the current sandbox.

Runtime logs

Your app's stdout/stderr, streamed live with ?follow=1 — separate from build logs, which stream per deployment as it runs.

One-click rollback

Rollback rebuilds the previous deployment byte-identical on a fresh sandbox, pinned to its commit, with the same blue-green flip.

Env vars, both phases

Variables you set are exported at build and at runtime; PORT and HOST are injected automatically for your start command.

previews

Every pull request gets its own environment.

Opt a repo in and each PR is built from its exact head commit, served at its own stable URL, and the link is posted as a sticky comment on the PR. Push more commits and it rebuilds in place; close or merge and it's torn down — a 24-hour reaper catches anything a missed webhook leaves behind.

Open → live URL

The preview environment deploys from the PR's head commit and comments its URL on the pull request: building, ready, or failed.

Push → rebuild

New commits rebuild the same environment behind the same URL; the PR comment is edited in place, never spammed.

Idle → free

Previews scale to zero like any app, so a per-PR environment costs compute only while someone is actually looking at it.

Ship on the millisecond cloud.

Free tier with $5.40/mo usage credit. No card. Apache-2.0.