Rindle is a new, from-scratch relational database built to support efficient live queries from the ground up. It grew out of our work on Zero.
The Promise
view-after-write == fresh-queryThe changes a subscriber receives, applied in order, always equal running the query again from scratch. Everything else in Rindle is built to keep that true. Consistency has the full list of guarantees.
Query Languages
Rindle speaks a subset of SQL with some convenience extensions. It can also receive raw ASTs from clients, enabling native support for typed query builders.
Writes are SQL statements, sent one at a time, in a batch, or in an interactive transaction. Schema changes are via a small native migration system.
Rindle does not currently support traditional joins, but does have native support for
tree queries via the WITH statement which are often more useful.
Where It Runs
- Cloud Rindle: hosted by us.
- Self-hosted: one binary on your own machines.
- Embedded: in your process, including the browser.
- Bring your own database: live queries over Postgres or another source of truth.
Shape
A small app runs one server which handles subscriptions and writes.
To scale, Rindle splits into a leader, which takes every write, and any number of read followers, which run the live queries. Your app sees the same URL and the same API either way. Self-Hosted shows the layout.
Interface
Rindle’s interface is HTTP. Your server sends queries and writes, and creates subscriptions; each browser or client reads its own stream of changes directly. Architecture shows how that fits into an app, and the client libraries wrap it.