github SikamikanikoBG/homelab-monitor v0.35.0
v0.35.0 — Your homelab gets a front page, and a wall screen

2 hours ago

The dashboard has always been a monitor. The browser tab you leave open all day wants to be a homepage too. This release makes it both — and shortens the Overview enough that it can be.

Launchpad — the apps you actually open, pinned

The Overview's centre column now leads with your own shortcuts.

  • Pin from any container row on the Containers tab (★ — the address is pre-filled from the published port), or + Pin for anything with a URL: a box on another machine, a site, the router.
  • Group them (Media / AI / Admin, or your own labels) and drag to reorder while Edit is on. The tile itself is the edit handle there.
  • Icons are the app's real logo where the dashboard already knows it (~70 brand marks), one of 28 stroke icons from its own family, or the name's initials on a stable colour — never a mismatched sticker.
  • A tile pinned from a container carries that container's actual state as its dot — running, unhealthy, gone, or "that host is offline". A tile that names no container gets no dot at all: a green light nobody verified is worse than none.
  • Pins live on the hub (the home_shortcuts setting, GET/POST /api/shortcuts), not in your browser. Pin on the laptop, see it on the phone and on the wall screen — and it rides the existing settings backup.

Display mode — the dashboard as a wall screen

⛶ Display next to Share, or /?display=1, which is all a dedicated kiosk box needs. It drops every scrap of chrome and scales the whole board with one transform so it fits the screen exactly, with no scrolling, at any size on any monitor. Clock in the corner, cursor hides after five seconds, Esc leaves.

You choose which panels the wall shows (Launchpad / Fleet / Burn rate / Engine / Event feed / Costs — costs off by default, a long list reads badly across a room). On Chromium-based browsers it enumerates your monitors and opens full-screen on the one you pick; elsewhere it uses the current screen and says so rather than pretending.

The Overview got shorter

The compute-history chart, the containers/services/diagnostics strip and the collapsed AI workload · MCP · setup block are gone from it. Every number in them has its own tab one click away, and each was a second place to maintain the same truth. Setup & requirements moved to the System tab (the setup banner links there now), and the AI agent (MCP) card became a popover on the header's MCP pill — one click from the status that was already sitting there, instead of buried at the bottom of a page nobody scrolled.

What's left: Launchpad, Fleet, Burn rate, the Lab's Engine, the Event & Insight feed, What's costing you.

AI Models — four bugs that made a working server look broken

  1. A custom server registered for a remote box listed its models on the hub's panel — only the registry rows carried the fleet host, the live ones didn't. Every model row carries its host now, and each panel shows only its own.
  2. A custom server whose probe came back empty vanished from the tab entirely — indistinguishable from "never registered", which is exactly what made the feature feel unreliable. It now says it isn't answering, on the host it was registered for, with its address and why.
  3. Server cards were rebuilt from scratch on every 5-second poll and re-sorted into whatever order the probes answered in — tooltips died mid-hover and cards swapped places while you read them. They're keyed by name, sorted stably and patched part by part now.
  4. A remote box serving from a non-Ollama server showed "0 MB VRAM committed" under a model it was visibly running (only Ollama reports per-model VRAM, and the hub's nvidia-smi can't see another box's processes). It now shows that host's own VRAM-in-use, labelled as not attributable per model, and a model confirmed live by its /metrics says serving instead of a dash next to an empty bar.

Plus: the Installed-models list stopped dropping every hub-local ollama the on-disk registry can't reach — a second ollama container, or the only one on a non-default port, had all its models missing while the panel above showed them loaded. And no more 0,00 GB on disk when nothing reports a size.

Fixed: /api/models returned 500 on any fleet with a Windows host that had models

probe.ps1 wrapped its model array twice (return ,$out under the caller's @(…)), so a Windows host shipped [[…]] and the hub raised ValueError: dictionary update sequence element #0 has length 11; 2 is required — the whole AI Models tab sat on a spinner. The probe no longer double-wraps, and the hub unwraps a nested remote catalogue defensively so an older probe on a remote box can never take the endpoint down again.

Reported and diagnosed by @jbradf0rd (#292) — thank you.

Also in this release

  • A Clock (MHz) row in each GPU card's chip stack.
  • A live-refresh pulse next to the MCP status: it rings once on every genuine refresh of the tab you're looking at, at that tab's true rate.
  • A configurable live-refresh interval (1–10 s) in Settings → General.
  • GPU-telemetry-loss detection across every host surface, with a single host-level critical alert after two minutes — the fix for a driver auto-update that left a three-card box reading "no GPU" for a day without a red pixel anywhere.
  • Every remote host now polls on its own clock: a slow Windows probe no longer drags a fast Linux box to a ~50 s refresh.
  • The 5 s dedicated poll the GPU tab got now covers Network, Security, a remote Host tab, Containers, Services and Disk I/O too.

Pinned image: sikamikaniko123/homelab-monitor:0.35.0

Full notes: CHANGELOG.md

Don't miss a new homelab-monitor release

NewReleases is sending notifications on new releases.