π Release: 0.1.0-beta.5¶
0.1.0-beta.4 was skipped. The version was bumped internally but never published, so this release rolls up every change since 0.1.0-beta.3.
π¦ Distribution¶
Debian (.deb) and RPM (.rpm) packages continue to be supported. Additional package formats may be added in future releases.
π Installation (Debian/Ubuntu)¶
π Installation (RHEL/CentOS/Fedora)¶
β οΈ Breaking Changes¶
- CLI commands restructured from verb-noun to noun-verb (
bindizr zone notify,bindizr record update) - nsupdate authentication moved from a single global TSIG key to reusable keys + per-zone policies
- SOA serials are now a plain monotonic counter starting at 1, no longer date-based
- Record read/update/delete API endpoints now require
zone_name - Non-UTF-8 TXT input is rejected at the API boundary (stored octets are still preserved on import/export)
- Clean installs only β there is no upgrade path from beta.3
β¨ New Features¶
- RFC 2136 dynamic updates (nsupdate) over the DNS listener, authenticated with TSIG β standalone reusable keys, per-zone policies scoped by record-name pattern and record type, and optional global keys that may update every zone
- Zone snapshots β every SOA serial keeps a snapshot: list, inspect, diff two serials, and roll a zone back (
bindizr zone snapshot list/get/diff/rollback) - Bulk record insert and zone-file import through both the API and the CLI (the CLI also accepts YAML), with
--preview/ dry-run+/-/~diffs before anything is applied - Zone export to BIND master-file text, the exact inverse of import
- Secondary sync status β
bindizr zone status <ZONE>and the matching API endpoint report how far each secondary has caught up - Helm chart (
bindizr-stack) deploying Bindizr, BIND9 secondary pods, and optional bundled MySQL/PostgreSQL, with TSIG and bindizr-ui options; published to Artifact Hub - Docker Compose stacks for MySQL and PostgreSQL deployments, defaulting to PostgreSQL
- Async apply mode that decouples writes from reload/NOTIFY, coalescing queued NOTIFYs within a configurable batch window
- Pagination and filtering on the list APIs, plus case-insensitive record search
- Serial-keyed AXFR zone cache with LRU eviction, and a single-query IXFR snapshot path
- OpenAPI documentation generated at compile time with
utoipaand published to GitHub Pages
π§Ή Fixes & Improvements¶
- Reorganized the project into a Rust workspace of six crates (
core,db,dns,service, the binary, and an external e2e suite) - Replaced hand-rolled DNS wire walkers with the
domaincrate across queries, XFR answers, nsupdate parsing, and TSIG - Serial safety: the seed serial is capped at zone creation, zone mutations are rejected once the serial reaches
i32::MAX, and the bump is atomic - Transaction correctness: zoneβrecord lock order preserved, zone updates serialized, constraint-violation races mapped, partial updates merged inside the transaction
- Error handling: fine-grained error codes with prefix-free messages and CLI hints, unified 404 for a missing zone, 413 instead of 500 for oversized bodies, and no more daemon/CLI panics
- Performance: multi-row batched bulk insert, sargable conflict lookups with a
records(zone_id, name)index, host-sized connection pools, and far fewer allocations on the write path