v1.1.0
Features
- Geo-aware automatic switching — the watchdog no longer just fails over to the next server in the list: it TCP-probes the subscription and moves you to the lowest-latency live server, and can switch proactively when the active server's ping stays high (default >
1000ms), not only on a full outage. It avoids servers in blocked countries (RU/BYby default) by reading Xray's owngeoip.dat, so an automatic switch can never drop you onto a Russian exit, and it keeps a short TTL blacklist of the server it just left so it can't flap back. Enabled out of the box viawatchdog_auto_start. - Passkey (WebAuthn) login — sign in with Face ID / Touch ID / a security key, passwordless and with no TOTP code, alongside the existing username + password + TOTP. Register a passkey from the dashboard while logged in; user verification is required, and it works both on your local domain and through the KeenDNS cloud port (
:8443). The implementation went through a dedicated security review. - Subscription auto-update — the panel periodically re-downloads your subscription (
subscription_refresh_interval, default 6h) to keep the server list fresh. It restarts Xray only if your active server actually changed, and routes any forced replacement through the same geo filter so a refresh can't silently move you onto a blocked-country server. - Per-server country flags — servers now show a country flag detected from their name (flag emoji / keywords), with a manual override for cryptic names; the same
auto_switch_avoid_countrieslist drives both the flag and the auto-switch safety check.
Improvements
- Lighter on the router — latency probing is now concurrency-bounded instead of spawning one goroutine per server (which could exhaust RAM on a large subscription), the Xray-status check is cached, and release builds use
-trimpath. - Infinite scroll in the server list — replaces the "show more" button, so long subscriptions load as you scroll.
- Sturdier live updates — the SSE event stream reconnects with exponential backoff instead of hammering the router every 3 seconds, and the watchdog log file is rotated so it can't grow without bound.
Bug Fixes
- Xray no longer shows "offline" while it's running — the status check matched the literal
xray runstring inbusybox psoutput, which doesn't match on routers wherepsprints the command differently, so the panel wrongly reported Xray as down. It now detects the process via/proc, independent ofpsformatting. - Refresh keeps you on your server — refreshing the subscription matched the active server by list position, so a provider reordering or removing servers could silently switch you onto a different one. The active server is now tracked by its link identity and re-found after every refresh.
Internal / Dependencies
- Adds
github.com/go-webauthn/webauthnfor passkey support. - New test suite across all packages (53 tests, race-clean) plus three rounds of adversarial code review (autopilot, passkey, and the follow-up fixes) hardening the release.
Full Changelog: v1.0.1...v1.1.0