Decision guide
Percher or Fly.io?
Fly.io is a global infrastructure platform: Firecracker microVMs you can place in 30-plus regions, anycast routing, per-region volumes, and a Machines API that treats every box like a primitive. It rewards power users who want low-level control and global distribution. Both Fly and Percher ship MCP servers today (flyctl bundles an `mcp` subcommand); the design distance is bigger than that one feature, though. Percher is the opposite end of the design space from Fly — one region in Germany, one container per app, no machine APIs to wire up, and MCP as the primary deploy surface (42 tools and a typed `recovery.nextAction` contract). Pick Fly if you need geo-distribution or raw infrastructure primitives; pick Percher if you want zero-config hosting your assistant can drive end-to-end through recovery loops instead of just one-shot deploys.
Who Percher is for
Percher is built for personal apps — projects you build for yourself or your close circle. It is notpositioned as production-grade or enterprise hosting today: there is no uptime SLA, no formal compliance attestation, and a single region in Germany. If you're shipping a monetised SaaS, an app for paying customers, or anything that needs an SLA, Fly.io or a higher-tier provider is the safer choice. Percher may grow into that space; it is not there now.
At a glance
| Feature | Percher | Fly.io |
|---|
| Free tier | Free plan (2 apps, sleep after 10 min idle) | No free tier (pay-as-you-go from first machine) |
| Paid entry price | €3/mo (Starter) — flat, per account | Pay-as-you-go: per-machine, per-hour, per-GB |
| Pricing model | Flat monthly subscription per account | Metered: CPU-seconds, RAM-hours, bandwidth, volumes |
| Region | Single region (Falkenstein, DE) | 30+ regions worldwide |
| Compute model | One long-running container per app | Firecracker microVMs via the Machines API |
| Built-in database | Opt-in managed PocketBase per app via `[data] mode = "pocketbase"` (SQLite, auth, file storage) | Fly Postgres (separate, regional) |
| Built-in auth | Yes (when PocketBase is enabled) — auth out of the box with PocketBase | No — bring your own |
| MCP server | MCP-first: 42 tools covering publish, logs, env, rollback, doctor, backups, domains and GitHub connect, plus a typed `recovery.nextAction` for chaining failures into fixes | flyctl bundles `flyctl mcp` for Fly resource management (apps, machines, deploys) |
| Framework support | Node, Bun, Python, static, any Dockerfile | Any Dockerfile / OCI image |
| Multi-region deploy | Not supported (single region by design) | First-class — `fly scale count N --region <r>` per region |
| Custom domains | Yes (paid plans) | Yes |
| Automatic SSL | Yes — Let's Encrypt via Caddy | Yes — Let's Encrypt |
| Networking primitives | Standard HTTPS in + outbound proxy out | WireGuard private networking, anycast, fly-replay, IPv6 |
| Rollback | Instant per-deploy rollback | Instant per-deploy rollback (image-based) |
When Percher is the better choice
- You want the assistant doing more than `publish` — full operational tools (logs, env, rollback, doctor, backups, domain add) and a typed `recovery.nextAction` that turns a failed deploy into the next fix automatically.
- Your project is small and single-region, and Fly's pay-as-you-go pricing makes the monthly bill harder to predict than a flat-rate plan.
- You want an opt-in managed PocketBase per app (`[data] mode = "pocketbase"`) for SQLite + auth + file storage instead of standing up Fly Postgres as a separate billed service.
- Your project must stay in the EU for data-residency reasons. Percher is single-region in Germany.
- You want a zero-config deploy that 'just works' for a Node, Bun, Python, or static app without writing a `fly.toml`.
When Percher is the wrong choice (and Fly.io fits better)
- You need real multi-region distribution — the same app running in São Paulo, Tokyo, and Frankfurt with local latency for each. That's Fly's whole pitch and Percher cannot match it.
- You want low-level infrastructure primitives: WireGuard private networking, IPv6 anycast, per-region volumes, the Machines API for dynamic provisioning. Percher abstracts those away.
- Your workload is bursty and benefits from scale-to-zero with fast Firecracker cold starts. Percher containers are long-running by design.
- You need fine-grained control over instance types, regions, and per-region replica counts. Fly exposes those; Percher hides them.
- You're already invested in the Fly ecosystem — Fly Postgres, Tigris object storage, Upstash add-ons — and don't want to migrate them.
Migrating from Fly.io
Fly apps are Docker-first, so the migration is mechanical in the common case: take your existing `Dockerfile`, run `bunx percher init` in the project root (it'll detect the Dockerfile and write `runtime = "docker"` in `percher.toml`), and `bunx percher publish` builds and deploys the same image Fly was building. Env vars don't move automatically — copy them from `fly secrets list` and re-set with `bunx percher env set`. Domains move with a one-time DNS update once the app is live.
What doesn't translate: anything that depends on Fly being globally distributed. If your app uses `fly-replay`, region-aware routing, or per-region volumes, you'll need to decide whether single-region in Germany is acceptable (often: yes, for European audiences) or whether you need to keep Fly. WireGuard-based private networking between Fly services becomes plain HTTPS-over-Percher-proxy on Percher. Fly Postgres has no direct equivalent — point `DATABASE_URL` at any external Postgres (Neon, Supabase, your own) and Percher's outbound proxy handles the connection.
# In your project root (with your existing Dockerfile):
fly secrets list # copy each secret
bunx percher init # generates percher.toml (runtime=docker)
bunx percher env set DATABASE_URL=... # for each Fly secret
bunx percher publish # build + deploy
bunx percher domains add yourdomain.com
FAQ
Can Percher run a multi-region app like Fly does?
No. Percher is single-region by design — every app runs on one VPS in Falkenstein, Germany. That's the trade-off for simplicity and flat-rate pricing. If you need the same app running in São Paulo, Tokyo, and Frankfurt with local latency for each, Fly is built for that and Percher isn't.
Is Percher cheaper than Fly?
For a small, single-region app, almost always — Fly's pay-as-you-go bill (per-CPU-second, per-RAM-hour, per-GB bandwidth) tends to surprise people on the upside, while Percher's flat plans (€0 / €3 / €12 / €29 per month) are predictable. For an app that genuinely needs Fly's multi-region distribution or Machines API features, the comparison breaks down — Percher cannot run that workload at all.
What about Fly Postgres?
Fly Postgres is a separate, regional managed Postgres on Fly's infrastructure. Percher has no equivalent — there is no managed Postgres on Percher today. The Percher pattern for new apps is the opt-in PocketBase sidecar (`[data] mode = "pocketbase"`) for SQLite + auth + S3-compatible file storage, and `DATABASE_URL` pointed at any external Postgres provider (Neon, Supabase, your own) when you need real Postgres. Percher's outbound HTTPS proxy handles the connection transparently.
Can I run my Fly Dockerfile on Percher?
Yes. If your `fly.toml` points at a Dockerfile, that's the path: `bunx percher init` detects it, writes `runtime = "docker"` in `percher.toml`, and `bunx percher publish` builds and runs the same image. Anything Fly-specific in the Dockerfile (rare) needs adjustment — most don't have anything Fly-specific.
How does Percher's deploy model differ from Fly's Machines API?
Fly's Machines API treats every VM as a primitive you can start, stop, and place yourself — useful for workflows like 'spin up a sandbox per request' or 'place a worker near the user's region'. Percher's model is simpler and more constrained: one app, one (or a few) long-running containers, no machine API. If your app is built around dynamic VM lifecycle, Percher is the wrong tool. If it's a normal web app, the Machines API is more power than you need.
Try Percher in under a minute
Free plan, no credit card. Bring any Node, Bun, Python, or Docker app.
Bringing an existing app? See recommended setup or the migration walkthrough above.