Skip to content

πŸš€ 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)

dpkg -i bindizr_0.1.0-beta.5-1_amd64.deb

πŸ“Œ Installation (RHEL/CentOS/Fedora)

rpm -i bindizr-0.1.0_beta.5-1.x86_64.rpm

⚠️ 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 utoipa and 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 domain crate 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