Skip to content
Strata
A-01Distributed SQL · Postgres-compatible

Reads from next door. Writes that outlive a region.

Strata keeps a copy of your data in six regions. Every user reads from the nearest one, and every write is logged in three regions before Strata says yes. Lose a region, and no write goes with it.

Regions
6Full copy in each
Commit
3 of 6Regions per write
Failover
1.8 sMedian, no writes lost
Fig. 1 — Live systemTap a region to take it down. Tap again to bring it back.
  • Request
  • Replicate
  • Acknowledge
  • Commit
  • Client city
  • Region down
Status6/6

All six regions up. Writes commit in three.

Commits
0
Writes lost
0
Failover
—

All six regions up. Writes commit in three.

Sheet
A-01
Title
System overview
Rev
D
Scale
NTS
Date
2026-10-30
A-02Latency explorer

Pick a city. See what its users wait for.

Twelve cities where Pinecart has shoppers, against the same app on one Postgres region in Virginia. Reads get faster wherever Strata has a closer copy. Writes pay one hop between regions, so cities next to Virginia write a little slower. That hop is what keeps a write alive when a region is not.

City
Fig. 2 — Route from JakartaServed by Singapore · 910 km · 14 ms RTT
VIR
SIN
Jakarta
Strata: nearest copy, SingaporeSingle region: Virginia, 16,350 km
Read p50
Single region · Virginia231 msStrata · SIN15 ms
−216 ms15× faster
Read p99
Single region · Virginia349 msStrata · SIN30 ms
−319 ms12× faster
Write p50
Single region · Virginia693 msStrata · SIN205 ms
−488 ms3.4× faster
Write p99
Single region · Virginia952 msStrata · SIN294 ms
−658 ms3.2× faster
  • Read: one-row SELECT by primary key.
  • Write: add-to-cart transaction (SELECT … FOR UPDATE, UPDATE, COMMIT), serializable.
  • Sample data: 10,000 requests per city from a client in a nearby data center, October 2026.
Sheet
A-02
Title
Latency by city
Rev
C
Scale
1:1
Date
2026-10-21
A-03Engine

Four layers, each with one job.

Strata runs as one binary per node. A query travels down through four layers and the answer comes back up the same way.

Fig. 3 — Engine, exploded
  1. 1SQL layer· PG wire v3
  2. 2Planner· Cost + RTT
  3. 3Replication log· 3 of 6 to commit
  4. 4Storage· LSM · NVMe
  1. 1

    SQL layerPG wire v3

    Speaks the Postgres wire protocol and parses queries the way Postgres 16 does, so drivers, ORMs and psql work unchanged.

  2. 2

    PlannerCost + RTT

    Cost-based and aware of geography. It knows where every copy lives and how fresh it is, and sends each read to the nearest copy that can answer.

  3. 3

    Replication log3 of 6 to commit

    One consensus log per range of rows. A write commits when three regions have it on disk. Leases need four, so a new leader always holds every committed write.

  4. 4

    StorageLSM · NVMe

    A log-structured merge tree on local NVMe in every region, with checksummed pages and continuous backup for 30 days of point-in-time recovery.

  5. How the log, leases and failover fit together
Sheet
A-03
Title
Engine, exploded view
Rev
B
Scale
1:4
Date
2026-09-18
A-04Developer experience

From where your app sits, it is Postgres.

Strata speaks the Postgres wire protocol and the SQL your app already sends. Keep your driver, your ORM and your migrations. There are two new ideas, both optional: where a row lives, and how stale a read may be.

schema.sqlSQL · Postgres 16
CREATE TABLE carts (  id          uuid PRIMARY KEY DEFAULT gen_random_uuid(),  shopper_id  uuid NOT NULL,  items       jsonb NOT NULL DEFAULT '[]',  updated_at  timestamptz NOT NULL DEFAULT now()) WITH (strata.home = 'nearest');1SET strata.read_staleness = '2s';2SELECT items FROM carts WHERE shopper_id = $1;BEGIN;3UPDATE carts SET items = items || $2, updated_at = now() WHERE shopper_id = $1;COMMIT;4
Fig. 4 — Postgres-compatible SQL
  1. 1

    Line 06Rows live in the region nearest the shopper who writes them.

  2. 2

    Line 08Reads may come from the local copy, at most 2 s old.

  3. 3

    Line 11Serializable is the default and the only level.

  4. 4

    Line 14Returns once three regions have logged the write.

