v1.0.0 — Stable API #1
jamesgober
announced in
Announcements
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
lsm-db v1.0.0 — Stable
The engine is done. v1.0.0 is the first stable release of
lsm-db. Thepublic API is frozen until 2.0 and the on-disk format is frozen for the
1.x series. What you build against today keeps working for the life of the 1.x
line.
This release is the close of a milestone-by-milestone build: a single-run
foundation (0.2), multi-run levels with compaction and a frozen format (0.3),
crash-safe durability (0.4), bloom-filtered reads and a feature freeze (0.5), a
block cache and a head-to-head benchmark (0.6), hostile-input hardening and the
API freeze (0.7), and an alpha → beta → RC soak (0.8 – 0.9.5). 1.0 is the
definition-of-done audit and the cut.
What is lsm-db?
A log-structured merge-tree storage engine for Rust — the write path that powers
RocksDB, LevelDB, Cassandra, and ScyllaDB, packaged as a small, audited library.
Writes land in an in-memory memtable (optionally fronted by a write-ahead log);
when it fills, it is flushed to an immutable sorted run on disk; a background
thread compacts runs to keep reads fast and space bounded. It is the storage
layer the portfolio's database crates (
txn-db, Hive DB) build on, and it standsalone as an embedded key-value store.
The 1.0 surface
The common case is four calls — no builder, no generics to name:
Tuning lives behind
LsmConfig(write-buffer size, compaction trigger, block-cachesize); grouped atomic writes behind
Batch. Two opt-in features extend theengine without changing the surface:
durability(every write hits awal-dblog before acknowledgment, replayed on open — no acknowledged write lost across a
crash) and
bloom(per-run filters let a point read skip any run that cannotcontain the key). The full reference, with a runnable example per item, is in
docs/API.md.What the 1.0 audit changed
The definition-of-done audit was not a rubber stamp — it found and fixed real
issues:
framingfeature and its unusedpack-iooptionaldependency. The flag gated no code, so shipping it into the frozen 1.0 surface
would have been dead weight that pulled a dependency for nothing. If typed
on-disk framing is implemented later, it returns as a new additive feature.
(Rust 2024 edition's floor) — where release notes had drifted to 1.87.
READMEstatus blockquote still read"pre-1.0" and listed durability and bloom filters as upcoming (both shipped in
0.4 and 0.5), and the feature tables still tagged the shipped
bloomfeature"(planned)".
No code behaviour changed; the engine is identical to the 0.9.x line.
What's frozen
docs/API.md— frozen until 2.0. No breakingchange in the 1.x series.
LSMTBL01), theMANIFEST, thebloom sidecar envelope, and the
durabilitywrite-ahead log — frozen for 1.x.A 1.0 database opens on any later 1.x release. The run format is specified in
docs/SSTABLE_FORMAT.md.Quality bar
#![forbid(unsafe_code)]— zero unsafe in the crate.#![deny(warnings)]and the full clippy restriction set, including nounwrap/expect/panic/todo/dbgin library code.loommodel checks for the read-versus-compaction swap.
assert the engine never panics or over-allocates (this caught and fixed a real
panic on a corrupt sidecar in 0.7).
BTreeMapmodel.docs/PERFORMANCE.md); a >5% regressionon a tracked metric blocks a release.
Breaking changes
From 0.9.5: the
framingfeature flag is removed. It gated no code, so noworking build depended on it; enabling it was a no-op that only pulled an unused
dependency. Everything else is unchanged.
Verification
Green on Windows x86_64 and Linux (WSL2), Rust stable and MSRV 1.85; macOS via the
CI matrix:
All green.
Installation
MSRV: Rust 1.85 (2024 edition).
Documentation
Full diff:
v0.9.5...v1.0.0.Changelog:
CHANGELOG.md.This discussion was created from the release v1.0.0 — Stable API.
Beta Was this translation helpful? Give feedback.
All reactions