-
v0.1.0-137-gc129f65 Stable
released this
2026-09-24 19:12:42 -07:00 | 121 commits to main since this releaseReorder the default rail: the machine, then its storage, then what runs on it
Co-Authored-By: Claude Opus 5 noreply@anthropic.com
Downloads
-
v0.1.0-136-gd8bf5df Stable
released this
2026-09-24 17:52:08 -07:00 | 122 commits to main since this releaseFullscreen on Safari, and a fallback where there is none
Safari on a Mac wants the webkit prefix; Safari on iOS has no fullscreen for an ordinary
element at all, only for aCo-Authored-By: Claude Opus 5 noreply@anthropic.com
Downloads
-
v0.1.0-134-gf3441ae Stable
released this
2026-09-24 17:00:57 -07:00 | 124 commits to main since this releaseThe KVM tab is per machine, and follows the machine switcher
It was a hub-side list you pointed at machines, which had it backwards. A machine has one
KVM; switch to grid and you get grid's. The address is still kept on the hub rather than on
the machine, because a KVM earns its keep exactly when that machine is down and cannot
answer for itself — so the tab reaches the device either way. Adding a second KVM for a
machine replaces the first rather than sitting beside it.The tab is no longer hub-only and now sits beside Machines in the rail.
Co-Authored-By: Claude Opus 5 noreply@anthropic.com
Downloads
-
v0.1.0-132-g823c721 Stable
released this
2026-09-24 16:43:17 -07:00 | 126 commits to main since this releaseA proxied KVM may be framed by the console that proxies it
frame-ancestors 'none' forbids framing even from the same origin, so /kvm/ paths say
'self' instead. Without this the iframe was refused before it loaded.Co-Authored-By: Claude Opus 5 noreply@anthropic.com
Downloads
-
v0.1.0-127-gdaf33a4 Stable
released this
2026-09-24 13:16:44 -07:00 | 131 commits to main since this releaseThe datasets table is a snapshot explorer, and snapshots can be deleted
Renamed Datasets to Snapshots and turned the columns around to match: how many each
dataset has and what they cost come first, the dataset's own size after. Opening one lists
its snapshots with when it was taken, when it expires — read from the TTL in its own name,
so no server call is needed — its size, and a Delete button. Deleting takes the same-named
snapshot on descendant datasets too, which is how a recursive schedule made it, and says so
before it does anything.Dropped "What would it delete?" from the schedule cards, and the endpoint behind it. Run
now says plainly that expired snapshots go at the same time, which is the whole of what the
preview was telling anyone.Co-Authored-By: Claude Opus 5 noreply@anthropic.com
Downloads
-
v0.1.0-125-g09b7558 Stable
released this
2026-09-24 13:11:53 -07:00 | 133 commits to main since this releaseSnapshot schedules are real cron jobs, written and owned by Ham Lab
A schedule is now a line in /etc/cron.d/hamlab-zfs, which Ham Lab owns and rewrites whole
whenever the schedules change; the line callshamlab zfs-snapshot <id>as the account Ham
Lab runs as, reaching zfs through sudo exactly as the daemon does. The daemon's own ticker
is gone. Snapshots are backup-shaped and should not stop because a web console is down,
being upgraded, or uninstalled — and a cron line is greppable by anyone looking at the
machine the normal way, which a schedule hidden inside a daemon is not.A cron expression is now the single description of when a schedule fires: the four common
shapes render to one, a custom schedule states it outright, and the next run is read back
with the same evaluator the Jobs tab uses on everyone else's lines. So the page, the file
and the prediction cannot disagree.Schedules gain a custom cron expression and an optional snapshot name prefix. What a run
did moves out of the policy into zfs-runs/.json beside the config, because the cron job
is a separate process and must never write state.json behind the daemon's back.The detected external job can be adopted: its schedule, retention and dataset are read out
of the cron line into a new Ham Lab schedule, ready to check rather than retype.Downloads
-
v0.1.0-123-g7d0ec5e Stable
released this
2026-09-24 13:02:31 -07:00 | 135 commits to main since this releaseSnapshot schedules are real cron jobs, written and owned by Ham Lab
A schedule is now a line in /etc/cron.d/hamlab-zfs, which Ham Lab owns and rewrites whole
whenever the schedules change; the line callshamlab zfs-snapshot <id>as the account Ham
Lab runs as, reaching zfs through sudo exactly as the daemon does. The daemon's own ticker
is gone. Snapshots are backup-shaped and should not stop because a web console is down,
being upgraded, or uninstalled — and a cron line is greppable by anyone looking at the
machine the normal way, which a schedule hidden inside a daemon is not.A cron expression is now the single description of when a schedule fires: the four common
shapes render to one, a custom schedule states it outright, and the next run is read back
with the same evaluator the Jobs tab uses on everyone else's lines. So the page, the file
and the prediction cannot disagree.Schedules gain a custom cron expression and an optional snapshot name prefix. What a run
did moves out of the policy into zfs-runs/.json beside the config, because the cron job
is a separate process and must never write state.json behind the daemon's back.The detected external job can be adopted: its schedule, retention and dataset are read out
of the cron line into a new Ham Lab schedule, ready to check rather than retype.Downloads
-
v0.1.0-118-g2e4f3a7 Stable
released this
2026-09-24 12:12:06 -07:00 | 140 commits to main since this releaseA drive in a pool says which pool, not that nothing is on it
Co-Authored-By: Claude Opus 5 noreply@anthropic.com
Downloads
-
v0.1.0-116-gbf0bdd5 Stable
released this
2026-09-23 23:16:49 -07:00 | 142 commits to main since this releaseThe disks box is this machine's own storage, not a network share
core mounts grid's tank over CIFS, and it was listed beside root and efi as though it
were a disk in the box. Filesystems whose storage is on another machine are now marked
remote — a label on the fs sensors, so the sensor stays for anyone who wants it — and the
Processes tab's disks box leaves them out.Co-Authored-By: Claude Opus 5 noreply@anthropic.com
Downloads
-
v0.1.0-115-g9bf60de Stable
released this
2026-09-23 23:04:27 -07:00 | 143 commits to main since this releaseRetire the Dashboard tab; Processes is the front page
The app repeated itself. The module list, /api/prefs/dashboard, applyPrefs and the
per-user dashboard blob are gone. Widgets stays and now says plainly that it is for
dashboards outside Ham Lab.This also closes a bug: applyPrefs set the sampling rate from intervalMs inside the
dashboard layout, and reset it to the default when that field was absent — so with
per-user layouts, one account saving a dashboard could reset the sampling rate for the
whole machine. The sampler now has one source.Co-Authored-By: Claude Opus 5 noreply@anthropic.com
Downloads