Neon on Kilter: How the Tiers Map, What It Costs, and What's Coming
For engineers weighing Neon's serverless Postgres against a sovereign, full-stack container model — with the pricing worked out.
Who this is for: engineers who like Neon's serverless Postgres and its branching model, and want to know — precisely — how it maps onto Kilter, what the equivalent workload costs, and where the two philosophies actually diverge.
Neon and Kilter answer different questions. Neon asks "how do I make one Postgres cheap, serverless, and branchable?" Kilter asks "how do I compose a whole application — database, auth, storage, search, workflows — and own the result?" The single-sentence contrast that the rest of this playbook unpacks:
Neon branches the data. Kilter branches the environment.
Neon's tiers, at a glance
The numbers below are read straight off Neon's plan comparison (as of writing — Neon iterates on pricing, so treat the dollar figures as the current shape, not a contract).
| Free | Launch | Scale | |
|---|---|---|---|
| Compute rate | included | $0.106 / CU-hr | $0.222 / CU-hr |
| Base plan fee | $0 | ~$19 / mo | ~$69 / mo |
| Storage | 0.5 GB / project | $0.35 / GB-mo | $0.35 / GB-mo |
| Instant restore | — | $0.20 / GB-mo | $0.20 / GB-mo |
| Autoscale | up to 2 CU | up to 16 CU | up to 56 CU |
| Scale to zero | after 5 min | after 5 min | configurable |
| Projects | up to 100 | up to 100 | up to 1000 |
| Branches / project | 10 | 10 | 25 |
| Network transfer | 5 GB | 500 GB | 500 GB |
| Support / SLA | — | — | Standard · 99.95% |
| SOC 2 · HIPAA · VPC · IP allow | ✗ | ✗ | ✓ |
Two things drive everything on this page. First, the unit of billing is the CU (compute unit) — one vCPU plus 4 GB of RAM — metered by the hour and scaled to zero when idle. Second, compliance and networking (SOC 2, HIPAA, VPC, IP allow-listing) only exist on Scale, which roughly doubles the compute rate.
Mapping a CU onto Kilter's rate card
Kilter doesn't have a "CU." It renders everything to plain Kubernetes with real resource requests, and meters the underlying resources at the published rate card: $0.012 / vCPU-hr, $0.005 / GB-hr of memory, $0.08 / GB-month of storage, $0.01 / GB egress.
So a Neon CU — 1 vCPU + 4 GB — has an exact Kilter equivalent:
1 CU = 1 vCPU + 4 GB RAM
= (1 × $0.012) + (4 × $0.005)
= $0.012 + $0.020
= $0.032 per CU-equivalent hourLine the three up:
| Resource | Neon Launch | Neon Scale | Kilter |
|---|---|---|---|
| Compute (per CU-hr) | $0.106 | $0.222 | ~$0.032 |
| Storage (per GB-mo) | $0.35 | $0.35 | $0.08 |
| Instant restore (per GB-mo) | $0.20 | $0.20 | included at infra level* |
| Egress (per GB) | metered | metered | $0.01 |
Containers vs branches — the core mental model
This is where the two models genuinely part ways, and it's worth being precise rather than glib.
A Neon branch is a copy-on-write clone of your database — data plus schema — created in seconds, billed only for the divergence, scaled to zero when nobody's querying it. It is the best thing about Neon. A PR gets its own branch off production data; a migration gets tested against a real copy; you throw it away when you merge.
A Kilter environment is a copy of your whole stack. kilter deploy --env pr-247 stands up an isolated namespace — its own app pods, its own Postgres,
its own Ory, its own storage — with its own hostname and a default-deny network
policy. Broader than a branch (the entire application, not just the DB), and
heavier (real pods, not copy-on-write pages).
| Neon branch | Kilter environment | |
|---|---|---|
| Scope | Database only | Whole stack (app + DB + services) |
| Creation | Instant, copy-on-write | Real pods, provisioned per env |
| Data | Cloned from parent | Fresh scoped DB today (cloning is on the roadmap) |
| Isolation | Logical, within Neon | Kubernetes namespace + network policy |
| Cost when idle | Scales to zero | App scales to zero (KEDA); DB stays warm today |
| Best for | Migration tests, per-PR data | Per-PR full-stack preview environments |
If your mental model is "I want a throwaway copy of prod data," Neon's branch is purpose-built and Kilter's environment is heavier than you need — for now. If your model is "I want a throwaway copy of the whole application," Kilter's environment does in one command what you'd otherwise assemble from Neon + Supabase + Vercel previews.
Pricing a small/medium app — the Likeable model
Here's the exercise the pricing page implies but doesn't spell out: take a real small/medium app, set sensible included limits, and price the overage against Neon.
The workload. One always-on Postgres autoscaling around 0.75 CU with scale-to-zero overnight (~550 CU-hours/month), 15 GB of storage, 60 GB egress. A normal SaaS side of things — not a toy, not a unicorn.
Illustrative Likeable ($20/mo) allocation. To make the comparison concrete, say the Likeable tier includes 750 CU-hours of compute, 25 GB storage, and 100 GB egress per month across your apps, with anything above billed at the rate card. (Illustrative limits — the binding allocation lives in your portal.)
| Line item | Neon Launch | Kilter Likeable |
|---|---|---|
| Base / plan fee | ~$19 | $20 flat |
| Compute (550 CU-hr) | 550 × $0.106 = $58.30 | included (< 750) |
| Storage (15 GB) | 15 × $0.35 = $5.25 | included (< 25) |
| Egress (60 GB) | metered | included (< 100) |
| Monthly total | ~$83† | $20 |
| What you also get | Postgres (+ new Auth/Data API) | Postgres + Ory auth + object storage + search + Temporal workflows |
Now scale the app past the allocation. Add 400 CU-hours and 20 GB storage:
- Neon Launch adds 400 × $0.106 + 20 × $0.35 = +$49.40/mo.
- Kilter adds 400 × $0.032 + 20 × $0.08 = +$14.40/mo — same rate card, no tier jump, no category games.
And if you need SOC 2 or HIPAA, Neon moves you to Scale (~$69 base, $0.222/CU-hr) — the compute line alone on our workload becomes 550 × $0.222 = $122/mo. On Kilter those controls are a platform property of your own cluster, not a pricing tier that doubles your compute rate.
The hobbyist with 15 projects: Neon vs Supabase
This is the scenario that explains Neon's whole design — and it's worth being honest about where Neon simply wins.
A hobbyist has 15 side projects. Most are idle most of the time.
- On Neon: the Free plan allows up to 100 projects, each scaling to zero after 5 minutes idle, sharing 100 compute-hours/month. Fifteen mostly-idle projects wake on demand, sleep otherwise, and cost $0. This is why hobbyists love Neon: idle projects are free because they aren't running.
- On Supabase: the Free plan caps you at 2 active projects — the rest pause after a week and there's no true scale-to-zero on paid. To keep 15 projects live you're on Pro (~$25/mo) plus a dedicated compute instance for each additional project (~$10/mo on the smallest), landing around ~$165/mo for the same 15 projects that cost nothing on Neon.
So the hobbyist ends up on Neon for one reason: scale-to-zero + a high project cap turns fifteen idle databases into a near-zero bill, while Supabase charges per always-on project.
Where does Kilter fit? Honestly: if all you want is 15 disposable idle Postgres instances, Neon Free at $0 is unbeatable and you should use it. Kilter plays a different game — every one of those 15 "projects" is a full-stack app you own (DB + auth + storage + jobs), that also scales to zero when idle via KEDA:
- Community (free): 10 scale-to-zero apps — for building in the open.
- k8gentic Engineering ($100/mo): 15 scale-to-zero apps + production-lite + a full production app.
Fifteen real projects — each needing a database, login, file uploads, and a background job — cost $100/mo on Kilter as sovereign full-stack apps, versus stitching Neon + Supabase + a host per project and still not owning the result. For throwaway DBs, Neon. For fifteen things you actually intend to ship, Kilter.
The full-stack comparison
Neon is Postgres-first (now growing Auth and a Data API). Supabase is the batteries-included BaaS. Kilter is the composable, self-owned stack.
| Capability | Neon | Supabase | Kilter |
|---|---|---|---|
| Postgres | ✓ serverless | ✓ | ✓ (CloudNativePG in prod) |
| Auth / identity | ✓ (new) | ✓✓ mature | ✓✓ Ory · Keycloak · Zitadel |
| Object storage | ✗ | ✓ | ✓ garage · rustfs (S3-compatible) |
| Full-text / instant search | via pg | ✓ | ✓ typesense · meili · elastic |
| Vector search | ✓ pgvector | ✓ pgvector | ✓ qdrant · pgvector |
| Realtime / messaging | ✗ | ✓✓ | ✓ NATS · Kafka · Redpanda |
| Durable workflows / jobs | ✗ | edge fns · pg_cron | ✓✓ Temporal |
| Observability | basic | ✓ | ✓✓ Prometheus · Grafana · Loki · Signoz |
| Data / DB branching | ✓✓ signature | ✓ newer | ~ env branching (data cloning coming) |
| Scale to zero | ✓✓ | ✗ (paid always-on) | ✓ apps (KEDA); DB coming |
| Local dev parity | ✗ | ✓ CLI | ✓✓ kilter up runs the real images |
| Runs on your own k8s / on-prem | ✗ | hard | ✓✓ that's the point |
| Eject / no lock-in | pg_dump | self-host OSS | ✓✓ kilter eject → plain manifests |
The pattern: Neon is deepest on the one thing it does; Supabase is broad and managed-on-their-terms; Kilter trades a little managed convenience for owning the whole stack, running it locally with real parity, and deploying it to infrastructure you control.
What Kilter can't do yet — but is building
Being straight about this is the whole trust model. Neon has real, shipped features that Kilter does not have today:
| Neon does this | Kilter today | Coming |
|---|---|---|
| Copy-on-write data branching | Env branching with a fresh scoped DB | Per-env data cloning (kilter db --env) |
| Serverless Postgres / scale-to-zero DB | App scale-to-zero (KEDA); DB stays warm | DB scale-to-zero (multicluster work in progress) |
| Instant restore / time travel (history window) | WAL backups at the infra level | Exposed as a product surface |
| Read replicas | Single primary | CloudNativePG replicas |
| SOC 2 / ISO 27001 | Per-app isolation, not certified | On the roadmap (~12 months) |
| HIPAA | — | After SOC 2 / ISO |
| VPC / PrivateLink | Per-app NetworkPolicy | Private networking on the roadmap |
| Usage metering / billing | Rate card published | Metering → Stripe (in build) |
The recipe: coming from Neon
If the trade lands for you, replacing a Neon-backed app is short:
- Scaffold.
kilter init my-app. - Add the database — and the rest of what your app actually needs:
kilter add postgres(withpgvectorif you're doing embeddings), thenory,garage,typesense,temporalas required. - Bring your schema. Point your existing migrations at the provisioned
Postgres;
kilter db migrateruns them. - Local parity.
kilter upruns the whole stack on the same images prod runs — a green light locally is a real signal. - Branch the environment.
kilter deploy --env pr-123for a full-stack preview — the Kilter analog to a Neon branch, one namespace per PR. - Ship.
kilter deploy --bootstrapprovisions, migrates, and blocks until healthy. You land in production, Org Only. - Go live. Hit Promote to open external access.