cart.tsTypeScript
import { createPool } from '@ironleaf/strata';const db = createPool({  url: process.env.STRATA_URL,1  readStaleness: '2s',2});export async function addToCart(shopperId: string, item: Item) {  return db.transaction(async (tx) => {3    const cart = await tx.one(      'SELECT items FROM carts WHERE shopper_id = $1 FOR UPDATE',      [shopperId],    );    await tx.query('UPDATE carts SET items = $2 WHERE shopper_id = $1',      [shopperId, [...cart.items, item]]);  });4}
Fig. 5 — TypeScript client
  1. 1

    Line 04One URL. The client connects to the nearest live region.

  2. 2

    Line 05Applies to every read on this pool unless a query overrides it.

  3. 3

    Line 09Conflicts are retried with backoff, up to five times.

  4. 4

    Line 16Resolves after the commit quorum answers, never before.

From one Postgres to six regions, in four steps

Fig. 6 — Migration path
  1. 1

    Mirror

    Point Strata at your Postgres. It copies a snapshot, then follows the write-ahead log through logical replication. Your app does not change.

    Takes Hours

  2. 2

    Shadow reads

    Send a share of reads to Strata and compare every result with Postgres. Mismatches show up by query, with both rows side by side.

    Takes Days

  3. 3

    Cut over

    Strata waits for the log to drain, takes the primary role and hands your app a new URL. Writes pause for seconds, not minutes.

    Takes ≈ 20 s write pause

  4. 4

    Add regions

    Add regions one at a time. Each copies data in the background and starts serving local reads once it has caught up.

    Takes Hours per region

Fig. 7 — Cutover from the command line
Sheet
A-04
Title
Developer experience
Rev
C
Scale
1:1
Date
2026-10-09
A-05Case study
pinecartGrocery delivery · users in 30 countries

Pinecart moved checkout off a single region in six weeks.

Pinecart delivers groceries in 30 countries from one Postgres primary in Virginia. Shoppers in Jakarta waited more than a second for a cart to load, and an outage in Virginia in 2025 stopped checkout for 3 hours 40 minutes.

They mirrored to Strata in March, moved reads in April and cut over writes on a Sunday morning in May. Their first region-loss drill ran at lunchtime on a Tuesday.

“We took Frankfurt down in the middle of the Tuesday lunch rush. Carts kept loading. The only people who noticed were the ones watching the infra channel.”

Mireille OkonkwoHead of Infrastructure, Pinecart
1Cart load p99, Jakarta
Before1,180 msAfter38 ms
2Checkout down when a region fails
Before3 h 40 minAfter1.8 s
3Database pages to on-call, per quarter
Before14After2
Fig. 8 — Pinecart’s cluster in the Strata console
Sheet
A-05
Title
Case: Pinecart
Rev
A
Scale
1:1
Date
2026-08-27
A-06Guarantees

What we promise, in writing.

Strata specification
01IsolationSerializable transactionsThe default and the only level. Conflicting transactions are retried by the client library.See sheet B-01
02DurabilityCommit after 3 regions log the writeNo acknowledged write is lost with up to two regions down.See sheet B-02
03Availability99.995% target, per monthAbout 2 minutes 10 seconds a month. Service credits when we miss it.See sheet B-04
04Region lossSurvives 2 of 6 regions downFailover in 1.8 s at the median. At three down, writes pause by design and reads continue.See sheet B-04
05EncryptionAt rest and in transitAES-256-GCM with per-region keys. TLS 1.3 between clients, nodes and regions.—
06RecoveryPoint-in-time recovery, 30 daysRestore to any second into a new cluster while the live one keeps serving.—
07CompatibilityPostgres 16 wire protocol and SQLpgcrypto, uuid-ossp and pg_trgm included. Custom C extensions are not supported.—
Sheet
A-06
Title
Specification
Rev
E
Scale
—
Date
2026-10-30
A-07Design partners

Build the 1.0 with us.

We are taking twelve design partners for 2027: teams with users on more than one continent and a Postgres they have outgrown.

  1. 1A production cluster in the regions you need, free through 2027.
  2. 2A shared channel with the engineers who wrote the replication log.
  3. 3A seat at the monthly roadmap review, with a vote on what ships next.
ApplicationForm DP-07 · 4 fields

We reply from a person, not a sequence.

3Where are your users?

Pick every region you need.

4How much data?
Sheet
A-07
Title
Design partners
Rev
A
Scale
1:1
Date
2026-11-02