v0.16.0
Citadel v0.16.0
Encrypted-first embedded database engine that outperforms unencrypted SQLite.
New features
- Triggers -
CREATE TRIGGER name {BEFORE|AFTER|INSTEAD OF} {INSERT|UPDATE [OF cols]|DELETE} ON table FOR EACH {ROW|STATEMENT} [REFERENCING NEW TABLE AS new_t OLD TABLE AS old_t] [WHEN (expr)] BEGIN ... END. INSTEAD OF triggers make views writable. Transition tables work as virtual tables inside trigger bodies.ALTER TABLE … DISABLE/ENABLE TRIGGER [name|ALL]. PG-faithful alphabetical firing order. Recursion depth capped at 32. - Materialized views -
CREATE MATERIALIZED VIEW name AS SELECT …,REFRESH MATERIALIZED VIEW [CONCURRENTLY] name,DROP MATERIALIZED VIEW [CASCADE].CONCURRENTLYperforms a diff-merge (DELETE removed rows, UPDATE changed rows, INSERT new rows) instead of TRUNCATE+repopulate — significantly faster when most rows are unchanged. - BEGIN READ ONLY -
BEGIN READ ONLYrejects mutating statements (INSERT/UPDATE/DELETE/DDL error out with a clear message), so application code can declare read-only intent and the engine enforces it. - TEMP tables -
CREATE TEMP TABLE …lives in a per-connection in-memory database with full DDL/DML/index/constraint/trigger parity. Dropped automatically on disconnect. - Expression indexes -
CREATE INDEX ON t (LOWER(email)). Symbolic-equivalence matching:LOWER(t.email) = ?,lower("email") = ?, anda + bmatching an index onb + aall hit the index. CREATE INDEX CONCURRENTLY- non-blocking pre-scan under aReadTxnso writers proceed during the long scan; a commit-generation check triggers a re-scan only if a writer committed between the snapshot and the merge.ANY/ALL- quantified comparisons with three-valued NULL logic on subqueries, array literals, and column values of array type.ARRAYtype -Value::Arraywith recursive, element-wise compare. Order-preserving wire encoding.- Native
@?_tz/@@_tzoperators - tz-aware variants of@?/@@. CustomCitadelDialectextendsPostgreSqlDialectand stitches the tokens into real composite operators viaparse_infix. - FTS gaps closed -
strip(tsvector),tsvector || tsvectorconcat, 3-argsetweight(tsvector, char, text[])selective form. - System catalog -
information_schema.triggers,pg_matviews.SHOW TRIGGERS [ON table]andSHOW MATERIALIZED VIEWSshorthands for the corresponding catalog queries. - Schema version bump 11 → 12 (
Value::Arraydiscriminant,IndexDefexpression-key shape). Forward-only.
Downloads
| Platform | CLI | FFI |
|---|---|---|
| Linux x86_64 | citadel-v0.16.0-x86_64-unknown-linux-musl.tar.gz |
citadel-ffi-v0.16.0-x86_64-unknown-linux-gnu.tar.gz |
| Linux aarch64 | citadel-v0.16.0-aarch64-unknown-linux-gnu.tar.gz |
citadel-ffi-v0.16.0-aarch64-unknown-linux-gnu.tar.gz |
| macOS x86_64 | citadel-v0.16.0-x86_64-apple-darwin.tar.gz |
citadel-ffi-v0.16.0-x86_64-apple-darwin.tar.gz |
| macOS aarch64 | citadel-v0.16.0-aarch64-apple-darwin.tar.gz |
citadel-ffi-v0.16.0-aarch64-apple-darwin.tar.gz |
| Windows x86_64 | citadel-v0.16.0-x86_64-pc-windows-msvc.zip |
citadel-ffi-v0.16.0-x86_64-pc-windows-msvc.zip |
FIPS variants are prefixed with citadel-fips- / citadel-ffi-fips-.
All archives include SHA256 checksums.
Install
cargo install citadeldb-clinpm install @citadeldb/wasm