Releases: yandexru45/netshift
0.8.9
0.8.9 (Tested on real hardware)
• "Outdated" version check fixed - the update card no longer lies
Some servers return the GitHub release info as a single minified line, and the
old parser then read the release URL instead of the version number - so the UI
always said "outdated", "update" failed, and even a clean reinstall didn't
help. The latest version is now parsed robustly (jq), regardless of response
format. This fixes both the version badge and the self-update.
✅ tested on real hardware - 0.8.x now correctly reports "latest"
• Universal subscription grouping - not just by country
The "Group by countries" toggle is now a "Subscription grouping" mode:
Off / By country flag / By name prefix. "By name prefix" groups proxies into
URLTest groups by the first N characters of their name (N is configurable,
default 2), so any naming scheme can be clustered, not only flag-emoji ones.
✅ tested on real hardware - per-prefix URLTest groups built, config valid
• gzip subscription bodies are now handled
Some panels return a gzip-compressed body. NetShift used to parse the binary
as text, so every node was skipped with "No subscription User-Agent candidate
produced valid outbounds". The body is now transparently decompressed before
parsing; a truly binary/undecodable body is rejected with a clear message
instead of silently failing.
✅ tested on real hardware - gzip feed decompressed and parsed
0.8.8
0.8.8 (Tested on real hardware)
• Update from the web UI now actually upgrades the package
On opkg routers (OpenWrt 24.10 and older) the in-app update could report
"updated" while installing nothing - the package manager refused to
"downgrade" because of the old "v"-prefixed version string and returned
success anyway. The installer now forces a reinstall AND verifies the
installed version after the install: if it didn't really change, the update
reports an honest error instead of a false "success". Configuration is kept.
✅ tested on real hardware - 0.8.6 -> 0.8.7 really installs on both opkg (24.10) and apk (25.12)
• Same fix applied to the README install.sh script
Re-running the install command on an older build now upgrades NetShift
correctly instead of finishing without doing anything.
• Xray JSON subscriptions download again
For panels that serve different config formats depending on the client,
NetShift now sends correct (versioned) client User-Agents when the Xray JSON
format is selected. Some panels previously rejected the request, so NetShift
fell back to a format missing certain protocols (xhttp/hysteria2).
0.8.7
0.8.7 (Tested on real hardware)
• Critical routing fix - adding a second connection section no longer breaks the internet
In 0.8.6 any extra section (or even a section with just a config URL) sent all
traffic to direct with i/o timeouts, DNS-over-proxy returned n/a, and sing-box
sometimes wouldn't start. sing-box's own egress was looping back through tproxy.
✅ tested on real hardware - 2 sections (incl. an unreachable one), internet + DNS work
• CPU fix - traffic no longer all forced through sing-box
In 0.8.6 every flow was pushed into sing-box, so on weak routers torrents / 4K
video pinned the process at 100% CPU even when only a few sites were proxied.
Selective marking is back (like 0.8.5): only proxied subnets/domains enter
sing-box, everything else goes direct. "All traffic via proxy" now happens
ONLY when global proxy is explicitly selected.
✅ tested on real hardware - direct traffic bypasses sing-box, no mark-all
• Settings now apply reliably - no more frozen dashboard
Changing settings repeatedly in the web UI could stop the service from
re-reading the config (dashboard "froze", no new logs). The health monitor was
holding the procd service lock; it's now detached.
✅ tested on real hardware - repeated reloads no longer hang, exactly one monitor
• Hysteria2 + xhttp supported everywhere - URL, subscription, URLTest, raw outbound
✅ Hysteria2 is now extracted from Xray-JSON subscriptions too
✅ legacy transport name "splithttp" is recognized as "xhttp"
✅ verified on a real subscription - Hysteria2 nodes extracted, duplicate servers collapsed
• Multiple subscription URLs per section - add several feeds (the "+" field);
all are downloaded and merged into one node set with duplicate servers removed
• Clear subscription cache - one button in Diagnostics wipes all subscription
caches and re-downloads them fresh (async, won't time out)
• Subscription format preference - choose which format/User-Agent to fetch first
(Auto / Xray JSON (Happ) / Sing-box) for panels that only expose certain nodes
(e.g. xhttp) under a specific client
• Reworked web UI - connection and settings forms are now tabbed cards instead of
one giant list of fields; more practical, no features lost
• Fixes
✅ core-swap backup can no longer be restored corrupted (integrity check)
✅ false "version outdated" on ipk builds is gone (dropped the "v" prefix)
✅ NetShift update check is now on-demand (button) instead of on every page load
✅ one unsupported link (tuic/wireguard/...) in a URLTest/selector list no longer
aborts the whole config - it's skipped with a warning
0.8.6
0.8.6 (IPv6, DoH blocking, Component Manager - tested on real hardware)
• IPv6 support - full routing through the tunnel (v6 tproxy, v6 DNS, v6 FakeIP, localv6 nft sets)
✅ tested on real hardware (aarch64, OpenWrt 24.10) - v6 tproxy rule installs correctly as [::1]:1603
✅ opt-in: turn it on with "Enable IPv6", off by default
• DoH blocking - stop clients on your LAN from bypassing the router's DNS over DNS-over-HTTPS
✅ blocks known DoH endpoints (IPv4 + IPv6) at the sing-box routing layer
• New tab "Component Manager" - manage NetShift and the sing-box core in one place
✅ three cards: NetShift / sing-box (stock) / sing-box (extended)
✅ installed version shown instantly, "Check update" on demand, status badge (latest / outdated / not installed)
✅ core switching moved here from Diagnostics
✅ theme-safe styling - looks right on custom LuCI themes too
• NetShift self-update - update NetShift straight from the web UI
✅ async, anti-brick: checks/heals connectivity before installing, backs up your config, never bricks the router
✅ non-interactive; Russian locale updated only if already installed
• Subscriptions by IP address (no domain) + "broken" HTTPS
✅ you can now add a subscription URL with an IP host, e.g. https://22.23.1.52:2096/sub/xxxx (used to be rejected as "Invalid URL format")
✅ new opt-in "Allow insecure TLS for subscription fetch" - works with http, https, AND IP-host panels with self-signed / mismatched certs
• Global proxy mode + DNS-over-proxy + sing-box health monitor
✅ route everything through a chosen outbound (global_proxy)
✅ send DNS through the proxy (detour)
✅ background watchdog restarts sing-box if it crashes (no duplicate monitors, with backoff)
• Fixes
✅ IPv6 tproxy rule was emitted without brackets (::1:1603) and silently lost its port - fixed to [::1]:1603, verified on real hardware
✅ extended core falsely showed "update available" to the SAME version (GitHub tag "v" prefix) - now compared correctly
✅ removed a stale "mangle output counters" diagnostic warning (a zero counter there is normal in the new routing model)
✅ stricter IPv6 address / subnet validation
Big thanks to @spgsroot for the IPv6 + DoH-blocking contribution (PR #11) 🙌
0.8.5
0.8.5 (Tested on real hardware)
• VMess protocol support (sing-box-extended)
✅ tested on real hardware - connects, sites work
• Core switching fully reworked - no more 30s timeouts, no more bricked routers
Tested:
✅ standard sing-box --> extended
✅ extended --> standard
✅ self-healing: if the swap loses connectivity, the router fixes DNS / tears down the redirect and retries - and never ends up with no core (auto-rollback on failure)
• Subscription keyword filter - include/exclude servers by name (whitelist / blacklist)
✅ case-insensitive for English AND Russian (Cyrillic)
✅ filter by emoji works too
• More subscription formats support - Xray JSON configs + automatic User-Agent fallback
• Fixes
✅ garbled text (mojibake) in logs / diagnostics is gone
✅ fixed a subscription cache dead-loop
✅ fixed VMess key validation (keys with a #name suffix)
0.8.3
0.8.3 (Tested on real hardware)
• Switching cores now works on all routers(and with low storage too)
Tested:
✅standard sing-box --> extended
✅ extended --> standard
0.8.2
0.8.2
• Hotfix sing-box extended check version
• Improved checks for successful core's installation
But switching cores will be broken. It was fixed in 0.8.3
0.8.1
0.8.1
• Improved startup speed when the client is updating a subscription
• Fixed proxy's names in dashboard, when client was loaded sub with raw keys
0.8.0
NetShift 0.8.0 First release under the NetShift name (rebranded from podkop). - Merge upstream itdoginfo/podkop - sing-box-extended core switching + xhttp client transport - Full rebrand podkop -> NetShift with automatic config migration - OpenWrt rootfs Docker smoke-test suite (CI-gated release) - Subscription fallback parser (base64 / plaintext key lists) - POSIX-clean backend; self-references point to yandexru45/netshift
0.7.32
Улучшить диагностику кеша подписок