logdb 0.6.0

Embedded, append-only, crash-recoverable, optionally tamper-proof local log database
Documentation
[package]
name = "logdb"
version = "0.6.0"
edition = "2024"
rust-version = "1.85"
description = "Embedded, append-only, crash-recoverable, optionally tamper-proof local log database"
license = "Apache-2.0"
repository = "https://github.com/lv-agent/lv-logdb"
homepage = "https://github.com/lv-agent/lv-logdb"
documentation = "https://docs.rs/logdb"
readme = "README.md"
keywords = ["log", "database", "wal", "append-only", "embedded"]
categories = ["database-implementations", "cryptography"]

# How docs.rs builds the API docs: document every optional PUBLIC feature so
# feature-gated items render, but NOT `testing` (it only re-exposes internal
# modules as #[doc(hidden)] pub for the deployed test binary).
[package.metadata.docs.rs]
features = ["hash-chain", "compression", "encryption", "remote-push", "tracing", "metrics"]

[dependencies]
thiserror = "2"
crc32c = "0.6"
sha2 = { version = "0.10", optional = true }
blake3 = { version = "1", optional = true }
libc = "0.2"
scopeguard = "1"
zstd = { version = "0.13", optional = true, default-features = false }
aes-gcm = { version = "0.10", optional = true, default-features = false, features = ["aes", "alloc"] }
getrandom = { version = "0.2", optional = true }
tracing = { version = "0.1", optional = true }
metrics = { version = "0.23", optional = true }
zeroize = { version = "1", features = ["zeroize_derive"] }

[dev-dependencies]
criterion = { version = "0.5", features = ["html_reports"] }
tempfile = "3"
proptest = "1"
rand = "0.8"
serial_test = "3"

[features]
default = []
hash-chain = ["sha2", "blake3"]
compression = ["zstd"]
encryption = ["aes-gcm", "getrandom"]
remote-push = []
# Structured logging via the `tracing` crate. Off by default (logdb is zero-extra-
# dep by default); enable for observability of segment rolls, recovery, retention,
# flush timeouts, and the best-effort drain on drop.
tracing = ["dep:tracing"]
# Quantitative metrics via the `metrics` facade crate (counters/histograms/
# gauges). Off by default; install a recorder (e.g. a Prometheus exporter) in
# the host to collect them. Pairs well with `tracing` (logs vs. metrics).
metrics = ["dep:metrics"]
# Expose internal modules (`ring`, `storage`, `pipeline`, …) as `#[doc(hidden)] pub`
# so the deployed test binary (`examples/testsuite.rs`) and the `tests/fuzz`
# integration target can exercise internals. NOT a supported public API.
testing = []

[[bench]]
name = "append_bench"
harness = false

# Exercises internal modules; only builds under the `testing` feature.
[[example]]
name = "testsuite"
required-features = ["testing"]

[[example]]
name = "encryption"
required-features = ["encryption"]

# Property test for the on-disk record format; reaches into `storage::format`.
[[test]]
name = "fuzz"
required-features = ["testing"]