| System info |
v0.0.1 |
Hostname, OS, kernel, CPU, uptime, load averages, process stats |
| Pool overview |
v0.0.1 |
Health badges, usage bars, fragmentation, dedup ratio, vdev tree |
| I/O statistics |
v0.0.1 |
Live read/write IOPS and bandwidth per pool |
| Disk health (SMART) |
v0.0.1 |
Temperature, power-on hours, reallocated/pending/uncorrectable sectors via smartctl |
| Dataset browser |
v0.0.1 |
Depth-indented collapsible tree; compression, quota, mountpoint |
| Dataset creation |
v0.0.1 |
Filesystems and volumes with all ZFS properties |
| Dataset editing |
v0.0.1 |
Update properties in place (set or inherit) |
| Dataset deletion |
v0.0.1 |
Recursive option; confirm-by-typing dialog |
| Snapshot management |
v0.0.1 |
Grouped by dataset into collapsible sections (count/size/age header); create (recursive), delete single or batch via per-group/global select |
| Prometheus metrics |
v0.0.8 |
HTTP request counters/latency, Ansible playbook counters/duration, Go runtime stats |
| Install script |
v0.0.8 |
install.sh — build, install, register service on Linux and FreeBSD |
| Live updates (SSE) |
v0.0.2 |
Server-Sent Events for pools, datasets, snapshots, I/O; falls back to REST polling |
| POSIX ACL management |
v0.0.5 |
View, add, remove entries via getfacl/setfacl; recursive apply |
| NFSv4 ACL management |
v0.0.5 |
View, add, remove entries via nfs4_getfacl/nfs4_setfacl |
| User management |
v0.0.4 |
List, create, edit, delete local Unix users; system accounts protected |
| Group management |
v0.0.4 |
List, create, edit, delete local Unix groups; system groups protected |
| Dataset mountpoint chown |
v0.0.7 |
View and set owner/group of a dataset's mountpoint |
| Software inventory |
v0.0.7 |
Versions of all runtime tools shown in Sysinfo tab |
| NFS share management |
v0.0.9 |
Enable/configure/disable NFS sharing via ZFS sharenfs property; cross-platform |
| SMB share management |
v0.1.0 |
Create/remove Samba usershares; manage Samba users; one-click Samba setup; cross-platform |
| Pool scrub management |
v0.1.2 |
Trigger scrubs, cancel running scrubs, view last scrub time/status/progress per pool |
| Pool scrub scheduling |
v0.1.2 |
Per-pool schedule via Linux zfsutils-linux (2nd Sunday monthly) or FreeBSD periodic.conf (configurable threshold) |
| Auto-snapshot scheduling |
v0.1.3 |
Manage com.sun:auto-snapshot* ZFS properties per dataset; integrates with zfs-auto-snapshot (Linux) / zfstools (FreeBSD) |
| iSCSI target management |
v0.1.4 |
Expose zvols as iSCSI targets (targetcli/LIO on Linux, ctld on FreeBSD); dialog with IQN, portal, CHAP auth, initiator ACLs |
| SMB home shares |
v0.1.5 |
Enable/configure [homes] section in smb.conf; dataset picker or custom path; per-user auto-shares |
| Time Machine shares |
v0.1.6 |
Samba vfs_fruit Time Machine backup targets; named shares backed by ZFS datasets; configurable max size and valid users |
| User mgmt extensions |
v0.1.7 |
SSH authorized key add/remove, home directory change with optional file migration, Samba password sync on edit |
| Request ID correlation |
v0.1.8 |
Per-request req_id on all log lines; reads X-Request-ID from upstream proxies (nginx, Traefik) and echoes it back on response |
| Authentication |
v0.1.9 |
Session-based login, bcrypt password, --set-password CLI, trusted proxy delegation (X-Remote-User), per-IP rate limiting |
| Network interface overview |
v0.1.10 |
Read-only view of all interfaces: state badge, MAC, MTU, IPs, link speed, RX/TX counters; Linux via /sys/class/net, FreeBSD via ifconfig -a |
| Service management |
v0.1.10 |
Start/stop/restart/enable/disable Samba, NFS, iSCSI from the Services tab; live status via SSE; systemd on Linux, rc.d on FreeBSD; op-log for all mutations |
| TLS / HTTPS |
v0.1.10 |
--tls flag; self-signed cert generation (openssl via Ansible); path loader for existing certs; ACME issuance/renewal via lego; HTTP→HTTPS redirect; cert status card with expiry countdown |
| Samba full ownership |
v0.1.10 |
dumpstore owns smb.conf entirely — rendered from Go template on every write; directories auto-created; init gate blocks sub-features until Samba is bootstrapped; FreeBSD smb4.conf created on first init; resolves #75 #77 #78 #79 #81 |
| FreeBSD-compliant paths |
v0.1.10 |
/usr/local/etc/dumpstore/ on FreeBSD, /etc/dumpstore/ on Linux — internal/platform.ConfigDir(goos) as single source of truth; usershares, TLS certs, rc.d script, Makefile, install.sh all updated |
| VM integration test suite |
v0.2.0 |
End-to-end tests (tests/integration, make test-integration) drive the deployed API in the Lima VM against real ZFS: auth, dataset/snapshot lifecycle, diff, quotas, send/recv jobs, full pool lifecycle on dedicated scratch disks. CI runs it nightly and on PRs labeled run-integration. Closes #117 |
| Release build smoke test |
v0.2.0 |
Release recipe unified into make release; release-smoke CI job cross-builds all four targets on every PR and asserts --version reports the injected ldflag. Closes #118 |
| Scope boundary (manage vs integrate) |
v0.2.0 |
Documented in CLAUDE.md + README: dumpstore manages ZFS + sharing, integrates with identity/observability/power/notifications. Planned table carries a per-row Scope verdict; #62/#52/#49 trimmed accordingly. Closes #121 |
| ZFS capability gating |
v0.2.0 |
internal/zfs.Caps() probes the installed tools (zfs rewrite recognition, draid in zpool upgrade -v feature list) instead of comparing versions; exposed as capabilities in GET /api/schema; UI hides the rewrite section (with an explanatory note) and disables draid topology options when unsupported; Sysinfo shows a ZFS card with version + capability badges. Closes #119 |
| Go ops layer |
v0.2.0 |
Single-command writes (scrub, device replace/offline/online, pool create/import/export/add/remove, quotas, snapshot create/destroy/clone) execute in-process via internal/ops — argv exec, no shell, no Python startup; same op-log/SSE contract as playbooks. 15 playbooks deleted; Ansible remains only for config-file/OS-resource writes. Closes #115 |
| SMB init status badge |
v0.1.10 |
Users & Groups tab shows green "Initialised" badge with last-applied timestamp, or red "Not initialised"; GET /api/smb/status now includes conf_mtime |
| Dev VM environment |
v0.1.11 |
make vm-linux-start/deploy and make vm-freebsd-start/deploy; Ubuntu 24.04 + FreeBSD 15 with ZFS + Ansible; default admin/admin; closes #83 |
| Dataset rename |
v0.1.11 |
Rename a dataset or volume in place; same-parent constraint; closes #21 |
| Snapshot clone |
v0.1.11 |
Create a new dataset from an existing snapshot via zfs clone; closes #22 |
| wsdd discovery hint |
v0.1.11 |
wsdd shown in Installed Software card; closes #80 |
| Password hashing (argon2id) |
v0.1.13 |
argon2id replaces bcrypt; PHC string format; OWASP parameters; breaking — run --set-password after upgrade; closes #67 |
| Snapshot send/receive |
v0.1.13 |
One-shot zfs send piped to zfs recv between local pools or to a remote host over SSH; optional incremental (-i) and --raw; runs as a background job tracked in the Jobs tab (status, runtime, cancel); SSH keys must be pre-configured; closes #26 |
| Background jobs runner |
v0.1.13 |
internal/jobs.Manager spawns long-running data-plane operations (zfs send piped into zfs recv) outside Ansible; per-job process group + 10 s SIGTERM→SIGKILL cancel; 64 KiB stdout/stderr tail; JSON record per job persisted under /var/lib/dumpstore/jobs/ (Linux) or /var/db/dumpstore/jobs/ (FreeBSD); running jobs marked interrupted after a service restart; live updates via jobs.update SSE topic; new Jobs tab |
| Native auto-snapshot |
v0.1.13 |
dumpstore executes com.sun:auto-snapshot:* snapshots itself via the built-in scheduler — replaces the zfs-auto-snapshot (Linux) / zfstools (FreeBSD) OS daemons. Property inheritance honoured correctly (closes #74). One-click takeover/release; legacy zfs-auto-snap_* naming preserved; closes #56 |
| Scheduled replication |
v0.1.13 |
Cron-scheduled zfs send → zfs recv tasks; new internal/scheduler (5-field cron, 1-min resolution) and internal/replication (JSON task store under StateDir, snapshot → hold → send → release → prune pipeline); per-run records with bounded history; manual "run now"; new Replication tab; runs surface in Jobs tab tagged replication.run; SSE topic replication.update; closes #53 |
| Pool expansion |
v0.1.14 |
Expand… per pool card — add data vdev (confirm-by-typing), cache (L2ARC), log (SLOG, optionally mirrored), or hot spare; remove cache/log/spare devices from the vdev tree; closes #57 |
| Pool lifecycle |
v0.1.14 |
Create pools (single/mirror/raidz1-3/draid1-3) with unused-device picker, ashift/compression options, confirm-by-typing; import with force option; export per pool card; closes #23 |
| Per-user quota tracking |
v0.1.14 |
Usage dialog per filesystem — zfs userspace/zfs groupspace consumption table with inline userquota@/groupquota@ set/remove; GET /api/userspace/{name}, POST /api/userquota/{name}; closes #25 |
| Snapshot diff |
v0.1.14 |
Diff button per snapshot row — zfs diff against a later snapshot or the live filesystem; color-coded change types, client-side filter, 10k entry cap; GET /api/snapshots/diff; closes #24 |
| Dataset rewrite |
v0.1.14 |
"Rewrite data…" in the dataset detail drawer — zfs rewrite with -r/-S/-C options; runs as a background job (Jobs tab); POST /api/rewrite/{name}; closes #50 |
| Frontend event delegation |
v0.2.0 |
One delegated listener per stable container dispatching on data-action; inline onclick= and all window.* handler globals removed; documented as a CLAUDE.md convention. Closes #120 |
| Datasets tab redesign |
v0.2.0 |
Per-pool sections with health/capacity header rows, usage bars, status chips, hover-revealed quick actions, and a slide-in detail drawer with grouped actions and inline property editing; part 1 of #63 |
| Snapshots tab redesign |
v0.2.0 |
Collapsible per-dataset groups with count/size/age headers, relative ages, per-group bulk select, hover-revealed actions; part 2 of #63, closes #63 |
| Drive replacement |
v0.1.14 |
Replace pool devices from the vdev tree with an unused-device picker (zpool replace); offline/online devices for maintenance; resilver progress bar + completion toast; GET /api/devices lists block devices with in-use detection (new internal/blockdev); closes #55 |
| Software card tiers |
Unreleased |
Installed Software card distinguishes required tools (ZFS, Ansible, Python) from optional ones — new "Needed for" column names the feature each optional tool unlocks; a missing required tool shows a red "missing" badge instead of grey N/A. Closes #135 |
| ZFS presence checks |
Unreleased |
Startup dependency check now verifies zfs/zpool in PATH (fail fast instead of every tab erroring); on FreeBSD a System-panel warning appears when the ZFS kernel module is not loaded (kldstat -q -m zfs). Closes #136 |
| OpenTelemetry export |
Unreleased |
Env-gated OTLP export (no-op by default): per-request trace spans with Ansible/ops child spans and background job/replication/autosnap root spans; single-producer log pipeline (journald format preserved byte-for-byte, OTLP branch adds trace_id correlation); Go runtime + HTTP metrics via OTLP alongside the unchanged Prometheus /metrics. Phases 1+2 of #49 |