Features

Everything NetPulse can see

A complete list of what the app monitors, and the reasoning behind the technical choices.

Feature inventory

From the network to the interface

NetPulse reads data from your routers and shows it on one screen. Polling is read-only; anything that writes is explicit and covered by rollback.

Health panel

A 0-100 score that condenses latency, loss, uptime and temperature. Next to it, live WAN throughput against your contracted plan, average latency and connected devices.

  • Health score 0-100 with weighted calculation per router
  • WAN throughput, today peak, 24 h average and total
  • Live updates via SSE every ~5 s
Available

Live topology

Semantic map built from the bridge FDB and LLDP when available. Draws routers, switches, hypervisors, nested containers, wired and wireless clients and WireGuard tunnels. And when inference cannot know where something is plugged, pin any device to its exact router and port by hand.

  • Inference of managed and inferred switches
  • Hypervisors with nested containers visible
  • Traffic animation and link state
  • Edit mode: drag nodes and save your layout
Available

Devices

Each client automatically classified by hostname patterns and OUI, with band, signal in dBm, first-seen and the router or port it talks to.

  • Classification by type: computer, phone, IoT, camera, console...
  • Band (2.4 GHz / 5 GHz / wired) and signal
  • Online/offline status and first-seen
Available

Router fleet

Fleet-wide view of all your routers with CPU, memory, temperature, uptime, connected clients and a 24 h load sparkline. SNMP-polled managed switches are first-class citizens too, with their own traffic history and clients.

  • Card per router with role (gateway / AP / switch)
  • Pause a unit without removing it: no polling, no alerts, history kept
  • LLDP-MIB on SNMP switches: real uplinks without OpenWrt
Available

Agent and upgrades

The agent is a native OpenWrt package (.ipk and .apk, from mips to x86/64) with procd init, UCI config and a watchdog. The server installs and updates the whole fleet from the UI, and rotates tokens in place without reinstalling.

  • Install the agent from the server UI
  • Outdated agent warning and upgrade button
  • Rearm and real-time agent status
  • owut check: see if your router has a firmware upgrade
  • Firmware upgrades from the UI, vanilla OpenWrt devices only
Available

WiFi and roaming

Signal matrix between APs and clients, roaming events kept for 30 days, and tools to re-anchor sticky clients or kick them off an AP so they choose a better one.

  • Association/disassociation and roaming events
  • Re-anchor recommendation by signal
  • Steering migration from DAWN to usteer
Available

Wi-Fi channel analyzer

A real spectrum per radio: every network drawn as a bell on the frequency axis, DFS ranges shaded, plus a continuous occupancy strip. Your network, the way the air sees it.

  • Congestion score per channel (optimal, moderate, busy); click to focus it
  • Your own networks never congest a channel (MAC, SSID and dawn/usteer detection)
  • Suggests only: applying the channel stays in your hands, on your router
Available

Switch port detail

Per-port view of switches: negotiated speed, traffic, errors, link state and specific alerts like ghost port, flapping or degraded speed.

  • Time series of traffic per port
  • Alerts for ghost port, flapping and degraded link
  • Front panel of the switch
Available

WireGuard

Peer list, last handshakes, transfer per peer and tunnel drawn on the topology map, with each peer labeled by its real name from the UCI config.

  • Status of each peer and time since last handshake
  • Accumulated RX/TX per tunnel
  • Visualization of the tunnel from Internet to gateway
Available

AdGuard Home

DNS query statistics, blocked percentage, top blocked domains and which clients use the filter, all next to the rest of the network.

  • 24 h queries and blocks
  • Top blocked domains
  • Average DNS latency
Available

Alerts

Six categories with per-category urgency: temperature, available firmware, new device, WireGuard handshake, network port and roaming events. Feed in the bell and Web Push notifications.

  • Persistent feed with automatic resolution
  • Native Web Push via VAPID, no third parties
  • Action suggestions on port alerts
Available

Reports

Daily, weekly and monthly availability reports per router and per device. In development: traffic, activity, alert summary and export.

  • Availability per router and device
  • Daily, weekly and monthly views
  • CSV/JSON export planned
Partial / in development

Settings

One column with a sticky index that follows you as you scroll: users and roles, per-user language, appearance with real previews, data thresholds, routers, services and integrations, orchestration and auto-updates.

  • Users with roles and bcrypt
  • Real WAN speed test, run from the server
  • Auto-update with changelog
