Short answer: Neon is the best managed Postgres for most production Next.js apps in 2026, because its pooled endpoint, HTTP driver for the Edge runtime, and copy-on-write database branch per preview deployment match how Next.js is deployed on Vercel. Supabase is the better choice when you also want auth, file storage, and realtime on one $25/month Pro plan. PlanetScale is the pick for an app that already has steady traffic and needs always-on Postgres with two replicas included, but it has no free tier.

All three run Postgres now, so the choice for a Next.js team comes down to four practical questions: how Server Actions and Route Handlers get a connection without exhausting the database, whether the Edge runtime can query it, what a database per preview deployment costs, and what happens when the database has been idle. The table below answers each one. Prices and limits are October 29, 2026 list rates for AWS us-east-1, the same figures used in our Supabase vs Neon vs PlanetScale latency and pricing comparison, so the numbers agree across the site.

Supabase vs Neon vs PlanetScale for production Next.js: comparison table

Production requirementSupabaseNeonPlanetScale
EnginePostgresPostgresPostgres, or MySQL on Vitess
Free tierYes: 500 MB database, 2 active projects, paused after 1 week idleYes: 100 CU-hours and 1 GB storage per projectNo
Paid entry pricePro $25/month, including $10 compute creditLaunch: no monthly minimum, $0.106 per CU-hourPS-5 $5/month single node, $15/month HA
Always-on, about 4 GB RAM, 20 GB dataAbout $77/monthAbout $84/month$28/month single node or $83/month HA (PS-40), plus overages
Cold start in productionNone on paid plansA few hundred ms after 5 min idle; can be turned off on LaunchNone
Pooled connection for Server Actions and Route HandlersSupavisor transaction mode, port 6543, prepared statements off-pooler hostname (PgBouncer)PgBouncer, port 6432, transaction mode only
Edge runtime and middlewaresupabase-js over HTTP (PostgREST)@neondatabase/serverless over HTTP or WebSocketsQuery from a Node.js route instead
Database per preview deploymentBranching at $0.01344 per branch-hourCopy-on-write branches; 10 included on Launch, then $1.50 per branch-monthDevelopment branches; no per-branch Postgres price listed when we checked
High availabilityRead replicas as paid compute add-onsRead replicas billed as computeHA plans include a primary and two replicas
Bundled auth, storage, realtimeYes, auth included to 100,000 MAUs on ProNoNo

The 4 GB row is matched on memory, not CPU: PlanetScale PS-40 has 1/2 vCPU, while a Neon CU is 1 vCPU. Supabase's price also covers auth for 100,000 monthly active users and file storage, which you would buy separately with Neon or PlanetScale. The full cost breakdown is in the pricing comparison, and the database-plus-auth bill at 10,000 to 100,000 users is in Supabase vs Neon vs PlanetScale with Clerk, Auth0, and Better Auth.

Where each option fits (and where it does not)

PlatformBest forWhere it does not fit
NeonNext.js on Vercel or another serverless host, a database branch per pull request, Edge runtime queries, traffic that is idle part of the dayNo bundled auth or storage; first request after idle when scale-to-zero is on; per-hour compute costs more than a fixed instance for a busy always-on app
SupabaseSmall teams that want Postgres, auth, storage, and realtime on one bill, with Row Level Security reading the signed-in userCompute is a fixed instance size and does not autoscale; per-hour branching adds up with many previews; prepared statements must be off behind the transaction pooler
PlanetScaleApps that already have steady traffic and need replicas, predictable instance pricing, local-NVMe Metal clusters, or MySQL shardingNo free tier and no scale-to-zero, so previews and hobby projects cost money; no HTTP driver for Postgres in the Edge runtime; storage and egress overages priced per region

No platform wins on every row. Neon fits the Next.js deployment model best. Supabase gives a small team the most per dollar if it would otherwise pay for auth and storage. PlanetScale is the cheapest way to get always-on Postgres with two replicas, which matters more for an app with real traffic than for one still looking for users.

Connecting from each Next.js runtime

Most production problems with Postgres on Next.js are connection problems, not query speed. Every Server Action, Route Handler, and server component that hits the database may run in a fresh serverless instance, and each one can open its own connection. A direct connection string works on your laptop and fails under load.

Node.js runtime: Server Actions, Route Handlers, server components

Use the pooled endpoint on all three and create the client once at module scope so warm instances reuse it. On Supabase, that is Supavisor in transaction mode on port 6543, with prepared statements turned off because the shared pooler does not support them in transaction mode. On Neon, use the connection string whose hostname ends in -pooler, or the serverless driver. On PlanetScale Postgres, connect through PgBouncer on port 6432 rather than 5432; it runs on the primary node and supports transaction mode only.

// lib/db.ts (Supabase or PlanetScale): one pooled client per module
import postgres from "postgres";
import { drizzle } from "drizzle-orm/postgres-js";

// Supabase: Supavisor transaction mode, port 6543
// PlanetScale: PgBouncer, port 6432
const client = postgres(process.env.DATABASE_URL!, { prepare: false });
export const db = drizzle(client);

Edge runtime and middleware

The Edge runtime cannot open a raw TCP connection, so it needs a client that speaks HTTP. Neon's @neondatabase/serverless driver runs queries over HTTP or WebSockets, which makes Neon the only one of the three where ordinary SQL works from middleware with no extra layer. Supabase gets there a different way: supabase-js calls the auto-generated PostgREST API over HTTP, and Row Level Security decides which rows the caller can see. For PlanetScale Postgres, keep database work in Node.js routes; PlanetScale's long-standing HTTP driver, @planetscale/database, was built for its Vitess MySQL product.

