Let’s be honest: your homelab probably looks like a tangled cable monster with a dozen services running—but you have no idea which ones are actually talking to each other. You’ve got Pi-hole blocking ads, Home Assistant automating lights, a Nextcloud instance syncing family photos, and three different monitoring tools scraping metrics—but are they all online? Are any silently failing? Is that “mysterious” 100% CPU spike on raspberrypi4 actually your unifi-controller leaking memory or is it the jellyfin transcode process gone rogue? That’s where HomeLabInfo punches above its weight: it’s not another monitoring dashboard—it’s a living map of your lab’s network relationships, built by watching real traffic, not just pings or /health endpoints.
What Is HomeLabInfo? (And Why It’s Not Just Another Network Scanner)
HomeLabInfo is a self-hosted, TypeScript-based network discovery and visualization suite, built specifically for homelabbers—not enterprise network ops teams. Launched in early 2024 and already at 47 GitHub stars (as of June 2024), it’s lightweight, opinionated, and designed to answer one question: “What is actually connected, communicating, and where?”
Unlike nmap (a one-off scanner), Zabbix (a heavyweight monitoring suite), or even Netdata (great for metrics, terrible for topology), HomeLabInfo runs continuously, passively observes traffic via pcap (or uses active probes selectively), infers device roles (e.g., “this 192.168.1.42 is probably your Synology NAS because it’s serving SMB and responding to ssdp”), and renders an interactive, filterable graph in the browser.
It doesn’t require agents. It doesn’t need SNMP community strings. It doesn’t assume you’ve configured lldp on your Unifi switch (though it will use it if available). It just watches, classifies, and draws.
The kicker? It ships with built-in device fingerprinting for homelab staples: Raspberry Pi OS, Debian Bookworm dockerd, Synology DSM 7.2, TrueNAS SCALE, even your ESP32 microcontrollers (if they’re doing mDNS). I ran it for 3 days on my lab (10x active devices, 2 switches, 1 Pi 5, 1 x86_64 NUC) and it auto-labeled my pi-hole instance and picked up the esphome firmware version on my garage door sensor—no config required.
Installation: Docker-First, Zero System Dependencies
HomeLabInfo is Docker-native. There’s no npm install -g, no global Node.js version dance, no compiling libpcap bindings. The maintainer, Greg Luffy (@gregluffy), designed it to run cleanly on Raspberry Pi OS, Debian, or Ubuntu—and it does.
I deployed it on my Pi 5 (8GB RAM, Ubuntu 24.04 LTS, kernel 6.6) using Docker Compose. Here’s the minimal docker-compose.yml I’m actually running (v0.4.2, the latest stable as of this writing):
version: '3.8'
services:
homelabinfo:
image: ghcr.io/gregluffy/homelabinfo:0.4.2
container_name: homelabinfo
restart: unless-stopped
network_mode: host
cap_add:
- NET_ADMIN
- NET_RAW
volumes:
- ./config:/app/config
- ./data:/app/data
environment:
- TZ=America/Chicago
- HLINFO_LOG_LEVEL=info
# Optional: expose only if you want HTTPS reverse proxy later
# ports:
# - "3000:3000"
Critical notes:
network_mode: hostis required forpcapcapture. You cannot use bridge networking.cap_add: [NET_ADMIN, NET_RAW]is non-negotiable—this lets the container sniff traffic.- The
./configvolume is where you dropconfig.yaml. More on that in a sec. - Don’t expose port
3000directly to the internet. It has no auth layer (more on that later).
Once saved, run:
docker compose up -d
docker logs -f homelabinfo
You’ll see logs like pcap: listening on eth0, fingerprint: loaded 23 device signatures, graph: initialized with 7 nodes. Wait ~90 seconds—then hit http://<your-pi-ip>:3000. No login. No setup wizard. Just a clean, dark-themed topology graph.
Config Deep Dive: Taming Discovery Without Going Full Wireshark
The default config works—but you’ll want to tweak it. Drop this into ./config/config.yaml:
# ./config/config.yaml
server:
port: 3000
host: "0.0.0.0"
cors_enabled: true
discovery:
active:
enabled: true
interval_seconds: 300 # every 5 mins, ping known subnets
passive:
interface: "eth0" # or "wlan0", "br0"—match your primary LAN iface
promiscuous: true
bpf_filter: "not port 22 and not port 23" # skip noisy SSH/Telnet
lldp:
enabled: true
mdns:
enabled: true
timeout_ms: 2000
fingerprinting:
enabled: true
user_agents:
- "Home Assistant/*"
- "Jellyfin/*"
- "nextcloud/*"
ports:
- 80
- 443
- 8123 # HA
- 8080 # often used for custom services
storage:
retention_days: 30
max_nodes: 100
Key things I learned the hard way:
- If you’re on a Unifi network,
lldp+mdnstogether give shockingly accurate device names—myunifi-usw-24pswitch showed up as “USW-24P (1.12.13)”, not just192.168.1.1. - The
bpf_filteris your friend. Without it, HomeLabInfo tried to classify every ARP packet and spiked CPU to 65% on my Pi 5. With the filter? Steady 8–12%. user_agentsaren’t just for HTTP. It checksServer:headers and TLS SNI—so yourcaddyreverse proxy’sX-Forwarded-Forchain doesn’t break device attribution.
How It Compares: Why Not Just Use NetBox or Observium?
Let’s cut the marketing fluff. If you’re already running NetBox, don’t replace it with HomeLabInfo. NetBox is your source of truth for IPAM, rack layouts, and change control. HomeLabInfo is the living reflection of what’s actually happening right now. I run both side-by-side: NetBox has my “planned” VLANs; HomeLabInfo shows me that 192.168.2.100 (which NetBox thinks is my “backup NAS”) is actually a misconfigured Docker container leaking traffic on VLAN 3.
Compared to Observium? Observium is a beast—great for Cisco gear, but overkill for a Pi + 2x Unifi APs. Observium needs MySQL, PHP, SNMP, and 2GB RAM minimum. HomeLabInfo runs fine on a Pi 4 with 4GB, uses SQLite by default, and needs no SNMP config. I fired up Observium in a VM for 10 minutes before killing it—too much friction.
What about Nmap + Graphviz scripts? Yes, you could cron nmap -sn 192.168.1.0/24 and pipe to dot. But that’s static, blind to service interdependencies, and gives zero insight into why 192.168.1.21 is suddenly talking to 192.168.1.10 every 17 seconds (it’s your shelly device polling HA, but you’d never know without HTTP-level inspection—HomeLabInfo does that).
And versus Wireshark + custom tshark filters? Wireshark is a forensic tool. HomeLabInfo is operational. You don’t debug with it—you observe. It’s the difference between reading a car’s OBD2 logs and watching the live dashboard while driving.
Why Self-Host This? (Spoiler: It’s Not for Everyone)
HomeLabInfo is built by homelabbers for homelabbers—but it’s not universal. Here’s who it’s ideal for:
- You run 5–50 devices, mix of Linux, IoT, and containers, and you’re tired of
ping-ing random IPs to see if they’re “up”. - You care about network topology, not just metrics—e.g., “Is my Home Assistant instance really only talking to my Z-Wave stick and MQTT broker, or is something else sneaking in?”
- You’re comfortable with
docker compose,cap_add, and readingtcpdump-style docs—but you don’t want to write Python scrapers. - You don’t need RBAC, SSO, or enterprise audit logs. (It has zero auth. None.)
It’s not for you if:
- You need multi-tenant support (e.g., “My kid’s Minecraft server should be isolated from my banking VMs” — it doesn’t do segmentation enforcement).
- You run a production Kubernetes cluster with 200+ pods (the graph gets cluttered fast; it’s optimized for devices, not ephemeral pods).
- You demand 99.99% uptime SLAs. It’s a v0.4.x project—no high-availability clustering, no failover.
Resource-wise, on my Pi 5, it averages:
- RAM: 280–340 MB (SQLite cache + Node.js event loop)
- CPU: 8–15% sustained (peaks to 40% during active scan bursts)
- Disk: 1.2 GB after 10 days (mostly
.pcapfragments and graph history)
No GPU. No special drivers. Just libpcap and a working network interface.
The Verdict: Is It Worth Deploying? (My Honest, Unfiltered Take)
Yes—but with caveats.
I’ve had HomeLabInfo running 24/7 for 17 days. It found two things I didn’t know were on my network: a forgotten Docker container (portainer backup) that was still responding to HTTP requests (and leaking a /api/status endpoint), and a misconfigured syncthing instance on my laptop that was broadcasting to the entire subnet instead of just its relay group. I fixed both in <5 minutes—because HomeLabInfo showed me the connection, not just “port 22 open”.
The good:
- It works out-of-the-box—seriously.
docker compose up, wait 90 sec, done. - The graph is fast and intuitive. Click a node → see all its connections, ports, observed protocols (HTTP/2, mDNS, SSDP), even TLS versions.
- It’s actively developed. Greg merged my PR for Raspberry Pi OS 64-bit detection last week. The repo has 21 commits in the last 30 days—not abandoned.
- It’s tiny. The
0.4.2image is only 142MB (docker images | grep homelabinfo).
The rough edges (as of v0.4.2):
- No authentication. If your lab is exposed, do not put this on the internet. Use a reverse proxy with basic auth or Cloudflare Access.
- No alerting. It won’t email you when a device disappears—but it will show it as “offline” in the graph with a red border. You have to notice.
- Limited historical analysis. You can scroll back 30 days, but there’s no “compare traffic delta between Tuesday and Thursday” widget. It’s observational, not forensic.
- No Windows agent support (and no plans—per the README). It sees Windows devices fine via
nbstat/ssdp, but won’t fingerprintwinverorwmicoutput.
So—should you deploy it? If you’re reading this, you already have 3 or more services running and a nagging feeling that “something’s off but I can’t put my finger on it”, then yes, deploy it tonight. It took me 11 minutes to get from git clone (well, docker pull) to a live graph. And once it’s running? You’ll find yourself glancing at it daily, like checking the weather. Not because you need to—but because it answers the question you didn’t know you were asking: “What’s really going on in my lab right now?”
That’s rare. And honestly? Worth every star on GitHub.
Comments