TeaQL is a generated business API platform for systems where the domain model is more important than the storage plumbing around it.
Instead of asking developers to repeatedly write repositories, SQL fragments, DTO stitching, relation loading code, and validation glue, TeaQL starts from a domain model and generates APIs that read like business intent.
The current positioning is simple:
Generated Business APIs. Java-proven. Rust-powered. Multi-database ready.
The Core Idea
TeaQL separates the business API from the runtime provider.
Domain Model
-> TeaQL Generator
-> Generated Q API
-> Runtime Provider
-> MySQL / PostgreSQL / SQLite / Memory / Edge / Agent
Application code should talk to generated APIs. Runtime code should decide how those APIs execute against a database, memory repository, embedded store, or service runtime.
What TeaQL Generates
Depending on the target stack, TeaQL can generate:
- entity types;
- query builders;
- safe expression helpers;
- relation loading helpers;
- checker and behavior skeletons;
- graph save entrypoints;
- runtime module registration;
- agent guidance for generated APIs.
In Java, this appears as fluent generated request APIs. In Rust, generated crates expose Q::entities() style query builders over teaql-rs.
Why It Matters
Large business systems repeat the same concepts across many screens and services:
- users and roles;
- orders and line items;
- customers and accounts;
- status counts and dashboards;
- parent-child graph saves;
- tenant, permission, audit, and localization policies.
Without a generated business API layer, those concepts spread across SQL, mapper XML, repositories, service methods, DTOs, validators, and frontend-specific response shaping.
TeaQL keeps the model vocabulary visible in the code path.
Java and Rust
Java TeaQL is the mature, proven path for enterprise systems and Spring Boot services.
Rust TeaQL is the runtime direction for generated domain APIs across PostgreSQL, MySQL, SQLite, embedded SQLite, and memory-backed tests.
The two stacks are not identical, and they do not need to be. They share the programming model: generated APIs over a domain model, executed through a runtime boundary.
A Small Example
User userOrderInfo = Q.users()
.filterWithId(userId)
.countOrder()
.statsFromOrder("statusWithCount", Q.orders().count().groupByOrderStatus())
.selectOrderList(
Q.ordersWithId()
.selectOrderId()
.selectDate()
.offset(0, 10)
.countLineItems()
)
.execute(context);
This is not just a query. It is the shape of a business page expressed through generated APIs.
TeaQL in One Sentence
TeaQL turns domain models into stable business APIs that humans and AI tools can read, compose, and run across Java, Rust, and multiple database providers.