Skip to main content

Roadmap

The canonical roadmap lives at ROADMAP.md in the repo. Live status of open work is at TODOS.md (regenerated from GitHub Issues with make todos).

This page is a thin summary. Read those for the full plan.

Vision​

Be the tool homelabbers reach for when they need NUT to actually do something.

Today, getting NUT to coordinate graceful shutdown across more than one machine is a multi-day project. homelab-nut collapses that to a single command run from your laptop:

homelab-nut init # interactive: discover/declare hosts and roles
homelab-nut apply # SSH out, install + configure everything
homelab-nut status # live UPS dashboard across the fleet
homelab-nut # opens a full TUI for ongoing ops

Modeled on the tools homelabbers already love — k9s, lazygit, lazydocker, gh, k0sctl, tailscale.

Phases​

PhaseWhatMilestone
0 — FoundationIssues, labels, project board, CI policy(housekeeping)
1 — SkeletonGo module, Cobra, Bubble Tea TUI, inventory schema, init wizardv0.1 Alpha ✅
2 — SSH + first applySSH executor, nut-server role end-to-endv0.1 Alpha
3 — All roles + statusEvery role wrapped, live status dashboardv0.2 Beta
4 — Polish + distributionHomebrew tap, install.sh, asciinema, this sitev1.0 GA
5 — Promotionr/homelab launch, awesome-selfhosted, HNv1.0 GA
6 — Native portDrop bash dependency, multi-distro supportpost-v1

Architecture (committed)​

  • Language: Go (single static binary, cross-compiles to Linux/macOS/Windows ARM+x86)
  • CLI framework: Cobra
  • TUI framework: Bubble Tea + Lipgloss (Charm)
  • SSH: golang.org/x/crypto/ssh
  • Inventory: YAML homelab-nut.yaml
  • Strategy: wrap existing bash scripts via SSH in v1; progressively port to native Go in Phase 6
  • Distribution: Homebrew tap, install.sh, goreleaser (deb/rpm/tar.gz)

Non-goals​

  • Replacing NUT itself — we stand on NUT's shoulders
  • Replacing nut-webgui — it does status display well; we orchestrate setup and automation
  • Enterprise / HA cluster support
  • Windows / Mac NUT server support (clients yes, server no)
  • Building our own metrics pipeline — we emit Prometheus via the existing exporter