# Changelog

All notable changes to this project are documented here.

## 0.3.0 - 2026-07-27

- Added configurable `read_ahead: false` support for LMDB's `MDB_NORDAHEAD`
  performance hint, including compatibility checks and benchmark reporting.
- Added opt-in versioned value codecs with transparent CRUD/scans/batches,
  deterministic CAS, explicit raw migration access, and a safe Erlang-term codec.
- Added an opt-in supervised BatchWriter with bounded FIFO group commits,
  producer-side codec encoding, overload control, and separate flush/sync barriers.
- Added monitored commit workers with exact waiter notification, conservative
  unknown-outcome termination, no automatic retry, and graceful drain/stop.
- Added cross-BEAM BatchWriter/codec/read-ahead/durability validation and
  BatchWriter benchmark workloads with queue high-water and trigger metrics.

## 0.2.0 - 2026-07-27

- Added per-environment `:sync`, `:no_meta_sync`, and `:no_sync` durability
  modes, plus `LeanLmdb.sync/1` for explicit forced checkpoints.
- Added opt-in experimental `fixed_map: true` support for `MDB_FIXEDMAP` while
  continuing to reject `WRITE_MAP`, `MAP_ASYNC`, and `NO_LOCK`.
- Added comprehensive configurable Benchee workloads with JSON and interactive
  HTML reports.

## 0.1.0 - 2026-07-27

Initial release.

- Shared, canonical-path LMDB environments and immutable named-database handles.
- Raw binary CRUD with stable missing/error results.
- Atomic cross-database batches and compare-and-swap conflict results.
- Bounded prefix/range scans with opaque process-local continuation tokens.
- Multi-BEAM coordination and stale-reader diagnostics.
- RustlerPrecompiled bootstrap for seven NIF 2.16 targets, with checksummed
  download-by-default installation and packaged Rust source fallback.
- Source fallback retains Rustler/heed test-support builds, ExDoc API
  documentation, and an offline release QA gate.
- Manual-only, draft-first release automation validated and published all seven
  archives at the `v0.1.0` GitHub release; the package pins their SHA-256 values
  in `checksum-Elixir.LeanLmdb.Native.exs`.

Known constraints: LMDB permits one writer per environment; map growth is not
automatic; scans do not retain a cross-page snapshot; values are copied rather
than exposed zero-copy; only local filesystems are supported; Windows is limited
to the x86-64 precompiled target; NIF hot upgrade with live resources is
unsupported.
