[2.0.0] Major Release: Universal Snapshot Engine, Btrfs & Snapper Support, Sub-Dataset Boundaries & Strict Type Safety
[2.0.0] - 2026-08-28
Major Release: Universal Snapshot Engine, Btrfs & Snapper Support, Sub-Dataset Boundaries & Strict Type Safety
Version 2.0.0 marks the evolution of ZFS Snapshot Explorer into the Universal Snapshot Explorer (USE). This release introduces a modular, pluggable multi-filesystem engine capable of browsing OpenZFS, Btrfs (including Snapper layouts), and POSIX snapshot directories with full type safety, comprehensive integration testing, and automatic mountpoint boundary discovery.
🚀 Highlights & New Features
-
🗂️ Universal Multi-Filesystem Engine:
- Introduced the
FilesystemProviderinterface andProviderRegistryallowing modular support for any snapshot-capable filesystem. - Added Btrfs & Snapper Support (
BtrfsProvider):- Automatically discovers active Btrfs subvolumes and
.snapshotshierarchies. - Parses Snapper XML metadata (
info.xml) to extract exact snapshot descriptions, user context, and timestamps. - Dynamically resolves snapshot physical paths (
.snapshots/<id>/snapshot).
- Automatically discovers active Btrfs subvolumes and
- Added OpenZFS Provider (
ZfsProvider):- Native ZFS CLI integration via
zfs list -t snapshotfor Unix epoch timestamps and dataset autodiscovery. - Zero-dependency filesystem fallback mode for unprivileged containers.
- Native ZFS CLI integration via
- Added Generic Provider (
GenericProvider):- Fallback provider supporting NFS, CIFS/SMB, and standard POSIX mounts.
- Introduced the
-
🌐 Smarter Mount & Boundary Detection:
- Integrated
/proc/mountsparsing (MountsManager,MountInfo) to identify nested filesystem boundaries and network mounts. - Per-Dataset Snapshot Timelines: Directories that represent independent datasets or mount boundaries (e.g.
/rootor/data/backups) now render their own dedicated snapshot timeline bars in folder rows and breadcrumbs, rather than incorrectly inheriting the parent dataset's timeline.
- Integrated
-
📂 Dynamic Relative UID/GID Mapping:
- Relative
user_mapandgroup_mappaths (e.g.etc/passwd) are now dynamically resolved from the currently active snapshot and cached per snapshot, accurately reflecting historical users and groups.
- Relative
🛠️ Architecture & Under the Hood
- Python 3.14 Future Annotations & Protocol Modernization:
- Enforced
from __future__ import annotationsacross all 22 source modules. - Completely eliminated dynamic
getattr(...)calls in favor of typedRootFolderProtocolproperties and methods.
- Enforced
- Strict Type Checking with
basedpyright:- Entire codebase runs at
0 errors, 0 warnings, 0 notesunder strictbasedpyrightanalysis.
- Entire codebase runs at
- FastAPI Integration Test Suite:
- 38 comprehensive unit & integration tests covering routing, error handling, ZFS/Btrfs parsing, mount discovery, permissions, and streaming.
- Reached 74% total test code coverage.
- GitHub Actions CI/CD Pipeline:
- Added
.github/workflows/ci.ymlrunningruff,basedpyright, andcoveragechecks on Python 3.14.
- Added
⚠️ Breaking Changes & Migration Guide
- Package & CLI Rename:
- Python package renamed from
goeddel.zfs_snapshot_explorertogoeddel.use. - Executable command renamed from
zfssetouse(orsnapshot-explorer). - To run locally:
uv run use --config-file config.yaml.
- Python package renamed from
- Docker Image Name:
- Published to
ghcr.io/nicolasgoeddel/universal-snapshot-explorer:latest.
- Published to
- Configuration Enhancements:
config.yamlnow supportsbtrfs:global auto-discovery blocks alongsidezfs:.- Manual roots support explicit
filesystem_type: zfs | btrfs | generic.