Skip to main content

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 }] }
]
}