Skip to main content
Percher is still being built, but you can try it out with a free account right now!
← All deploy guides
Deploy guide · runtime = "node"

Ship Node.js in ~2 minutes.

Vanilla Node.js HTTP server with no framework. The runtime is Node 24 on a slim Alpine image. Use this when you want full control over the request pipeline or are running a small custom server without Express/Fastify overhead.

Why Percher fits

  • Percher's node-build pipeline ships a multi-stage Dockerfile that produces a ~225 MB image and runs `node` directly — no extra layer between your code and the runtime.
  • Deps are cached aggressively: redeploys with unchanged `package.json` skip the install step and finish in ~10 s.

Quick start

bunx percher create my-app --template node
cd my-app
bunx percher publish

The first command scaffolds a working Node.js project plus a percher.toml. Publish builds and deploys it, then prints the live URL.

percher.toml

The canonical config for a Node.js app on Percher. bunx percher init generates this automatically when it detects Node.js in your project.

[app]
name = "my-server"
runtime = "node"

[web]
port = 3000
health = "/health"

Common gotchas

  • Your server must listen on `process.env.PORT` (or `3000` if missing) — Percher passes the port at runtime and the value can change between deploys.
  • Add a `GET /health` route that returns 200; without it the deploy health check fails and the new version is never swapped in.

Related docs

Ready to deploy Node.js?

Start on the Free plan. No credit card, live in ~2 minutes.

Sign up free →