A lightweight, non-JVM Elasticsearch alternative — observability, vector/RAG and joinable data on one engine, object-storage-native with stateless compute.
One engine for logs, traces, vectors and the relational data beside them — queried with VantageQL, a pipeline of stages you read left to right.
The same search, before and after
A saved Elasticsearch search and the VantageQL it becomes — the same time window, the same filters, the same full-text match and the same grouping, read top to bottom instead of nested inside out.
json
{
"query": {
"bool": {
"filter": [
{ "range": { "@timestamp": { "gte": "now-1h", "lte": "now" } } },
{ "term": { "service.name": "checkout" } }
],
"must": [
{ "match": { "message": "connection refused" } }
],
"must_not": [
{ "term": { "severity": "debug" } }
]
}
},
"aggs": {
"by_host": {
"terms": { "field": "host.name", "size": 10 }
}
},
"size": 0
}
Translated
vantageql
from "logs-checkout"
| range(-1h, now)
| where service.name == "checkout" and severity != "debug"
| search "connection refused"
| stats count() as events by host.name
| sort events desc
| limit 10
Why the difference is structural
- No feature gating on the data platform
- Vector and RAG search, AI and MCP tooling, SSO and RBAC, disaster recovery — every platform capability is on every plan. Pricing scales with usage: ingest volume, retention, query compute.
- No JVM
- A Go binary with a cache-only memory model, so compute is sized to the working set a query actually touches rather than to a heap on top of it.
- Object-storage-native
- Durability lives in object storage from the first byte and compute is stateless, so storage sized to all of your data and compute sized to your queries scale — and cost — independently.
- Real joins
- Broadcast and shuffle joins across collections in one query, so the searchable side of an application does not need a second database and a CDC pipeline kept in step beside it.