ONQL · v1
Describe your data.
Skip the API.
Object Notation Query Language — describe your data, skip the API.
shop.orders[status = "paid"]{
id, total, placed_at,
customer{name, email},
items{product{name}, qty, price}
}
One query = a SELECT, four JOINs, an auth rule, and a JSON serializer.
Shape-first queries
Ask for the JSON you want. The query and the response share the same shape — no serializers, no mappers.
Context-aware
Same query, different rows per caller. Row-level authorization lives in the protocol file, not in your backend code.
Zero glue code
One protocol file replaces an entire BFF / API layer. Declarative JSON migrations — no CREATE TABLE, no ALTER.
Embedded + fast
Built on BadgerDB. Reverse indexes on every column, RAM buffering, single binary. Single-digit-ms queries.
Any language
Go, Python, Node, Java, C#, PHP, Ruby, Rust, C, C++ drivers. The wire format is a single-line JSON message, so rolling your own takes an hour.
Open source
Apache 2.0. No vendor, no seats, no pricing page. Run it on a VPS, a laptop, or a Raspberry Pi.
Query in. JSON out. Same shape.
You send
users{id, name, orders{total}}
You get
{
"users": [
{ "id": 1, "name": "Ada",
"orders": [{ "total": 99 }] }
]
}