Available

Demo mode

DEMO_MODE=1 spins up a complete sample network with 67 devices without real routers. Useful for testing the UI before installing.

  • Canonical 67-device dataset
  • Same interface as real mode
  • Public live demo at demo.netpulse.cloudless.club
Available

LuCI app

luci-app-netpulse integrates the agent status inside the OpenWrt web interface: procd, UCI, logs, restart and a link to the main app.

  • Agent status in LuCI
  • Restart and rearm the agent
  • .ipk/.apk package in every release
Available

On-box mode

If you do not have a spare box, the server can run on the OpenWrt router itself, with UCI config, TLS pinning and local pairing.

  • Static binary for compatible routers
  • Native UCI config
  • Self-signed certificate with SPKI pinning
  • Optional HTTPS for the UI: your certs or self-signed
Available

AI assistant (MCP)

An MCP server embedded at /mcp: your AI assistant queries fleet status, devices, alerts and the topology graph over HTTP with an API token. Read-only tools on the latest poll.

  • Fleet status, per-router health, devices, WireGuard peers, AdGuard, topology and alerts
  • API tokens only (never the session cookie), rate limited
  • Every tool call is logged for audit
Available

Physical rack

Draw your 19-inch rack, place routers, switches and servers by rack unit, and let NetPulse propose the cabling from the detected topology, including router-to-router uplinks. Very early preview.

  • Racks and mounts with real rack units and 19" proportions
  • Cabling proposed from the FDB; imported cables are marked as detected
  • Off by default: enable it in Settings, Labs
Labs (experimental)

NetPulse and Home Assistant

NetPulse publishes the fleet state to an MQTT broker and Home Assistant discovers it on its own: it creates the devices and their entities without you defining anything by hand. Everything happens on your local network.

  • The whole install
  • Each router, on its own
  • Control the router from Home Assistant
Available Home Assistant
Technical decisions

Why it was built this way

NetPulse is not a marketing product: it is a personal tool built to solve real problems. These are the decisions that get the most questions.

Why OpenWrt / GL.iNet?

NetPulse was born from a home network with four routers: a GL.iNet Flint 2 as gateway and three second-hand Xiaomi AX6. OpenWrt lets you flash, inspect and control the hardware. Without that there would be no way to read the FDB, iwinfo or iw events that feed the app.

Why Go + embedded SQLite?

A single static binary with CGO disabled. No C toolchain needed on the target, updates with an atomic swap, and users, sessions and time series stored in a local SQLite with WAL. modernc.org/sqlite makes it fully static.

Why is polling read-only?

The server generates its own ed25519 key pair and you authorize the public key on each router. From there polling only reads: ubus, /proc, iwinfo, bridge fdb, wg show. Writing actions (reserve an IP, block a device, orchestrate services, flash firmware) are always explicit, admin-triggered, and applied with a snapshot and automatic rollback.

Why systemd and not Docker?

NetPulse monitors a network; it does not need a container to do it. A sandboxed systemd unit with simple service file, journald logs and automatic restart is lighter and easier to operate on a small LXC or VM.

Why PWA + SSE?

The UI is a React SPA with Vite and Tailwind that installs as a PWA. The backend pushes live events via SSE every ~5 s. No constant polling, no WebSocket: SSE is unidirectional, reconnects by itself and works well behind home proxies.

Why from DAWN to usteer?

We started with DAWN for WiFi steering because it was the most visible option in the OpenWrt community. In real networks we saw it could deny authentications in a chain, kick clients unexpectedly and keep unresolved bugs in the peer-to-peer model. usteer is the official OpenWrt daemon, with equivalent features and a more stable model. The migration to usteer is in progress and keeps the same roaming visibility.

What NetPulse is not

It is important to be honest about scope. NetPulse does not pretend to be:

  • An enterprise NMS like Zabbix, LibreNMS or PRTG. It does not scale to thousands of nodes nor support thousands of SNMP MIBs.
  • A cloud solution. There is no telemetry, centralized dashboards or native mobile apps.
  • A mass automatic configuration tool. Orchestration exists, but it is opt-in and by plan.
  • A universal router solution. It is tested on OpenWrt / GL.iNet; other firmwares would need adaptation.
Appearance
Theme