qail 0.6.1

The Universal Query Transpiler - SQL is Assembly, Compile to Safety
Documentation

🪝 QAIL — The Universal Query Transpiler

SQL is Assembly. Stop writing Assembly. Write Qail. Compile to Safety.

Crates.io npm License


What is QAIL?

QAIL is not an ORM. It is not a Query Builder.

QAIL is a Query Transpiler.

Write high-density, logic-focused queries in QAIL, and it compiles them instantly into Safe, Optimized, Raw SQL with zero runtime overhead.

-- SQL (Assembly)
SELECT id, email FROM users WHERE active = true LIMIT 10;
# QAIL
get::users:'id'email [ 'active == true, 0..10 ]

One line. Zero ceremony. Runs everywhere.


🚀 Installation

Rust / CLI

cargo install qail

Rust Library

[dependencies]
qail-core = "0.5.0"

JavaScript / Browser (WASM)

npm i qail-wasm

💡 Usage

Rust

use qail_macro::qail;

// Compile-time validated query
let sql = qail!("get::users:'id'email [ 'active == true ]");
// Returns: "SELECT id, email FROM users WHERE active = true"

JavaScript / TypeScript

import { parseAndTranspile } from 'qail-wasm';

const sql = parseAndTranspile("get::users:'id'email [ 'active == true ]");
// Returns: "SELECT id, email FROM users WHERE active = true"

📖 Quick Reference

Symbol Name Function Example
:: The Gate Action (get/set/del/add) get::
: The Link Connect table to columns users:'id
' The Label Mark a column 'email'name
'_ The Wildcard All columns users:'_
[ ] The Cage Constraints block [ 'active == true ]
== The Equal Equality check 'status == "active"
~ The Fuse Fuzzy match 'name ~ "john"
| The Split Logical OR 'a == 1 | 'b == 2
& The Bind Logical AND 'a == 1 & 'b == 2
+/- Sort Order ASC/DESC -created_at
N..M The Range Pagination 0..10
$ The Var Parameter $1
! The Unique Distinct get!::
<- The Left Left Join users<-profiles
-> The Right Inner Join users->orders

📚 Examples

Basic SELECT

get::users:'id'email [ 'active == true ]
# → SELECT id, email FROM users WHERE active = true

All Columns

get::users:'_
# → SELECT * FROM users

Sorting

get::users:'_ [ -created_at ]
# → SELECT * FROM users ORDER BY created_at DESC

Pagination

get::users:'_ [ 20..30 ]
# → SELECT * FROM users LIMIT 10 OFFSET 20

Fuzzy Search

get::users:'id'name [ 'name ~ "john" ]
# → SELECT id, name FROM users WHERE name ILIKE '%john%'

UPDATE

set::users:[ verified = true ][ 'id == $1 ]
# → UPDATE users SET verified = true WHERE id = $1

DELETE

del::users:[ 'id == $1 ]
# → DELETE FROM users WHERE id = $1

DISTINCT

get!::users:'role
# → SELECT DISTINCT role FROM users

JOINs

get::users<-profiles:'name'avatar
# → SELECT name, avatar FROM users LEFT JOIN profiles ON ...

🌐 One Language. Everywhere.

QAIL works in:

  • Rustqail-core + qail! macro (compile-time)
  • Node.jsqail-wasm (runtime)
  • Browserqail-wasm (~50KB)

Same syntax. Same validation. Any stack.


🤝 Contributing

We welcome contributions!

git clone https://github.com/qail-rs/qail.git
cd qail
cargo test

📄 License

MIT © 2025 QAIL Contributors