Introduction
What Rad is, and the one loop it is built around.
Rad is an ORM-native relational database. It is written in Go, stores data on
SlateDB, and speaks a small HTTP protocol over
rad://. What makes it different is not the storage engine — it is the
workflow.
You never write SQL. You describe your tables once, in YAML, and Rad gives you a typed client for your language. When the schema changes, you regenerate the client, and your code stops compiling exactly where it needs your attention.
The loop
Everything in Rad is one workflow:
- define — write
schema.rad, a YAML description of your tables. - run —
rad serveboots the database, devtool, and API from one binary. - generate —
rad generateemits a typed Go or TypeScript client. - write — query through the generated client: fluent, nested, typed.
- evolve — change
schema.rad. - regenerate —
rad generateagain; the client changes with you.
You go around it once to ship, and around the last two steps every time the shape of your data changes.
Rad is a proof of concept, and honest about it. It exists to prove the developer experience, not to run your production fleet.
What's in the box
- Typed clients for Go and TypeScript, generated from the schema.
- Nested reads that return JSON shaped like your data — no N+1, no joins to unpick.
- Aggregations (
count,sum,avg,min,max) that fold server-side. - Serializable transactions with retryable conflict errors.
- Migrations derived from a schema diff.
- A single
radbinary: server, devtool, and codegen.
Head to Getting started to install it and run the loop end to end.