Type-safe queries. Policy-aware execution. Zero dependencies.
Define your schema. LatticeQL handles validation, authorization, cost control, pagination, and caching — in pure Go or TypeScript.
Built for production from day one
Type Safety
Schema-validated queries catch errors before execution
Role-Aware Queries
One endpoint, same query — admins see everything, viewers see only their data. Policies scope results and strip fields per role automatically.
Cost Control
Query cost estimation and admission control prevent expensive queries
TypeScript Codegen
Generated clients, hooks, and builders from your schema
Same endpoint. Same query. Different results per role.
LatticeQL's policy engine sits in the request pipeline — not bolted on after. Admins, users, and viewers all query /query with the same payload. The policy layer injects filters, strips sensitive fields, and scopes results per role — all before your adapter ever executes.
POST /query
{
"from": "users",
"select": [
{ "name": "name" },
{ "name": "email" },
{ "name": "role" }
]
}{
"data": [
{ "name": "Ada",
"email": "ada@acme.io",
"role": "admin" },
{ "name": "Bob",
"email": "bob@other.co",
"role": "viewer" }
]
}All users, all fields
{
"data": [
{ "name": "Ada",
"role": "admin" }
]
}Scoped rows, email field gone
No separate admin API. No role-checking middleware. No duplicated query logic. LatticeQL complements your database's RLS by enforcing policy where role semantics, tenant context, and field-level sensitivity actually live — at the application layer.
Schema in, API out
Define entities in FSDL. Query them with a typed JSON protocol.
entity users {
id: ID!
name: String
email: String @sensitive
orders: [orders] @relation(remote: user_id)
}{
"from": "users",
"select": [
{ "name": "name" },
{ "name": "orders", "include": [
{ "name": "total" }
] }
],
"limit": 10
}Get early access
LatticeQL is in private beta. Join the waitlist and be the first to know when we open up.