Skip to content

CQLite v0.18.0

The first offline tools for damaged Cassandra 5.0 SSTables, a raw SSTable view that shows the physical rows behind a read, and the move to Arrow 59 and Rust 1.95. It targets stock Cassandra 5.0 with no server-side changes. Full detail, including every limit and breaking change: release notes and the CHANGELOG.

Four offline verbs, each with JSON output and a documented exit-code contract:

  • cqlite verify now reports where the damage is: component, byte offset, compression chunk and the partitions involved (#4194).
  • cqlite sweep <data-dir> verifies every generation under a Cassandra data directory and reports each as ok, degraded, corrupt or unreadable (#4194).
  • cqlite salvage <input> --out <dir> recovers every fully decodable partition of a damaged SSTable into a fresh generation and writes a loss manifest of what could not be saved (#4196).
  • cqlite rebuild <input> --components … --out <dir> regenerates Index.db, Summary.db, Filter.db, Digest, TOC and CRC from a healthy Data.db, which it never modifies (#4197).

All four are in the packaged CLI: write-support is now a default feature (#4379). Limits: BTI locations are unresolved (#4337), salvage needs an intact partition index, and rebuild --in-place is not available yet. More verbs (explain, scrub, diff, diagnose, …) are planned for 0.19.

Query <ks>.<table>_raw_sstable_data like any table to get rows before reconciliation, one per row per SSTable generation, with each cell’s write timestamp, TTL and tombstone flag, row, partition and range deletions, and the source file and position (#4222). It matches sstabledump on all 22 spec fixtures (#4309).

Writer statistics are derived from the rows actually written, fixing a byte-parity gap with Cassandra (#4246); the CommitLog reader rejects more malformed input (#2798); each release now ships a self-contained Trino connector jar (#2869); Arrow, Parquet and Flight move to 59 (#4236).

Minimum Rust version 1.95; Arrow 59 types in cqlite-core’s arrow/parquet API; CommitLog PartitionUpdate gains a columns_read field; cqlite-cli default features include write-support. Details in the CHANGELOG.

A scan over an unreadable SSTable still returns empty rather than an error (#4159). Still open from the 0.17 field run: an unbounded count(*) through the Trino cqlite catalog can stall (#4170), scans are served by one Flight pod (#4175), timeuuid maps to varchar (#4173).

Terminal window
brew install pmcfadin/cqlite/cqlite # CLI (macOS + Linux)
cargo add cqlite-core # Rust library
pip install cqlite-py # Python
npm install @cqlite/node # Node.js