// lib/db.ts (Neon): HTTP driver, works in Node.js and Edge runtimes
import { neon } from "@neondatabase/serverless";
import { drizzle } from "drizzle-orm/neon-http";

export const db = drizzle(neon(process.env.DATABASE_URL!));

Long-running Node.js server or container

If you self-host Next.js with next start on a server or container that stays up, connection limits stop being the main constraint, and an ordinary pool works on all three. That deployment also removes most of Neon's advantage, because a busy always-on app pays per CU-hour on Neon against a fixed monthly instance on Supabase or PlanetScale.

Preview deployments: a database per pull request

Vercel builds a preview deployment for every pull request, and a preview that writes to the production database is a common way to corrupt real data. Neon handles this best: branches are copy-on-write, so a new branch shares storage with its parent until data changes, and the Neon integration for Vercel can create one per preview. Ten branches are included on Launch, then $1.50 per branch-month. Twenty pull requests a month, each branch kept seven days, comes to roughly $5 to $15.

Supabase branching works but bills $0.01344 per branch-hour, so the same twenty seven-day branches cost about $45. PlanetScale has development branches, but its Postgres pricing docs did not list a per-branch price when we checked, so confirm in the dashboard before budgeting.

Production readiness: cold starts, replicas, and the bundle

Cold starts

Neon suspends an idle compute after 5 minutes by default and wakes it in what its docs describe as a few hundred milliseconds. On a production branch with steady traffic that rarely happens, and on Launch you can turn scale-to-zero off for production while keeping it on for preview branches. Paid Supabase projects and every PlanetScale database are always on. Supabase Free projects pause after a week of inactivity and have to be restored by hand, which is an outage, not a cold start, so do not run production on the Free plan.

Replicas and failover

PlanetScale's HA plans include a primary and two replicas in the price, from $15/month for PS-5 and $83/month for PS-40. Neon and Supabase sell read replicas as extra compute. Whichever you pick, read the vendor's status page history for the region you plan to deploy in before you commit; region is the variable that decides both latency and the incidents you will actually feel.

What comes in the box

Supabase is the only one of the three that bundles auth, storage, realtime, and Edge Functions. Many Supabase-backed Next.js apps never open a raw Postgres connection from a serverless function, because supabase-js handles reads and writes over HTTP. With Neon or PlanetScale you add an auth layer yourself; Better Auth keeps users in your own Postgres tables, and Clerk or Auth0 host them for you at a per-user price.

How to choose in four questions

  1. Do you want auth and file storage from your database vendor? Yes: Supabase.
  2. Do you deploy to Vercel or another serverless host and want a database per preview deployment? Yes: Neon.
  3. Do you need SQL from the Edge runtime or middleware? Yes: Neon, or Supabase through supabase-js.
  4. Does the app already have steady traffic, and are replicas worth more to you than a free tier? Yes: PlanetScale.

If none of these settle it, start on Neon. It has a free plan, it is plain Postgres, and moving off it later means moving a database dump. That is the stack we recommend in our database and auth cost breakdown too. For the two-way version, see Neon vs Supabase Postgres.

Frequently asked questions

Which managed Postgres is best for a production Next.js app in 2026?

Neon is the best default for a production Next.js app on Vercel or another serverless host: it has a pooled connection string, an HTTP driver that runs in the Edge runtime, and a copy-on-write database branch for every preview deployment. Supabase is better if you also want auth, file storage, and realtime on the same $25/month Pro plan. PlanetScale is the pick when uptime matters most, because its HA plans include a primary and two replicas, but it has no free tier.

Is Supabase or Neon better for Next.js?

Choose Supabase if you want Postgres plus authentication, storage, and realtime from one vendor, with Row Level Security tied to the signed-in user. Choose Neon if you only need Postgres and bring your own auth, because its per-preview branches and scale-to-zero compute fit the Vercel deployment model. For an always-on production database with about 4 GB of RAM, the October 2026 list prices are close: about $77/month on Supabase Pro and about $84/month on Neon Launch.

How do I connect Next.js Server Actions and Route Handlers to Postgres without running out of connections?

Use each vendor's pooled endpoint instead of a direct connection. On Supabase, connect through Supavisor in transaction mode on port 6543 and turn off prepared statements. On Neon, use the hostname with -pooler, or the @neondatabase/serverless driver over HTTP. On PlanetScale Postgres, connect through PgBouncer on port 6432, which supports transaction mode only. Create the client once per module, not once per request.

Can I query Supabase, Neon, or PlanetScale from the Next.js Edge runtime or middleware?

The Edge runtime cannot open raw TCP connections, so it needs an HTTP-based client. Neon's @neondatabase/serverless driver runs queries over HTTP or WebSockets from edge runtimes. Supabase's supabase-js client talks to the auto-generated PostgREST API over HTTP. For PlanetScale Postgres, run database queries in a Node.js Route Handler or Server Action; its long-standing HTTP driver, @planetscale/database, was built for the Vitess MySQL product.

Does Neon's cold start matter for a production Next.js app?

Only if the production database sits idle. Neon suspends a compute after 5 minutes without activity by default and wakes it in what its docs describe as a few hundred milliseconds, so the first request after a quiet period pays that delay. On the Launch plan you can turn scale-to-zero off for the production branch and leave it on for preview branches. Paid Supabase projects and all PlanetScale databases are always on and have no cold start.

Is PlanetScale still MySQL only, and does it have a free tier?

PlanetScale now sells PlanetScale Postgres alongside its Vitess-based MySQL product. Postgres starts at $5/month for a single-node PS-5 and $15/month for three-node high availability. PlanetScale has had no free tier since April 2024, so every preview or hobby database costs money from day one.