Something went wrong. Try again.
A lightweight home network monitor with a live dashboard for latency, packet loss, jitter, DNS & bandwidth. Runs on Pi, Docker, or any mach…
Something went wrong. Try again.
Contributing to netmon #
Prerequisites #
No C compiler needed — the project uses modernc.org/sqlite, a pure-Go SQLite driver (CGO_ENABLED=0).
Run locally #
git clone https://github.com/decoded-cipher/netmon.git
cd netmon
make run # go run ./cmd/netmon
# or
make build && ./netmon
Dashboard: http://localhost:8080
Project structure #
cmd/netmon/ main.go — entry point, HTTP server setup
internal/
monitor/ Background workers: ping (60s) and speed test (30m)
monitor.go Monitor struct, worker goroutines, ping cycle orchestration
ping.go runPing, cross-platform output parsing, DNS measurement
speed.go measureDownload, measureUpload
network/ Cross-platform network identity detection
network.go Detect(), DefaultGateway(), SSID helpers per OS
server/ HTTP layer
handlers.go JSON API handlers
version.go Version check against GitHub releases
store/ SQLite persistence
store.go Schema, migrations, CRUD for all tables
web/ Vue 3 + Vite frontend
src/ Components, composables, and utilities
web.go embed.FS — bundles web/dist into the binary at build time
Making changes #
- Backend changes — edit files under
internal/. Runmake vetandmake buildto verify. - Frontend changes — edit files under
web/src/. Runmake devto get hot-reload (Vite proxies/api/*to the Go backend). - Adding a new metric — add a column to the
measurementstable instore.go, updateMeasurementstruct,SaveMeasurement, andGetHistory; wire it throughmonitor.go → runPingCycle(); add a chart in the Vue components.
Pull requests #
- Fork the repo and create a branch from
master - Keep changes focused — one logical change per PR
- Run
make vetbefore pushing - Describe why the change is needed in the PR description, not just what changed
Reporting issues #
Open an issue with:
- OS and Go version (
go version) - Steps to reproduce
- Relevant log output (the structured log lines from the terminal)