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:

  1. define — write schema.rad, a YAML description of your tables.
  2. runrad serve boots the database, devtool, and API from one binary.
  3. generaterad generate emits a typed Go or TypeScript client.
  4. write — query through the generated client: fluent, nested, typed.
  5. evolve — change schema.rad.
  6. regeneraterad generate again; 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 rad binary: server, devtool, and codegen.

Head to Getting started to install it and run the loop end to end.