Lab Manager
v1.0 · MIT licensed · self-hosted

Your home lab, finally mapped.

A draggable service canvas. A 3D floor plan. A 3D rack designer. Live ping status, all backed by one JSON file you actually own.

signed installers · no telemetry · your data, your machine

lab-manager · 127.0.0.1:5180 · service map live · 30s
Lab Manager service map — 11 hosts grouped into two VLAN zones, with typed edges and live status colors

Runs on the boring stuff you already have

  • macOS Apple Silicon · Intel
  • Windows x64 MSI installer
  • Linux .deb · AppImage
  • Source Python + Node
Built for the homelab nerd

Stop juggling a wiki page, a spreadsheet, and a Visio diagram.

Six things that should already exist in the same app. Now they do.

Service map — 11 hosts, two VLAN zones, typed edges, live status
Service map

Drag your network
into existence.

Infinite canvas. Hosts, edges, notes. SSH, HTTP, RTSP, depends-on — typed connections that mean something.

3D floor plan — room with rack, desk, and chair on an isometric grid
3D Floor plan

The room, in
three dimensions.

Walls, racks, desks, cameras. Rotate, pan, zoom — or snap to top-down.

3D rack designer — wooden three-tier rack on a grid plane
Rack designer

Plywood shelves,
optional U-snap.

Wooden-rack feel. Stacked sections with per-section dimensions, drag-to-place equipment.

Inspector panel — host details, ping, port scan, WoL, DNS lookup, journal
Inspector

Port scan. WoL. DNS. Journal.

Click a host. Everything you need to poke at it, in one panel.

Live status

Pinged every 30s,
over WebSocket.

When a host blinks, the canvas blinks.

{
  "hosts": [
    {
      "name": "nas-01",
      "ip": "10.0.0.10"
    }
  ]
}
JSON

Your source
of truth.

Live, not stale

Your network, in present tense.

The backend pings every host every 30 seconds and pushes state changes over WebSocket. The canvas updates as it happens — no refresh, no polling, no "last checked 4 hours ago."

  • Green · port open, latency under 50ms.
  • Amber · slow or partial response.
  • Red · unreachable. Inspector tells you why.
  • No agents to deploy — the scan runs from wherever you launched the app.
lab-manager · ws://127.0.0.1:8000/ws streaming
Service map with live status — green, amber and red node indicators update over WebSocket
Install

Two ways to run it.

Grab the signed installer, or clone the repo and go. Same app either way.

Recommended signed

Desktop app

A native shell with a bundled Python sidecar. No Node, no Python, no Docker. Double-click and go.

  • macOS Apple Silicon
    .dmg
  • macOS Intel
    .dmg
  • Windows x64
    .msi
  • Linux amd64
    .deb / .AppImage
Get the latest release
From source for developers

Clone & run

The web app talks to a FastAPI backend over HTTP and WebSocket. Hot reload on both.

~/lab-manager
$ git clone https://github.com/joesdevlab/laika-lab-manager
$ cd lab-manager
$ make install
$ make api   # :8000  FastAPI
$ make web   # :5180  Vite + Svelte

Python ≥ 3.10 · Node ≥ 20 with pnpm · optional nmap for richer scans

Architecture

Four moving parts.
No mystery.

Standard tools, wired carefully. Read the whole thing in an afternoon.

Tauri 2 · Desktop bundle

Svelte 5 + Threlte

Frontend

A static SPA. Canvas with Svelte Flow, 3D scenes with Threlte (three.js).

canvas 3D inspector
http · ws

FastAPI sidecar

Backend

Pure-Python scanner. TCP connects, ARP cache reads, ICMP ping, UDP magic packets. No nmap required.

ping tcp arp wol

↑ shipped as a single signed installer

lab_topology.json

Persistence

One human-readable file. Atomic writes. grep it. diff it. rsync it.

read · write

Your network

Probes

Standard transports. No agents. No SNMP. Nothing leaves the machine.

scan · ping · wol

Why it stays simple

  • Two services, one bundle. No Docker, no Postgres, no Redis.
  • Persistence is a file. Backups are cp.
  • The scanner is standard library. No daemons on your hosts.
How it scans

No agents.
No SNMP.
No mystery.

Lab Manager talks to your network the same way you would — TCP connects, ARP, ping, a UDP magic packet. Pure Python, no external dependencies.

If nmap is on PATH, it's used instead for better vendor lookups and MAC discovery — but it's not required, including in the packaged desktop builds.

→ nothing leaves your machine

  • Host discovery async TCP-connect on common ports across the subnet 22 · 80 · 443 · 445 · 3389 · 8080 · 631 · 5000
  • MAC + vendor reads the OS ARP cache, parsed cross-platform arp -a
  • Port scan async TCP-connect over the ~100-port fast list mirrors nmap -F
  • Ping system ping subprocess — no admin needed icmp · 1s timeout
  • Wake-on-LAN pure-Python UDP magic packet, broadcast udp/9 · ff:ff:…
Stack

Built on tools you know.

Nothing exotic. Standard pieces, wired together carefully.

FastAPI

Python

Backend, JSON persistence, pure-Python scanner.

Svelte 5 + Vite

Frontend

Static SPA, fast hot reload, tiny runtime.

Threlte

3D

three.js wrapper powering the floor plan and rack.

Tauri 2

Desktop

Rust + system webview. No Electron, no Chromium.

PyInstaller

Bundle

Single-binary Python sidecar inside the installer.

One JSON file

State

Your topology — readable, diffable, gitignore-able.

FAQ

Quick answers.

Things people ask. If something's missing, open an issue on GitHub.

  • Does this phone home?

    No. No analytics, no telemetry, no accounts. The packaged app runs a localhost-only FastAPI sidecar. Network scans run from your machine and stay on your network.

  • Do I need nmap?

    No. The bundled scanner is pure Python — TCP-connect across the subnet plus ARP for MAC/vendor. If nmap happens to be on PATH it's used for richer results, but it's never required.

  • Where does my topology live?

    In a single JSON file at the OS's app-data path (e.g. ~/Library/Application Support/Lab Manager/ on macOS). Commit it to a private repo, sync it via Syncthing — your call.

  • Will it work on Windows / Linux?

    Yes. Signed installers ship for macOS (Apple Silicon + Intel), Windows x64, and Linux (.deb + AppImage). Cross-builds run in CI on every tagged release.

  • Can I run it headless on a server?

    Yes — clone the repo, `make install`, `make api`, `make web`. The frontend is a static SPA you can serve behind any reverse proxy. Point your browser at it from anywhere on the LAN.

  • Is this a product or a project?

    A project, MIT-licensed, built scratching my own itch. There's no SaaS, no paid tier, no roadmap deck. If you find it useful, star the repo — that's the whole business model.

Get started

Map your lab
in ten minutes.

Download the installer, run the scan, drag the hosts into place. Your network — finally something you can see.

MIT licensed · macOS · Windows · Linux · no account required