All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Add row-based training and compression without flattening input first.
- Add encoding into reusable caller-owned buffers.
- Scan dynamic training samples sequentially without changing their contents or order.
- Speed up matching for large dictionaries.
- Speed up token-pair frequency counting and reserve capacity for training tables and matcher maps.
- Speed up compression by reserving final matcher maps for the dictionary size and long-token count.
- Train on the randomly selected rows returned by partial shuffling, expanding the selection when needed to cover the sampling budget.
- Ignore bytes outside the row offsets when calculating the training budget.
0.2.0 - 2026-07-30
- Make
CompactDictionarystorage-backed, allowing validated dictionary bytes and offsets to be borrowed or shared without copying. - Separate dictionary safety validation from correctness validation, allowing bounded decoding and tokenization checks without requiring full semantic validation.
- Add
rust-analyzerto the pinned Rust toolchain.
- Remove the obsolete cross-implementation benchmark harness and standalone
TPC-H example, retaining the Rust benchmarks under
benches/.
- Ensure the Rust setup action installs the pinned toolchain without referring to a nonexistent cache step.
- Remove the vulnerable transitive
thriftdependency by upgrading the Arrow, Parquet, and TPC-H benchmark dependencies.
0.1.1 - 2026-07-17
- Use a deterministic seed in the default training configuration.
- Reject compact dictionaries containing more than 65,536 tokens, which cannot
be addressed by the
u16token type. - Add regression coverage for the 65,536-token boundary and document the dictionary size limit in the invariants and interchange format.
0.1.0 - 2026-07-14
- Add compressed-domain equality, prefix, and substring search APIs.
- Add
Column::into_rawandcode_bits_for_num_tokensfor embedders that store OnPair buffers in their own layout.
- Refactor the public API around modules,
Column/ColumnView, and validated dictionary types. - Rename the training dictionary-width knob to
MaxDictBits/Config::max_dict_bits, making it explicit that it is a dictionary-size budget; runtime code width is derived from dictionary size viaCompactDictionary::code_bits. - Bump the crate to 0.1.0 for the breaking public API changes.
0.0.4 - 2026-06-01
- add back code_offsets to compressor (#15)
- remove code boundaries (#13)
0.0.3 - 2026-05-29
- fat-table layout with scalar copy and L2-indexed fallback (#12)
- Feat/decode fat table scalar (#7)
- update changelog (#10)
0.0.2 - 2026-05-29
- automate releases with release-plz (#8)
- clean up benchmarks and decompression (#6)
- add benchmarks with onpair cpp (#5)
- refine the onpair public API
- Initial pure-Rust port of the onpair short-strings compression codec (#4).
- Benchmarks comparing against the onpair C++ reference implementation (#5).
- TPC-H and ClickBench benchmark harnesses.
- CI workflow (build, fmt, clippy, test) and Codspeed benchmark workflow (#1).
- Cleaned up benchmarks and decompression path (#6).