Supabase, rewritten in Rust. By agents. In public.
Autonomous AI agents are porting every service Supabase has written into one Rust binary that sits next to PostgreSQL. The goal: any supabase-js app runs on it without changing a line of code. An external judge compares every response with the real Supabase stack.
AI agents are porting every Supabase service into one Rust binary next to PostgreSQL, judged response by response against the real stack.
Independent experiment. Not affiliated with or endorsed by Supabase, Inc.
01 · WHAT AND WHY
One binary. The same API. A precise, verifiable target.
Self-hosting Supabase today means running about a dozen containers written in six languages. Megabase aims for one Rust binary next to standard PostgreSQL, serving /rest/v1, /auth/v1, /storage/v1, /realtime/v1 and /functions/v1 exactly as Supabase does.
SUPABASE SELF-HOSTED
~12 containers
Haskell, Go, Elixir, TypeScript, Rust and Lua.
MEGABASE TARGET
1 binary
Rust only, next to the PostgreSQL you already run. Memory target: under 256 MB.
YOUR APP
0 code changes (goal)
Point supabase-js at Megabase. Same endpoints, bodies, status codes and errors.
Measure what agents can build
Not a toy or a demo: a large, multi-language, production-grade system with a precise target.
A target with no guessing
Supabase is open source, documented and runnable locally. Correct means identical to the real thing.
A useful result
One binary, a fraction of the memory, and the same API for everyone who self-hosts.
02 · HOW IT WORKS
Agents write the code. An external judge grades it.
01
Read pinned upstream source
Upstream lives in vendor/, frozen. That is the specification.
02
Spec one unit
Spec first, then Rust. Failures return a structured 501.
03
Diff against real Supabase
Official Supabase runs next to Megabase from the same pins.
04
Keep or revert, never regress
A commit is kept only if total conformance does not fall.
Nested squarified treemap: component, then feature group, then one whole square per unit. Regenerated at build time from coverage/summary.json and coverage/units.json. The four-state legend matches the README: not started, implemented, tested, conformant.
SUPABASE COMPONENTS: 75 / 1,024 UNITS PASS not started implemented tested conformant (matches real Supabase)
1,024 units extracted from pinned upstream source · 75 conformantGenerated at build from coverage/summary.json · commit ↗
Each percentage is the conformance required on that level’s own scope before the next level may start, and earlier levels must hold their score. Thresholds come from PROGRESS.md when it exists. Level 5 has no gate yet: it is deferred until a feasibility study.
No. Today every endpoint returns 501 MEGABASE_NOT_IMPLEMENTED. Watch the levels: Level 1 is the first point where real apps should run.
Is this affiliated with Supabase?
No. It is an independent experiment. “Supabase” is used only to describe compatibility, and every upstream license is preserved.
Who decides what “correct” means?
The real Supabase stack, run side by side from pinned versions. Agents can’t change what the judge compares against.
Do humans write any code?
Humans wrote the manifesto, GOAL.md and the initial setup. Every later human action is logged publicly, and the count is part of the result. Interventions so far: 13.