ONE LANGUAGE · EVERY HOSTDeclarative vector search for Qdrant
Parse once, enforce policy on a typed AST, plan once, then execute over REST, gRPC, or in-process edge—from Rust, Python, Node.js, WebAssembly, or the CLI.
# Install the qql-rs CLIcurl -fsSL https://raw.githubusercontent.com/srimon12/qql-rs/main/scripts/install.sh | sh
# Save the QQL below as quickstart.qql, then run:qql execute quickstart.qql
CREATE COLLECTION docs ( dense VECTOR(384, COSINE), bm25 SPARSE);
UPSERT INTO docs VALUES { id: 1, text: 'QQL provides typed vector retrieval', category: 'qql'} USING HYBRID;
QUERY TEXT 'typed query language' FROM docsUSING HYBRID DENSE dense SPARSE bm25 FUSION RRFWHERE category = 'qql'LIMIT 5;One coherent execution stack
The language, policy model, planner, and host bindings evolve together in the qql-rs workspace.
Strict language frontend
Full-input parsing, typed statements, stable structured errors, versioned conformance fixtures, and canonical AST snapshots.
Transport-neutral planning
Collection schema and embedding preparation feed one plan IR before REST, gRPC, or edge projection.
AST-level isolation
Recursively inject trusted tenant predicates before planning, while keeping custom shard routing a separate concern.
Native and web SDKs
RustPythonNode.jsWASMCommon questions
What is QQL?
QQL is a typed, declarative query language and execution stack for Qdrant. It covers retrieval, filtering, mutations, schema operations, and policy-safe AST rewriting.
Which SDKs are available?
The qql-rs workspace ships Rust crates, native Python and Node.js bindings, a WebAssembly package, and the qql command-line tool.
How does multitenancy work?
Hosts parse untrusted QQL and inject a trusted tenant filter into the AST before planning. Custom SHARD routing is separate and can be used alongside the filter.
Does QQL replace Qdrant?
No. QQL plans operations for Qdrant and dispatches them over REST or gRPC, or evaluates the supported subset through the in-process edge backend.