Skip to main content

One query language.
Every database.

UQAL is a database-agnostic query language with a plugin architecture. Write once, run against PostgreSQL, MongoDB, Neo4j — or any database you add a module for.

mydb.orders.get_table(where active = true, fields id, name, total)

Same syntax. Whether mydb is PostgreSQL, MongoDB, or Neo4j.

One Syntax, Any Database

Learn UQAL once. The same get_table, where, and insert_row work whether your backend is PostgreSQL, MongoDB, Neo4j, or a custom module. Switch databases without rewriting queries.

Plugin Architecture

The core knows nothing about databases. Every database is a module that plugs into the grammar, type system, and executor. Adding a new database means implementing one interface — not forking the language.

Native Escape Hatch

When the abstraction is not enough, drop to native: db.sql(), db.mongo(), db.cypher(). Native queries run through a security validator that blocks destructive patterns before execution.

Using UQAL

Install the CLI, connect your database, and start querying. The User Guide covers installation, all language syntax, CLI commands, and database-specific behaviour.

Start Here →

Extending UQAL

Want to add support for a new database or contribute to the core? The Developer Guide covers the architecture, the module interface, grammar extensions, and the test compliance suite.

Architecture →