Releases: YusDyr/luci-app-trafficctl
Release list
v1.8.0
What's Changed
Features
- discover devices across all LAN bridges and VLANs (53ccf1b)
Closes #13. The backend assumed a single LAN: tctl_get_lan_device()
returned one device and summary.sh/bytes.sh filtered conntrack to that
one /24, so any device on a second bridge (br-lan2, guest) or a tagged
VLAN was silently dropped — the reporter literally "can't see IP from
this interface".
Full Changelog: v1.7.1...v1.8.0
Download
| File | OpenWrt version | Install command |
|---|---|---|
luci-app-trafficctl.ipk |
21.02 — 24.10 | opkg install <file> |
luci-app-trafficctl.apk |
25.12+ | apk add --allow-untrusted <file> |
Stable URL (always points to the latest release):
wget https://github.com/YusDyr/luci-app-trafficctl/releases/latest/download/luci-app-trafficctl.ipk
wget https://github.com/YusDyr/luci-app-trafficctl/releases/latest/download/luci-app-trafficctl.apk
Other filenames (_all.ipk, _noarch.apk, versioned) are the same file.
v1.7.1
What's Changed
Bug Fixes
- clean up temp files on signal via EXIT traps (351ec4c)
trafficctl-device.sh (rdns map) and trafficctl-shape-stats.sh (mktemp
qdisc scratch) removed their /tmp scratch files only on the normal exit
path. rpcd kills a backend script that exceeds its timeout, which on a
loaded router is exactly when these run slowly — leaving the temp file
behind and slowly filling tmpfs (RAM). Add EXIT/INT/TERM traps so the
files are removed even when the script is killed mid-run. summary.sh
Performance
- stop re-scanning firewall/conntrack state per device (bab7528)
trafficctl-summary.sh rebuilt its entire view by, for every active LAN
device inside the loop, re-reading all of /proc/net/nf_conntrack and
re-dumping nft chains/tables and tc classes — work that is identical
regardless of which IP is being processed. On a router with many
devices and a large conntrack table this is dozens of heavy forks every
refresh (and the dashboard refreshes every few seconds), which users
Full Changelog: v1.7.0...v1.7.1
Download
| File | OpenWrt version | Install command |
|---|---|---|
luci-app-trafficctl.ipk |
21.02 — 24.10 | opkg install <file> |
luci-app-trafficctl.apk |
25.12+ | apk add --allow-untrusted <file> |
Stable URL (always points to the latest release):
wget https://github.com/YusDyr/luci-app-trafficctl/releases/latest/download/luci-app-trafficctl.ipk
wget https://github.com/YusDyr/luci-app-trafficctl/releases/latest/download/luci-app-trafficctl.apk
Other filenames (_all.ipk, _noarch.apk, versioned) are the same file.
v1.7.0
What's Changed
Features
- add SW/HW flow offload toggles to settings UI (54debcd)
Adds a "Flow Offload" collapsible section in the settings panel with software and hardware offload toggles. HW is disabled when SW is off. Changes take effect immediately via fw4 reload (backend viaoffload_get/offload_setrpcd methods). - batch rDNS, device speed graph, fix offload toggles (783ec0c)
- Replace per-IP rdns queue with single network.rrdns.lookup batch call: all uncached IPs resolved in one round-trip instead of 4-at-a-time sequential requests; removes resolving… stuck state.
- improve flow offload UI — show mode badge and per-toggle descriptions (a3f3271)
Replace bare "Software"/"Hardware" toggles with:- current mode badge (⊘ No offload / ◑ Software / ● Hardware) in colour
- per-toggle description explaining what each option does and its trade-offs
⚠️ warning about broken speed monitoring for hw offload placed directly below the hardware toggle instead of in a generic footnote- save status now says "Applied — firewall reloading" for clarity
- LuCI native UI, offload fixes, batch rDNS, per-device graph (f71aff9)
feat: LuCI native UI, offload fixes, batch rDNS, per-device graph
Bug Fixes
- use
--format ustarinbuild-ipk.shto prevent PaxHeader entries (7b0e717) bsdtar on macOS defaults to PAX format which embeds PaxHeader/ entries in archives. BusyBox tar on OpenWrt extracts them as literal directories/files, corrupting the install (real files missing from /usr/libexec/rpcd and /www).--format ustarforces old POSIX format with no PaxHeader support; all our paths fit within the 100-char limit. - remove bind-dig dependency, update stale docs (cb18ab3)
Replace dig with ubus network.rrdns lookup (same rpcd-mod-rrdns the LuCI frontend uses) + BusyBox nslookup fallback intrafficctl-rdns.shandtrafficctl-device.sh. The device script also gains a batch ubus call instead of N sequentialdiginvocations.
Other
- add feature-build workflow for shareable dev IPKs (972915b)
Triggers on push to feature/** branches. Builds the IPK, smoke-tests it, then creates/updates a floating pre-release tagged build- so the download URL stays stable across pushes:
…/releases/download/build-feature-luci-native-ui/luci-app-trafficctl.ipk - add APK build to feature-build workflow (00ada2f)
Split into three parallel jobs: build-ipk, build-apk (via openwrt/gh-action-sdk), and publish. APK is unsigned (no PRIVATE_KEY) since feature builds install with--allow-untrustedanyway. Both artifacts get stable download URLs under the same floating pre-release tag.
Full Changelog: v1.6.6...v1.7.0
Download
| File | OpenWrt version | Install command |
|---|---|---|
luci-app-trafficctl.ipk |
21.02 — 24.10 | opkg install <file> |
luci-app-trafficctl.apk |
25.12+ | apk add --allow-untrusted <file> |
Stable URL (always points to the latest release):
wget https://github.com/YusDyr/luci-app-trafficctl/releases/latest/download/luci-app-trafficctl.ipk
wget https://github.com/YusDyr/luci-app-trafficctl/releases/latest/download/luci-app-trafficctl.apk
Other filenames (_all.ipk, _noarch.apk, versioned) are the same file.
v1.6.6
What's Changed
Bug Fixes
- Fix feed-based install (#7) —
./scripts/feeds install -p trafficctl luci-app-trafficctlwas failing withtarget pattern contains no '%'because OpenWrt'sfind -L … -mindepth 1skips the repository-root Makefile. The package source is now in aluci-app-trafficctl/subdirectory — the standard layout used by openwrt/packages and other community feeds. - Fix
/etc/config/trafficctlclobbering onopkg --force-reinstall— runtime state files (shapes.json,telegram_known.json) were listed as conffiles, which made opkg refuse to install on a fresh device. Conffiles now contain only/etc/config/trafficctl. - Stop renaming
/etc/trafficmon/to/etc/trafficctl/in postinst — the migration code could collide with othertrafficmon-named packages on the same router. Postinst no longer touches the old directory; existing installations should migrate manually if needed.
CI hardening
- New OpenWrt SDK feed-install regression test (×3 SDK versions) reproduces the user-facing path that issue #7 was about.
- New upgrade test (×2 SDK versions) installs the previous release, marks the config, installs the new build, and asserts the marker survives.
- New dependency test (×3 versions) verifies that missing deps fail cleanly and that
opkg update/apk updateresolves them. - APK signing migrated from RSA to NIST P-256 (EC) keys — matches what
apk-tools v3actually requires. snapshot/x86-64compat job now tolerates upstreamrpcd-mod-luci/rpcd-mod-ucodepost-install hook noise that doesn't affect our package.- Full compatibility matrix is 61/61 green across OpenWrt 21.02 → snapshot × 8 architectures.
Installation
| File | OpenWrt | Install command |
|---|---|---|
luci-app-trafficctl.ipk |
21.02 – 24.10 | opkg install <file> |
luci-app-trafficctl.apk |
25.12+ | apk add --allow-untrusted <file> |
Stable URLs (always point to the latest release):
wget https://github.com/YusDyr/luci-app-trafficctl/releases/latest/download/luci-app-trafficctl.ipk
wget https://github.com/YusDyr/luci-app-trafficctl/releases/latest/download/luci-app-trafficctl.apkUpgrading from v1.5.0 / v1.6.5
opkg upgrade luci-app-trafficctl (or apk upgrade) works in place — your /etc/config/trafficctl is preserved. No feature additions vs v1.5.0; this release exists to make the feed-install path documented in the README actually work.
Full Changelog: v1.6.5...v1.6.6
v1.6.5
What's Changed
v1.6.5 is the first working build in the v1.6 line — earlier v1.6.1 – v1.6.4 attempts were broken (invalid APK format, missing assets, signing-key mismatch) and have been deleted. No new user-facing features vs v1.5.0 — this release exists to make the release-pipeline output installable again.
Bug Fixes
- APK signing key migrated from RSA to NIST P-256 (EC) —
apk-tools v3(OpenWrt 25.12) requires an EC key; the RSA key we shipped in v1.4.0 silently produced unsigned APKs that no router could install. Both the embeddedkeys/apk-signing.puband the GitHubAPK_PRIVATE_KEYsecret are now EC. - Preserve IPK across the SDK Docker step — the SDK action was wiping
dist/between IPK and APK build stages. The IPK is now staged outside the wiped tree and re-attached after. - Generic-named assets via hardlinks —
releases/latest/download/luci-app-trafficctl.{ipk,apk}reliably return the right file even when the SDK action renames the build output. status.cssis now in the package — was missing from v1.4.0 / v1.5.0 due to a copy step that only listedstatus.js.
Installation
Identical to v1.5.0 — see that release for details.
opkg install https://github.com/YusDyr/luci-app-trafficctl/releases/latest/download/luci-app-trafficctl.ipk
# or, on OpenWrt 25.12+:
apk add --allow-untrusted https://github.com/YusDyr/luci-app-trafficctl/releases/latest/download/luci-app-trafficctl.apkFull Changelog: v1.5.0...v1.6.5
v1.6.4
⚠️ BROKEN PACKAGE INSTALLATION — this release has install issues
(missing status.css, invalid APK format, or other broken artifacts).
Use v1.6.5+ instead. Artifacts have been deleted; release entry
preserved for historical context.
What's Changed
Bug Fixes
- preserve IPK files across SDK Docker step
Full Changelog: v1.6.3...v1.6.4
v1.6.3
⚠️ BROKEN PACKAGE INSTALLATION — this release has install issues
(missing status.css, invalid APK format, or other broken artifacts).
Use v1.6.5+ instead. Artifacts have been deleted; release entry
preserved for historical context.
What's Changed
Bug Fixes
- mkdir dist before collecting APK in manual-release
Full Changelog: v1.6.2...v1.6.3
v1.6.2
⚠️ BROKEN PACKAGE INSTALLATION — this release has install issues
(missing status.css, invalid APK format, or other broken artifacts).
Use v1.6.5+ instead. Artifacts have been deleted; release entry
preserved for historical context.
What's Changed
Bug Fixes
- remove duplicate luci EXTRA_FEEDS from manual-release
Full Changelog: v1.6.1...v1.6.2
v1.6.1
⚠️ BROKEN PACKAGE INSTALLATION — this release has install issues
(missing status.css, invalid APK format, or other broken artifacts).
Use v1.6.5+ instead. Artifacts have been deleted; release entry
preserved for historical context.
What's Changed
Bug Fixes
- remove NO_DEFAULT_FEEDS from manual-release on main
Other
- V=sc verbose for SDK in manual-release + asset hardlinks
Full Changelog: v1.6.0...v1.6.1
v1.5.0
What's Changed
Features
- Auto-detect software flow offload (#5) — the realtime monitor now detects whether the router is running OpenWrt's software flow offload and switches its speed-measurement strategy accordingly:
- No offload — conntrack byte counters remain accurate; we read them as before.
- Offload active — conntrack stops accounting for fast-path packets once a flow is offloaded. We instead read an nftables counter map attached at
forward priority -200(before the offload hook), which captures every packet. - The choice is re-evaluated on each refresh, so toggling flow offload in OpenWrt doesn't break the speed graph mid-session.
Installation
| File | OpenWrt | Install command |
|---|---|---|
luci-app-trafficctl.ipk |
21.02 – 24.10 | opkg install <file> |
luci-app-trafficctl.apk |
25.12+ | apk add --allow-untrusted <file> |
Stable URLs (always point to the latest release):
wget https://github.com/YusDyr/luci-app-trafficctl/releases/latest/download/luci-app-trafficctl.ipk
wget https://github.com/YusDyr/luci-app-trafficctl/releases/latest/download/luci-app-trafficctl.apkIf you're already on v1.4.0+, opkg upgrade / apk upgrade works in place.
Full Changelog: v1.4.0...v1.5.0