homelab control plane · MIT

The control plane for the homelab you actually run.

Inventory, topology and monitoring in one self-hosted dashboard. Edit your infrastructure as a live graph — two-axis nodes, typed edges, per-axis probes and linked runbooks.

features

Everything your homelab is, on one canvas.

Six primitives that mirror how self-hosted infrastructure actually behaves — no abstractions you have to translate back.

inventory + topology

Edit the graph directly

Create, rename, reparent and draw typed edges right on the canvas. dagre lays it out for you, every time.

create reparent typed edge
two-axis node model

Infra × software, merged

Every node is an infra type plus zero or more software attachments. Detail and monitoring slots merge across both axes.

infra
host
+
software
Proxmox VE
per-axis monitoring

One probe per axis

Infra reachability and software API checks run side by side. StatusLine picks the primary axis and switches to a pill row.

cpu34%
reachable pve api
built-in adapters

Probe anything — adding one is a file and a line

Ship with tcp, http, k8s (in-cluster), proxmox (PVE API) and system (node_exporter scrape). A new adapter is a single file plus one register call.

tcphttpk8s proxmoxsystem + register()
runbooks

Markdown, linked to nodes

In-app CodeMirror split-view editor, [[node:]] links, git sync and attachments.

## restart [[node:pve-01]]
see [[runbook:backup]]
in the app

The site is just the app, standing still.

Real screens from sorack — your homelab as a live topology graph, and a node's two-axis detail.

sorack / topology
sorack topology view — nodes and typed edges with live status
sorack / node/k8s-cluster
sorack node detail — spec, status and related runbooks
quickstart

Self-host it, open the map.

A React + Hono + Postgres app. Kubernetes manifests ship today — the full guide is in the docs.

Full guide
bash — sorack
# clone, then create the namespace + secrets
$ git clone https://github.com/sdin99/sorack
$ kubectl apply -f sorack/deploy/dev/namespace.yaml

# apply postgres + the app — migrations run on boot
$ kubectl apply -f sorack/deploy/postgres/
$ kubectl apply -f sorack/deploy/dev/
$ kubectl -n sorack port-forward svc/sorack 5173:80
 ready on http://localhost:5173