Releases: ZoneTree/ZoneTree
release-v1.8.8
Highlights
This release introduces ZoneTree live backup support, a major documentation refresh, and a broad modernization of the codebase for newer .NET versions.
Breaking Changes
- ZoneTree now targets
net10.0andnet9.0only. - Older .NET target frameworks have been removed to simplify maintenance and enable newer runtime and C# features.
New Features
Live Backup and Restore
Added a new ZoneTree.Backup subsystem for creating and restoring live backups.
using var backup = zoneTree.CreateLiveBackup(new LiveBackupOptions
{
Store = new LocalLiveBackupProvider("backup/app"),
Schedule = LiveBackupSchedule.Daily(
new TimeOnly(2, 0),
new TimeOnly(14, 0))
});
backup.Start();See backup docs for more: https://github.com/koculu/ZoneTree/blob/main/docs/durability/backups.md
This includes:
CreateLiveBackup(...)extension methods for local-directory and custom backup storesLiveBackupOptionsLiveBackupScheduleLocalLiveBackupProviderLiveBackupRestore- record-batch backup support for in-memory records
- scheduled backup generations
- configurable backup record compression
- configurable concurrent file transfers
Live backups can include disk segments, bottom segments, and in-memory records, with support for both live and snapshot-style in-memory collection.
Expanded Documentation
Added a new documentation structure under docs/, covering:
- getting started
- reads and writes
- iteration and range scans
- transactions
- maintenance
- WAL modes
- recovery
- backups
- compression
- disk segment tuning
- production checklist
- troubleshooting
- API overview
- building systems on ZoneTree
Improvements
- Improved operation-index documentation and clarified its role as a per-key freshness token.
- Added iterator options for including deleted records and controlling whether iterator reads contribute to the block cache.
- Replaced weak-identity locking patterns with explicit
Lockinstances throughout the core, WAL, transaction, backup, logger, and file-provider paths. - Improved analyzer compliance by replacing broad suppressions with targeted suppressions.
- Modernized argument validation with newer .NET guard APIs.
- Improved metadata serialization by relying on source-generated JSON serialization.
- Improved in-memory file stream provider synchronization and path handling.
- Improved backup-related disk segment collection and restore metadata generation.
Fixes and Reliability
- Added regression coverage for WAL maximum operation index handling.
- Added tests for stale metadata checkpoint recovery.
- Added tests for compressed WAL stream tail and incomplete-block behavior.
- Added tests for transaction rollback and incremental history behavior.
- Added tests for live backup generation and restore behavior.
- Added disk segment factory tests.
- Strengthened iterator, replication, count, transaction, and BTree concurrency test coverage.
Documentation and Cleanup
- Reworked the README and moved detailed guides into the new
docs/tree. - Removed older DocFX-style documentation files.
- Normalized formatting, indentation, BOM usage, and final newlines across source, playground, and test projects.
- Cleaned up benchmark and playground code formatting.
Upgrade Notes
Projects targeting older frameworks must move to net9.0 or newer before upgrading to this release.
Users who rely on backup or replication scenarios should review the new operation-index and backup documentation, especially around live backup generation, restore behavior, and per-key freshness semantics.
Pull Requests
- Rewrite docs by @koculu in #136
- Add live backup and restore support. by @koculu in #137
- Drop older .NET version support - improve code quality by @koculu in #138
Full Changelog: release-v1.8.7...release-v1.8.8
release-v1.8.7
What's Changed
- Fix Discord badge in README by @koculu in #134
- Rebrand ZoneTree and harden WAL, merge, opIndex, and transaction recovery by @koculu in #135
Full Changelog: release-v1.8.6...release-v1.8.7
ZoneTree vNext
This release introduces the new ZoneTree namespace and includes important reliability improvements for WAL recovery, merge operations, and optimistic transactions.
Migration
The package has been rebranded from Tenray.ZoneTree to ZoneTree.
Update your imports:
using Tenray.ZoneTree;to:
using ZoneTree;Existing databases created with the previous namespace metadata remain supported through the built-in legacy metadata migration.
Improvements
- Updated the project to target .NET 10.
- Improved compressed WAL recovery when files end with incomplete tail data.
- Improved incremental backup reliability for compressed and sync WAL modes.
- Hardened bottom segment and multipart merge behavior.
- Improved opIndex recovery semantics for WAL replay and replication scenarios.
- Improved optimistic transaction history tracking.
- Added regression tests for rare recovery, merge, and transaction edge cases.
Fixes
- Fixed partial reads in file stream recovery paths.
- Fixed compressed WAL skip behavior across tail blocks.
- Fixed persisted sparse-array metadata loading.
- Fixed cancelled multipart merge cleanup.
- Fixed transaction history stamp tracking for auto-commit writes.
- Fixed repeated writes to the same key inside one transaction.
- Fixed atomic add/update result reporting.
- Fixed a disk-segment cache release issue.
release-v1.8.6
What's Changed
- Add in-memory FileStreamProvider by @koculu in #126
- Fix cloned DiskSegmentOptions by @koculu in #127
- Bump version to 1.8.6 by @koculu in #128
- Fix KeyCacheRecord lifetime default by @koculu in #129
- Fix TTLValue equality comparison by @koculu in #130
- Fix infinite loop bug in array conversion methods by @koculu in #131
- Fix IsDroppping typo by @koculu in #132
Full Changelog: release-v1.8.5...release-v1.8.6
release-v1.8.5
What's Changed
Full Changelog: release-v1.8.4...release-v1.8.5
release-v1.8.4
What's Changed
Full Changelog: release-v1.8.3...release-v1.8.4
release-v1.8.3
What's Changed
- Add support for Software computed CRC32 by @albyrock87 in #95
- Add new methods to expose opIndexes for async replication. by @koculu in #97
- MoveMutableSegmentForward should wait until all writes to the previous mutable segment finalized. by @koculu in #100
Full Changelog: release-v1.8.2...release-v1.8.3
release-v1.8.2
What's Changed
- Provide key in IsDeleted delegate to support TTL based on keys by @koculu in #92
- Added operation index to support asynchronous replication and audits by @koculu in #94
- Set NextOpIndex after loading B+Tree to remove skipped regions on op index.
Full Changelog: release-v1.8.0...release-v1.8.2
release-v1.8.0
What's Changed
Full Changelog: release-v1.7.9...release-v1.8.0
release-v1.7.9
What's Changed
- Add contribute to the block cache option to the iterators. by @koculu in #84
- Improve type mismatch validation errors. by @koculu in #86
Full Changelog: release-v1.7.7...release-v1.7.9
release-v1.7.7
What's Changed
- 81 enhancement type validation should not fail based on the version of the assembly difference by @koculu in #82
- DestroyTree method is renamed to Drop.
Full Changelog: release-v1.7.6...release-v1.7.7