Over the past few months, I’ve been building Kova , a relational query builder and ORM for Rust targeting PostgreSQL and SQLite.
When working with databases in Rust, we usually have to pick between three compromises:
Heavy runtime abstractions ( ActiveModel / object graphs) that hide SQL behind session trackers and invite N+1 queries.
Deeply nested generic tuple trees where every joined table and selected column is encoded into the return type, great until a 5-table join produces 200 lines of compiler errors and explodes compile times.
Procedural query macros , which require a live database or offline schema cache just to run cargo check , and quickly turn into string stitching when you need dynamic filters.
I wanted something closer to how we actually write Rust and SQL: if you know SQL, you already know Kova.
Macro-free queries & zero trait imports : Apart from #[derive(Model)] (or FromRow , Cte ) on your structs, there are no query macros and no use kova::prelude::* .…