Blog
Typed SQL Without Hiding the SQL
Mool removes repeated database plumbing while keeping query intent close to the call site.
There is a familiar trade-off in database code. Write SQL directly and every query stays visible, but mapping rows and keeping types aligned becomes repetitive. Adopt a large ORM and the repetition may shrink, but the resulting query can become harder to see and reason about.
Mool is interested in the middle ground. It is a source-first typed SQL data mapper for Rust: models, row mapping, relations, filters, schemas, and migrations can be expressed with Rust types, while the SQL-shaped work remains close to the place that needs it.

The query is still part of the design
Mool is not trying to make an active-record object that silently knows how to save itself. A model describes data. A record represents a row. Query operations stay explicit, and the terminal operation that fetches or changes data is still a visible choice.
That is a small distinction with practical consequences. A reader can follow a query chain from its source to its filter, ordering, relation, or aggregation. When a query needs to be unusual, raw SQL remains available instead of becoming an escape hatch that fights the rest of the system.

Less ceremony, not less responsibility
Typed mapping is valuable because it removes the boring kinds of mistakes: a selected column that does not fit the target type, a filter that has drifted from the model, or repetitive conversion code scattered across a project. But it should not persuade us that database work is harmless.
Indexes, transaction boundaries, query plans, and the shape of a result still matter. Mool's preference is to make the common parts quiet while keeping the consequential parts ordinary and inspectable.
That is the kind of abstraction that tends to age well. It helps when it has something concrete to remove, and steps aside when the SQL itself is the clearest way to describe the job.