You write: :GET User WHERE id = 42
It becomes: PostgreSQL → SELECT * FROM "users" WHERE "id" = 42; MongoDB → db.users.find({ id: 42 }); Redis → HGETALL users:42
It's a compiler, not a wrapper. Your query becomes an AST, then translates to native commands. No runtime overhead — it generates the same query you'd write by hand.
Works for DDL too: :CREATE TABLE User WITH id:AUTO, name:STRING:NOTNULL
Becomes native CREATE TABLE for Postgres/MySQL or db.createCollection for MongoDB.
Why I built this: I run a multi-database platform and got tired of maintaining four different query syntaxes. OmniQL started as an internal tool and we're open-sourcing it.
GitHub: https://github.com/omniql-engine/omniql Docs: https://docs.omniql.com
Happy to answer questions about the compiler architecture, AST design, or how we handle the semantic gaps between SQL and NoSQL.