StitchDB vs Neon: Always-On Backend or Serverless Postgres
Neon vs StitchDB is a choice between two models. Neon is serverless Postgres: compute scales to zero when idle and you pay per CU-hour, with very fast branching. StitchDB is an always-on Postgres per project on flat monthly plans, bundled with Auth, REST and GraphQL APIs, Realtime, Storage and Edge Functions. Neon tends to be cheaper for spiky or mostly idle databases and better for many short-lived branches; StitchDB is more predictable for steady traffic and includes the backend around the database.
We build StitchDB. Neon facts are from neon.com/pricing and Neon's plans docs, as of November 2026.
#Two pricing models
Neon charges for what runs:
- Free: 100 CU-hours per project per month, 1 GB of storage per project.
- Launch: $0.106 per CU-hour, $0.35 per GB-month of storage, restore history at $0.20 per GB-month (up to 7 days).
- Scale: $0.222 per CU-hour, restore history up to 30 days.
- No monthly minimum. A CU is roughly 4 GB of RAM (2 CU = 8 GB on Neon's pages).
StitchDB charges a plan price with included amounts:
- Free: $0, 2 projects, 500 MB database, 24 hours of point-in-time recovery.
- Pro: $15.99, 10 GB database per project, 7 days of PITR, 1 TB egress, 100,000 MAU.
- Scale: $49, 20 GB per project, 14 days of PITR.
- Usage above the included amounts only applies if you turn the spend cap off.
#Cost for three traffic patterns
Rough monthly costs on Launch versus Pro, as of November 2026. Neon numbers count compute and storage only.
| Pattern | Neon Launch | StitchDB Pro |
|---|---|---|
| Internal tool: 0.25 CU active 4 hours a day on weekdays (~22 CU-hours), 2 GB | ~$2.33 + $0.70 = ~$3 | $15.99 |
| Small SaaS: 0.5 CU active 12 hours a day (~180 CU-hours), 5 GB | ~$19.08 + $1.75 = ~$21 | $15.99 |
| Steady API: 1 CU around the clock (~730 CU-hours), 10 GB | ~$77.38 + $3.50 = ~$81 | $15.99 on shared compute |
The first row is Neon's sweet spot: you pay for 22 hours, not 730. The last row is where a flat plan wins, with an important caveat: a StitchDB Pro project shares a server and has plan limits (1,000 API requests per second, 100 direct connections, a 30-second API statement timeout), while Neon's 1 CU is compute reserved for you. A heavy workload on StitchDB eventually belongs on a dedicated server (Scale and Enterprise), which costs more. Measure your own load before deciding.
#Feature comparison
| Neon | StitchDB | |
|---|---|---|
| Scale to zero | Yes (5 min on Free; configurable on paid) | No; DB always on. Free REST/Auth sleep after 60 min idle |
| Branching | Instant branches, 10 per project on Free/Launch | Preview branches from migrations: Pro 3, Scale 5 |
| Restore history | 6 h Free, up to 7 d Launch, up to 30 d Scale (paid per GB-month) | 24 h Free, 7 d Pro, 14 d Scale, 30 d Enterprise (included) |
| Read replicas | All plans | Pro and up, $0.01/replica-hour |
| Pooling | PgBouncer, up to 10,000 connections | Pooler on 5432 (session) and 6543 (transaction) |
| HTTP driver | @neondatabase/serverless | stitchdb-js/sql |
| Auth | Managed Better Auth (up to 60k MAU/project Free) | Built-in Auth (50k MAU Free, 100k Pro) |
| HTTP API from schema | Data API | REST and GraphQL |
| Files | Object Storage | Storage with image resizing and S3 endpoint |
| Realtime | Beta | Postgres changes, broadcast, presence |
| Spend control | Spending notifications | Spend cap (hard stop) on by default |
| Regions | AWS: US, EU (Frankfurt, London), APAC, SA | EU (Germany, Finland) |
#Branching: different jobs
Neon branches are copies of your database state, created quickly and cheaply, which makes "a database per preview deploy, with real data" easy. This is Neon's best feature, and StitchDB doesn't match its speed or count.
StitchDB preview branches are separate projects that replay production's migrations and seed.sql. They test the migrations themselves, and they come with their own Auth users, storage and functions. You can opt into a copy of production data with personal data masked by column name and type:
-- add your own masking rules next to the schema, in a migration
comment on column public.tickets.body is '@mask text';
comment on column public.orders.gift_note is '@mask null';Pick by job: Neon for many quick data copies, StitchDB for full-stack preview environments tied to migrations.
#Cold starts vs sleeping services
On Neon, an idle compute suspends and the next query waits for it to start. On paid plans you can turn this off (Launch) or tune it (Scale).
On StitchDB, the database never stops. On Free only, the Auth and REST services sleep after 60 minutes without requests and wake within a few seconds on the next one; direct Postgres connections are unaffected. Paid projects don't sleep.
#Code: the same query, two ways
Neon, from an edge function:
import { neon } from '@neondatabase/serverless'
const sql = neon(process.env.DATABASE_URL!)
const rows = await sql`select id, title from posts where published = true limit 10`StitchDB, the same with its serverless driver (docs):
import { createSql } from 'stitchdb-js/sql'
const sql = createSql(process.env.STITCHDB_SQL_URL!)
const rows = await sql`select id, title from posts where published = ${true} limit 10`Or from the browser, with Row Level Security instead of a server:
const { data } = await stitchdb.from('posts').select('id, title').eq('published', true).limit(10)#Who should pick which
Pick Neon if your databases are idle most of the time, you want many branches with real data, you need US or Asian regions, or you only need Postgres.
Pick StitchDB if you want one flat bill with a hard cap, PITR included, the database always warm, and Auth, Storage, Realtime and functions in the same project, and your users are in Europe.
#Moving from Neon to StitchDB
Use the direct (non-pooled) Neon connection string. If logical replication is enabled on the Neon project, StitchDB's Import from Postgres does a live copy and switches over in seconds; otherwise a one-time copy. Guide: Move a Neon database to StitchDB. Or keep reading: Neon alternatives.
#Limits to compare before you commit
Neon's free plan limits compute time (100 CU-hours per project) and storage (1 GB per project). When CU-hours run out, compute is suspended until the next billing period or an upgrade. On paid plans the main limit is what you are willing to spend.
StitchDB's limits are per project and per plan instead (plans and limits):
| Limit | Free | Pro | Scale |
|---|---|---|---|
| Database size | 500 MB | 10 GB | 20 GB |
| API requests per second | 50 | 1,000 | 2,000 |
| API statement timeout | 8 s | 30 s | 60 s |
| Direct connections | 20 | 100 | 160 |
| Pooled client connections | 1,000 | 10,000 | 15,000 |
At the database size limit, a StitchDB database becomes read-only (writes fail with error code 25006) until you free space or upgrade; nothing is deleted. With the spend cap off, it can grow beyond the limit at $0.12 per GB-month on Pro. Above the request rate, extra requests get 429.
The practical question: does your heaviest workload fit inside a fixed box (StitchDB) or do you want it to stretch and bill for the stretch (Neon)?
#FAQ
#Is Neon cheaper than StitchDB?
For databases that are idle most of the day, usually yes. For steady traffic around the clock, a flat StitchDB plan is usually cheaper, within its plan limits.
#Does StitchDB scale to zero?
No. The database stays on. On the Free plan, the REST and Auth services sleep after 60 minutes idle.
#Does Neon have a spending cap?
Neon documents spending notifications at 80% and 100% of a threshold. StitchDB's spend cap stops usage at the plan's included amounts.
#Can I use both?
Yes. Some teams use Neon branches for CI data tests and StitchDB for the production app. Both are standard Postgres, so pg_dump moves data either way.
Want a flat-priced Postgres backend? See pricing or sign up free.