Why Serverless Databases Took Over
Two years ago, most teams still provisioned fixed-size database instances and hoped they guessed the right spec. Today, serverless databases dominate greenfield projects because they eliminate capacity planning, scale to zero when idle, and charge based on actual usage. If you are building a SaaS product, an API backend, or an edge application, you are almost certainly evaluating Turso, Neon, or PlanetScale.
Each of these three platforms approaches serverless differently. Turso is built on libSQL (a fork of SQLite) and focuses on embedding database replicas directly at the edge. Neon delivers fully managed PostgreSQL with autoscaling compute and branching. PlanetScale runs Vitess (MySQL-compatible) with a workflow-driven approach to schema changes and horizontal sharding.
The right choice depends on your data model, your latency requirements, your team's SQL dialect preference, and where your users are located. This comparison covers real-world benchmarks, pricing at various scales, ORM compatibility, and the specific scenarios where each database wins.
If you have already narrowed your search to two of these options, our Neon vs PlanetScale vs Supabase comparison goes deeper on the PostgreSQL and MySQL sides.
Turso: SQLite at the Edge with Embedded Replicas
Turso is the most architecturally distinct option in this comparison. It is built on libSQL, an open-source fork of SQLite maintained by the Turso team. The core idea is simple: your database is a SQLite file that gets replicated to edge locations worldwide. Reads happen locally against an embedded replica with zero network latency. Writes go to a primary instance and propagate to replicas in milliseconds.
Architecture and Performance
Embedded replicas are the killer feature. In a typical setup, your application process includes a local copy of the database file. Read queries execute against this local file, which means sub-millisecond read latency with no network round trip at all. Writes route to the primary node (hosted in the region you choose) and replicate outward. In benchmarks, Turso delivers read latency under 1ms for embedded replicas, compared to 20 to 80ms for network-based databases depending on region.
This architecture is ideal for read-heavy workloads. If your application has a 90/10 read/write ratio (common for content platforms, dashboards, and multi-tenant SaaS), embedded replicas mean your p99 read latency is effectively the same as an in-memory lookup.
Multi-Tenant SaaS Sweet Spot
Turso's per-database model fits multi-tenant architectures perfectly. You can create one database per tenant, with each tenant's data isolated at the storage level. The free tier supports up to 500 databases, and paid plans allow 10,000 or more. This is database-per-tenant done right: no row-level security hacks, no shared connection pools, no noisy-neighbor problems.
Pricing
Starter (free): 500 databases, 9 GB total storage, 25 billion row reads per month. Scaler ($29/month): 10,000 databases, 24 GB storage, unlimited row reads. Pro ($99/month): everything in Scaler plus dedicated compute and higher storage limits. The per-row-read billing model is generous, and most small to mid-sized applications never leave the free tier.
Limitations
Turso uses SQLite's type system, which is more flexible but less strict than PostgreSQL. If your application relies on PostgreSQL-specific features like JSONB operators, window functions with complex framing, or PostGIS, Turso is not a drop-in replacement. Write throughput is also limited by the single-primary architecture, so write-heavy OLTP workloads (thousands of writes per second) will hit a ceiling.
Neon: Serverless PostgreSQL with Branching
Neon takes a different approach: full PostgreSQL compatibility with serverless compute. Your database is genuine PostgreSQL 16, which means every extension, every operator, every tool in the PostgreSQL ecosystem works out of the box. The serverless layer handles scaling compute up and down (including to zero) based on demand.
Architecture and Performance
Neon separates storage and compute. Storage is handled by a custom distributed storage engine (called "Pageserver") that stores data on S3-compatible object storage with a local cache layer. Compute instances are PostgreSQL processes that scale automatically. When your database has no connections for 5 minutes (configurable), compute scales to zero. When a connection arrives, cold start takes 300 to 500ms for the first query, then subsequent queries run at normal PostgreSQL speeds.
Read/write latency with Neon is comparable to standard managed PostgreSQL: 5 to 15ms for simple queries in the same region, 30 to 80ms cross-region. The autoscaling compute adjusts from 0.25 vCPU to 8 vCPU based on query load, which means you never overpay for idle compute but also never hit a wall during traffic spikes.
Branching for Development Workflows
Database branching is Neon's standout feature. You can create a full copy-on-write branch of your production database in under a second, regardless of database size. This is transformative for development workflows: every pull request gets its own database branch with production data, preview deployments connect to isolated branches, and you can test migrations against real data before deploying.
Branches are also the foundation for point-in-time recovery. You can branch from any point in the last 7 to 30 days (depending on plan), which replaces traditional backup-and-restore workflows entirely.
AI and Vector Support
Neon supports pgvector and pg_embedding natively, making it a strong choice for AI applications that need vector similarity search alongside relational data. You do not need a separate vector database. Store embeddings in the same database as your application data, run hybrid queries combining vector similarity with SQL filters, and keep your architecture simple.
Pricing
Free tier: 0.5 GB storage, 1 project, 5 branches. Launch ($19/month): 10 GB storage, 10 projects, 50 branches, autoscaling to 4 vCPU. Scale ($69/month): 50 GB storage, 50 projects, 500 branches, autoscaling to 8 vCPU, read replicas. Business ($700/month): 500 GB, 1000 projects, compliance features, dedicated support. Billing is based on compute-hours and storage, which makes costs predictable once you understand your workload pattern.
PlanetScale: MySQL with Vitess-Powered Sharding
PlanetScale is built on Vitess, the same horizontal scaling system that powers YouTube's MySQL infrastructure. It delivers MySQL 8.0 compatibility with automated sharding, online schema changes, and a deployment workflow modeled after Git. If your team prefers MySQL and needs to scale to billions of rows without re-architecting, PlanetScale is the strongest option.
Architecture and Performance
PlanetScale runs Vitess clusters managed behind a serverless-style interface. Your application connects over standard MySQL protocol, and Vitess handles query routing, sharding, and replication transparently. Performance is competitive with managed MySQL: 5 to 12ms for simple reads in the same region, with connection pooling handled automatically via their proxy layer.
The Vitess improvements shipped in 2025 and 2026 have closed the gap on query compatibility significantly. Most Prisma and Drizzle ORM queries work without modification. The remaining edge cases involve specific subquery patterns and certain JOIN optimizations that Vitess rewrites differently than native MySQL.
Deploy Requests and Schema Branching
PlanetScale's deploy request workflow is the safest way to run schema migrations in production. You create a branch, make schema changes, open a deploy request (similar to a pull request), review the generated DDL diff, and merge. PlanetScale applies the migration online with zero downtime. No table locks, no maintenance windows, no "oh no, that ALTER TABLE locked the users table for 6 minutes."
This workflow also catches problems before they happen. PlanetScale analyzes your schema change and warns about issues like adding a non-nullable column without a default, or creating an index that would block writes during creation. For teams running migrations against large tables, this safety net is worth the price of admission alone.
Pricing
Hobby (free): 5 GB storage, 1 billion row reads/month, 10 million row writes/month. Scaler ($29/month): 10 GB storage, 100 billion reads, 50 million writes, 3 production branches. Scaler Pro ($39/month): additional read-only regions, more storage, boosted connections. Enterprise: custom. Billing is per-row, which means costs scale linearly with usage and are easy to forecast.
Limitations
PlanetScale does not support foreign key constraints at the database level. Vitess handles referential integrity at the application layer, which means your ORM or application code must enforce relationships. This is a dealbreaker for some teams and a non-issue for others (many large-scale MySQL deployments dropped foreign keys years ago for performance reasons). If you rely heavily on cascading deletes or database-enforced referential integrity, PostgreSQL via Neon is a better fit.
Head-to-Head: Latency, Connections, and Edge Deployment
Let us put real numbers on the table. These benchmarks are from production workloads and community-reported tests, not synthetic lab scenarios.
Cold Start Latency
- Turso: Under 5ms. Embedded replicas are always warm because the database file lives in your application process. Network-based connections to the primary cold-start in about 50ms.
- Neon: 300 to 500ms for scale-to-zero cold starts. If you keep a minimum of 0.25 vCPU (about $5/month), cold starts drop to under 50ms. This is the main tradeoff with Neon's aggressive scale-to-zero.
- PlanetScale: Under 100ms. Connection proxy stays warm, so there is no true cold start. First query after idle may take 80 to 100ms due to connection pool warming.
Read Latency (p50/p99)
- Turso (embedded replica): 0.2ms / 0.8ms. This is unbeatable because there is no network hop.
- Turso (network): 8ms / 25ms to the nearest edge replica.
- Neon: 6ms / 18ms in the same region. Cross-region: 40 to 90ms depending on distance.
- PlanetScale: 5ms / 15ms in the same region. Read-only regions add global coverage at 10 to 30ms.
Connection Handling
Serverless functions create and destroy database connections rapidly, which can exhaust connection pools. Each platform handles this differently:
- Turso: Uses HTTP-based connections by default (libSQL over HTTP), so there are no persistent connections to manage. This makes it naturally suited for serverless and edge runtimes. You can also use WebSocket connections for lower latency when persistent connections are available.
- Neon: Includes a built-in connection pooler (based on PgBouncer) that handles thousands of concurrent serverless connections. The pooler URL is separate from the direct connection URL, so you use the pooler in serverless functions and direct connections in long-running processes.
- PlanetScale: Their proxy layer handles connection pooling transparently. No configuration needed. Supports up to 10,000 concurrent connections on Scaler plans.
Edge Deployment
If you deploy to Cloudflare Workers, Vercel Edge Functions, or Deno Deploy, Turso is the clear winner. Embedded replicas run inside the worker runtime itself. Neon works at the edge via their serverless driver (@neondatabase/serverless), which uses WebSocket connections instead of TCP. PlanetScale's serverless driver (@planetscale/database) also works at the edge over HTTP, but latency depends on proximity to their regions.
For a deeper look at SQLite-based edge databases, see our guide to SQLite in production with Turso, LiteFS, and D1.
ORM Compatibility, Branching, and Developer Experience
Your ORM choice and development workflow matter just as much as raw performance. Here is how each platform works with the tools you are already using.
Drizzle ORM
Drizzle has first-class drivers for all three databases. The libSQL driver for Turso, the Neon serverless driver, and the PlanetScale serverless driver all work with Drizzle's type-safe query builder. Drizzle Kit handles migrations for all three, and the schema declaration syntax is consistent across dialects. If you are starting a new project and want maximum flexibility to switch databases later, Drizzle is the safest bet.
Prisma
Prisma supports Neon (PostgreSQL) and PlanetScale (MySQL) with stable drivers. Turso support landed in Prisma 5.4 with the libSQL driver adapter, though some advanced Prisma features (like interactive transactions) have limitations with Turso. If your team is already on Prisma, Neon gives you the smoothest experience because Prisma's PostgreSQL support is the most mature.
Preview Environments and Branching
Both Neon and PlanetScale offer database branching, but the implementations differ:
- Neon branches are instant copy-on-write clones. A branch of a 50 GB database takes under 1 second to create and initially costs nothing (you only pay for divergent data). Neon integrates with Vercel to automatically create a branch per preview deployment.
- PlanetScale branches are full schema copies without data by default. You can optionally include data, but it takes longer. Deploy requests (the merge workflow) include schema diff review, linting, and zero-downtime application.
- Turso does not have native branching in the same way. You can create new databases programmatically (which is fast), but there is no built-in workflow for branch-per-PR with automatic cleanup.
Dashboard and Observability
PlanetScale has the best dashboard of the three. Query insights show slow queries, index recommendations, and query frequency analysis. Neon's dashboard is clean and functional with query statistics and connection monitoring. Turso's dashboard is simpler, focused on database management and basic metrics.
Vector and AI Extensions
- Neon: pgvector and pg_embedding are fully supported. You get vector similarity search, IVFFlat and HNSW indexes, and hybrid queries combining vector search with SQL. This makes Neon a solid choice for RAG applications and AI-powered search.
- Turso: libSQL added vector search support via sqlite-vec, offering basic vector operations. It works for simple similarity search but lacks the index sophistication of pgvector.
- PlanetScale: No native vector support. You would need a separate vector database (Pinecone, Qdrant, or similar) alongside PlanetScale for AI workloads.
Pricing at Scale: What 1M Rows Actually Costs
Free tiers are great for prototyping, but real costs show up at scale. Here is what each platform costs for a production application with 1 million rows, 50 million reads per month, 2 million writes per month, and 5 GB of storage.
Turso
With Turso's Scaler plan at $29/month, this workload fits comfortably. Row reads are unlimited on the Scaler plan, and 5 GB is well within the 24 GB storage limit. If you need embedded replicas in multiple regions, there is no additional per-replica cost. Total: approximately $29/month.
Neon
The Launch plan at $19/month covers this workload if your compute usage stays under 300 compute-hours per month (the included allocation). A typical application serving 50 million reads runs about 150 to 250 compute-hours, depending on query complexity and connection patterns. If you occasionally burst higher, additional compute-hours cost $0.16 each. Total: approximately $19 to $35/month.
PlanetScale
The Scaler plan at $29/month includes 100 billion reads and 50 million writes. This workload is a fraction of those limits. Storage is included up to 10 GB. Total: approximately $29/month.
At 10x Scale
When you hit 10 million rows, 500 million reads, and 20 million writes, the picture shifts. Turso stays at $29/month (unlimited reads on Scaler). Neon moves to the Scale plan at $69/month to handle the compute requirements. PlanetScale stays at $29/month (still well within Scaler limits). At this scale, Turso and PlanetScale are the most cost-effective, while Neon's compute-hour billing starts to add up for sustained workloads.
At 100x Scale
At 100 million rows and billions of monthly reads, all three platforms move into custom or higher-tier pricing. Turso's Pro plan at $99/month may suffice. Neon's Business plan starts at $700/month. PlanetScale's Scaler Pro at $39/month is surprisingly affordable at this level, though storage overages add cost. The per-row billing model (Turso and PlanetScale) tends to be more predictable than compute-hour billing (Neon) for high-throughput applications.
When to Choose Each: Decision Framework
After running all three in production across client projects, here is the framework we use at Kanopy Labs to recommend a serverless database.
Choose Turso When
- You are building a multi-tenant SaaS and want database-per-tenant isolation without the operational overhead
- Your application is read-heavy (90%+ reads) and you need sub-millisecond read latency
- You deploy to edge runtimes (Cloudflare Workers, Deno Deploy) and need the database to live alongside your code
- You prefer SQLite's simplicity and do not need PostgreSQL-specific features
- You want the most generous free tier for prototyping and small projects
Choose Neon When
- Your team already knows PostgreSQL and you want full compatibility with extensions, types, and tooling
- Database branching for preview environments is important to your development workflow
- You need vector search (pgvector) alongside relational data for AI applications
- You want scale-to-zero for development and staging databases to minimize costs
- You use Prisma and want the smoothest ORM integration
Choose PlanetScale When
- Your team prefers MySQL, or you are migrating from an existing MySQL database
- You need safe, automated schema migrations with review workflows and zero-downtime deploys
- Horizontal sharding is on your roadmap (PlanetScale's Vitess foundation handles this natively)
- You want the best observability dashboard with query insights and index recommendations
- Foreign key constraints at the database level are not a requirement
Migration Paths
Switching between these databases is not trivial, but it is not impossible either. Turso to Neon requires changing your SQL dialect from SQLite to PostgreSQL and updating your ORM configuration. Neon to PlanetScale means moving from PostgreSQL to MySQL, which involves data type mapping and query adjustments. PlanetScale to Neon is the same process in reverse. Plan 2 to 4 weeks for a production migration, including schema translation, data migration, and application testing.
The best strategy is to choose based on your long-term architecture. If you are building for the edge, start with Turso. If you need the PostgreSQL ecosystem, start with Neon. If you want MySQL with the safest migration workflow, start with PlanetScale.
Not sure which serverless database fits your stack? Book a free strategy call and we will map out your data architecture together.
Need help building this?
Our team has launched 50+ products for startups and ambitious brands. Let's talk about your project.