Build timeline — where we are
Seven phases, each with a hard exit gate — we don't start the next until the gate passes. Every animation follows one continuing story: Acme Distribution, a Denver drinks distributor, and its orders. Read the scenario line first, then let the steps play — or drive them yourself with the step buttons. Hover any block for a plain description; click it for the full technical deep-dive.
Ranger in action — a hospital, cloned
The build timeline above shows how Ranger is made. This shows what it's for. Mercy Ridge Regional Hospital is a fictional hospital with a painfully real setup: five systems that don't talk — an EHR, a credentialing spreadsheet, an admissions feed, a lab system, a pharmacy. Watch them connect into one data abstraction layer, then watch the jobs a plain database can't do safely. All data below is fictional, created for this example.
The three bets Ranger is built on
◆Wire contract is law
We implement the public OSDK API contract (/api/v2/ontologies/*), verified by a conformance suite that runs identical scenarios against the SDK project's own test double (@osdk/faux) and against us. The payoff: the official OSDK — typed clients, codegen, the whole developer experience — works against Ranger unmodified.
◆The edit log is the truth
Every write is an append-only edit; the queryable objects table is just a projection. CI proves it every run: wipe the projection, replay the log, get back an identical database. Full audit history and rebuildable indexes come for free.
◆Isolation the app can't forget
Tenant isolation is enforced by Postgres row-level security — forced, keyed on the request's tenant, running as a non-superuser role. Application code cannot cross tenants, even if buggy. Production deployments go further: one gapped stack per customer.
Newest result — reads from the database you already run
◆Mapped backing, proven on the wire
A model can now declare a type as backed by a table in the Postgres you already operate — no migration, no copy. The platform routes reads for that type (get, list, search, link traversal, object sets) to a data-plane engine that reads your table live. The exit gate, passed 07/15: the official OSDK client reads a native type and a mapped type through the same wire API, with correct results, and cannot tell which store answered.
◆Reads today — writes by design, not delay
Write-back on mapped tables is deliberately sequenced behind a change-capture design so the edit-log guarantee (every change auditable and replayable) holds for your tables too — including changes made outside the platform: a raw SQL update against your database will surface as a governed edit event and webhook with no API call involved. That design is in cross-review now. Until it lands, mapped types are read-only, and row-level policies on them are refused at publish rather than silently unenforced.
◆Beyond Postgres — measured, and it passed
Reaching MySQL, SQL Server, and Oracle sources is ruled: mount them as foreign tables inside a Postgres we run, so one query engine serves every source. The lab spike has passed its gate: a 57-test rig ran the full read-correctness suite green against a foreign-mounted MySQL with zero engine changes, with the pushdown operator matrix and latency numbers measured at 0 ms and 20 ms injected round-trip — findings recorded and their fixes adopted. Managed Postgres (RDS/Aurora) rides the same mount path. Next: the offer sheet gains per-source coverage rows — measured, not promised.
