Update recommended — this beta includes a static-file security fix: php-via's static handler was scoped to the project root with no extension allowlist, so backend/**/*.php, backend/settings/settings.php, composer.json, and the entire .git/ history were served over plain HTTP. It's now scoped to frontend/ only. If you expose an instance, please update.
Highlights:
- Sankey gains an optional destination-port column — src IP → dst port → dst IP — with the port shown as a centered chip on its node (#152).
- No more reload-and-lose-state: php-via 0.12.0 context revival rebuilds a torn-down SSE context on reconnect, so a backgrounded tab keeps its active tab, dark mode, scroll, and in-progress filter text instead of hard-reloading (#151).
- Fixes: the Flows tab now honours the source selector (#155); the traffic graph's last data point no longer renders as 0 (#154); alert rules with an nfdump traffic filter now actually evaluate and can fire (#153).
- Unraid: Community Applications packaging under
deploy/unraid/— UI + nfcapd collector templates, plus an all-in-one Compose stack. :latestnow tracks the newest release, betas included — sodocker pull ghcr.io/mbolli/nfsen-ng:latestworks for pre-releases (previously stable-only), and digest-based update checks (Unraid's Docker page, Watchtower) flag each new release.
Help us test v1.0.0-beta.2 before the stable release:
curl -O https://raw.githubusercontent.com/mbolli/nfsen-ng/master/deploy/docker-compose.yml
# set image: ghcr.io/mbolli/nfsen-ng:1.0.0-beta.2 (or :latest)
# and set your nfcapd source path
docker compose up -dPlease open issues at https://github.com/mbolli/nfsen-ng/issues. The goal is a stable v1.0.0 shortly after.
Added
- Sankey diagram: optional Ports toggle inserting the destination L4 port as a middle column (src IP → dst port → dst IP), pooling all traffic per port into one node (#152)
- Unraid packaging under
deploy/unraid/: an all-in-one Compose stack (UI + nfcapd collector from the single image) plus two Community Applications templates and a Sankey-derived icon
Changed
- Docker
:latestnow tracks the newest release regardless of pre-release status;:1/:1.0stay reserved for stable,:edgestill tracksmaster - Sankey destination-port labels now sit as a centered chip on each port node instead of floating above it (#152)
- Bundled Caddy no longer serves
/frontend/*directly — everything is proxied to php-via, which serves and Brotli-compresses static assets itself; retired the customcaddy-cbrotlibuild in favour of stockcaddy:latest - Alert webhook payload now includes
title/message/body, so the webhook URL can point straight at a Gotify or Apprise endpoint (#153) - Bumped
mbolli/php-viato~0.12.0: versioned assets get long-lived immutable cache headers, vendor libs a weekly must-revalidate, and all static responses now emit ETag/Last-Modified and honour conditional GET nouislider/echartsnow load withdeferinstead of blocking the parser
Fixed
- Flows tab ignored the source selector — a single-source pick still queried every configured source (#155)
- Traffic graph's most recent point always rendered as 0, one slot behind the real latest value (#154)
- Alert rules with an nfdump traffic filter always evaluated to zero and could never fire (#153)
- Flows/Statistics/Sankey filter text could be silently cleared by an unrelated SSE re-render while typing; upgraded Datastar to v1.0.2 (#151)
- A forced reload reset the active tab to Graphs and dark mode to the system default; tab/theme/graph prefs now round-trip through localStorage, and php-via 0.12.0 context revival avoids the reload entirely (#151)
Security
withStaticDir()pointed at the project root with no extension allowlist, servingbackend/**/*.php,settings.php,composer.json, and the full.git/history over HTTP — now scoped tofrontend/only
Full Changelog: v1.0.0-beta.1...v1.0.0-beta.2