NetPulse watches over OpenWrt routers, maps your topology, scores your network health and alerts you, all from a single self-hosted binary. Nothing leaves your LAN.
NetPulse follows the three principles of the Cloudless Club: digital sovereignty, free forever, and by people, not companies. They are shared by every app in the club and live in a single place.
Meet the clubNo Docker, no accounts, no endless wizards. Three steps and your network starts talking.
A single static Go binary with the web app embedded. Runs as a sandboxed systemd service on any Linux box (x86_64, arm64, armv7) - or on the OpenWrt router itself.
One-time pairing token and a native .ipk agent (procd, UCI, watchdog). Agentless works too: strictly read-only SSH polling.
An installable PWA for phone and desktop, live over SSE every 5 s. Multi-user with admin/viewer roles and per-user language.
Keep scrolling. These are the real widgets, fed with the demo dataset, the same numbers you get when you run NetPulse in demo mode.
The health score condenses latency, loss, uptime and temperature into 0-100. Green means calm. It updates every 5 seconds over SSE.
Live WAN throughput against your contracted plan, with 24-hour averages and totals. No sampling tricks: what you see is what crosses the wire.
Built live from the bridge FDB (and LLDP when available): wired and wireless clients, inferred switches, and WireGuard tunnels drawn peer to Internet.
Per-router CPU, memory, temperature and uptime. Four routers here: one GL.iNet Flint 2 gateway and three second-hand Xiaomi AX6 access points.
DNS queries, blocked share and top blocked domains, plus which clients use it. Your ad-blocking, visible next to everything else.
Temperature spikes, new devices, firmware available, WireGuard handshakes, pushed to the bell and, with Web Push, to your phone.
A native OpenWrt .ipk package with a procd init, UCI configuration and a watchdog. Installed with opkg, it lives on every router watching WiFi events in real time.
Monitoring is read-only: it watches your network and does not touch it. Anything that writes (reservations, blocks, orchestration, firmware) is explicit and covered by rollback.
Inferred from bridge FDB + LLDP. Wired and wireless clients, managed and inferred switches, hypervisors with nested containers.
Every client classified by hostname patterns + OUI, with band, signal, first-seen and the router it talks to.
Peers, last handshakes and per-peer transfer, with tunnels drawn on the map.
Query stats, blocked share and top blocked domains, side by side with your network.
Six categories with per-category urgency. Bell feed plus native Web Push (VAPID).
bcrypt passwords, admin and viewer roles, per-user language. Share the view without handing over the keys.
DEMO_MODE=1 gives you a full sample network of 65 devices, no routers required. Try before you install.
Optional sidecar that polls TCP latency per router, with its own long-term time series.
The agent ships as a .ipk package installed with opkg. procd init, UCI configuration, a watchdog and iw events: a first-class OpenWrt citizen running on your routers at ~12 MB RSS.
DAWN signal matrix, 802.11r status per SSID, channel utilization and a persistent roaming events feed (30 days).
Install it on your phone or desktop: live over SSE, native Web Push and light/dark themes.
luci-app-netpulse brings agent status into OpenWrt’s own interface: procd, UCI, logs and restart.
Checks for new releases every 24 h and applies them with an atomic swap. No intervention needed.
No spare box? The server can run on the OpenWrt router itself, with UCI config and TLS pinning.
Per-radio Wi-Fi spectrum with a congestion score for every channel. It reads the air and advises: it never writes to your routers.
Embedded read-only MCP server: fleet, devices, alerts and topology, queryable from your AI assistant with an API token.
Published by one person, built like a product.
Zabbix, LibreNMS and PRTG are NMS suites for enterprise infrastructure. NetPulse is a pocket NOC built for OpenWrt home networks.
| NetPulse | Zabbix | LibreNMS | PRTG | |
|---|---|---|---|---|
| Auto-discovered topology (FDB/LLDP) | ✓ | ~ | ✓ | ~ |
| Native OpenWrt agent (.ipk, UCI, procd) | ✓ | - | - | - |
| WiFi & roaming events (802.11r, DAWN) | ✓ | - | ~ | - |
| Network health score 0-100 | ✓ | - | - | - |
| Live mobile PWA (SSE, 5 s) | ✓ | - | ~ | ~ |
| Native push, no third parties | ✓ | - | ~ | ~ |
| Runs on 512 MB RAM or on the router itself | ✓ | - | - | - |
| Installs in ≈5 minutes | ✓ | - | - | ~ |
| Free, no premium tier | ✓ | ✓ | ✓ | ~ |
| Multi-vendor breadth (SNMP, thousands of MIBs) | ~ | ✓ | ✓ | ✓ |
| Enterprise scale (thousands of nodes) | - | ✓ | ✓ | ✓ |
NMS suites win on breadth and scale; NetPulse wins on OpenWrt focus, simplicity and home WiFi. Pick what fits your network.
NetPulse screenshots in demo mode, in the theme you pick. One per menu.
NetPulse is free software (AGPL-3.0). The code is the whole product: there is no premium tier waiting behind a paywall.
If it serves you, a star on GitHub is the best way to support its development.
A single static Go binary with the web app embedded, running as a sandboxed systemd service. No Docker needed: it monitors a network; it doesn’t need a container to do it.
curl -fsSL https://raw.githubusercontent.com/gnacho/netpulse/main/install.sh | sh
The installer is plain, readable shell: inspect it first.
Updates take care of themselves: the built-in auto-updater checks every 24 h and applies new versions with an atomic swap. You can still re-run the installer or uninstall with sh install.sh --uninstall.
NetPulse does not need a dedicated machine: the full server, not just the agent, runs on the OpenWrt router itself as a native package, with UCI config and self-signed TLS with SPKI pinning. See the on-box mode.
The server generates its own ed25519 key pair and shows the public key in Settings. Authorize it on each router (/etc/dropbear/authorized_keys). The gateway auto-detects on first boot via LAN discovery; the rest you add from Settings. Polling is strictly read-only.
Install the agent directly on each OpenWrt router. It collects WiFi events, pushes data over SSE, and reports back to the server.
opkg install netpulse-agent
NetPulse is a personal project, built for my own network and published as free software (AGPL-3.0). It is and will always be free and community-driven. I work on it in my spare time: many ideas, little time, and it evolves following my own needs first.
If you like the project, the best way to help it grow is a star on GitHub and sharing it with others.
Star it on GitHubHonest scope note: so far it has only been tested on my own hardware, a GL.iNet Flint 2 gateway and three Xiaomi AX6 access points on OpenWrt, plus WireGuard and AdGuard Home. Other OpenWrt devices should work, but yours would be the first to tell me.
The agent installs as a native .ipk package on OpenWrt (opkg install netpulse-agent). It ships with procd init, UCI config, a watchdog, and iw event listeners so WiFi changes appear in <3 seconds. Runs on the router itself, ~12 MB RSS.
No. It is free software (AGPL-3.0), with no premium tier and no plans. If you want to support it, a star on GitHub helps.
OpenWrt and GL.iNet. Developed and tested with a GL.iNet Flint 2 and three second-hand Xiaomi AX6.
No. It runs on a box inside your LAN, with no telemetry. The only outbound connection is optional: checking for updates.
Polling only reads. Actions that write (reserve an IP, block a device, orchestrate services, flash firmware) are explicit, admin-triggered, and covered by a snapshot with automatic rollback.
One line (curl | sh) installs the binary as a systemd service. The agent is an .ipk package (opkg). Updates arrive via the built-in auto-updater or by re-running the installer.
Yes: the public demo is live, and DEMO_MODE=1 spins up a 67-device sample network on your own machine.
NetPulse was not built to be published. I started it to understand what was happening on my own network, with my own routers, without depending on anyone. And I have used it every day for a long time: it is my unified tool to check that everything is still in order. I develop it in my spare time, between work and family.
Over time, and consistently with the principles I believe in, I decided to make it free and share it with the community. The project grows richer through user contributions and use, thank you for using it and for sending suggestions to keep improving it. And if you use it, a star on GitHub would help a lot.