Skip to content

v0.16.0

Choose a tag to compare

@github-actions github-actions released this 26 May 15:23
· 48 commits to master since this release

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]. CONCURRENTLY performs 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 ONLY rejects 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") = ?, and a + b matching an index on b + a all hit the index.
  • CREATE INDEX CONCURRENTLY - non-blocking pre-scan under a ReadTxn so 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.
  • ARRAY type - Value::Array with recursive, element-wise compare. Order-preserving wire encoding.
  • Native @?_tz / @@_tz operators - tz-aware variants of @? / @@. Custom CitadelDialect extends PostgreSqlDialect and stitches the tokens into real composite operators via parse_infix.
  • FTS gaps closed - strip(tsvector), tsvector || tsvector concat, 3-arg setweight(tsvector, char, text[]) selective form.
  • System catalog - information_schema.triggers, pg_matviews. SHOW TRIGGERS [ON table] and SHOW MATERIALIZED VIEWS shorthands for the corresponding catalog queries.
  • Schema version bump 11 → 12 (Value::Array discriminant, IndexDef expression-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-cli
npm install @citadeldb/wasm