New Features
- Kill switch — When enabled (Settings), the VPN interface stays alive if the tunnel drops, blocking all
traffic until reconnection succeeds. Shows a "Traffic blocked" notification with a Disconnect button. - VPN disconnect notification — Alerts the user when the VPN disconnects unexpectedly (another VPN takes over,
or Android kills the service). Includes a one-tap Reconnect button. Not shown for user-initiated disconnects. - Compact home screen widget (1x1) — Minimal round toggle button alongside the existing 2x1 widget. Shows
color-coded state (green=connected, orange=connecting, gray=disconnected, red=error). - Ping all profiles — New "Ping All Profiles" option in the overflow menu. Measures TCP or DNS-UDP latency to
each profile's server with color-coded badges (green <300ms, orange <1000ms, red >1s). Snowflake profiles are
skipped. - Session traffic totals — Connection status strip now shows cumulative upload/download alongside live speed.
Improvements
- Widget contrast fix — 2x1 widget now uses proper text/icon colors per state (dark text on light backgrounds,
white on dark). - SlipstreamSocksBridge DNS hardening — DNS-over-TCP now always uses clean DNS (1.1.1.1) instead of the user's
resolver, preventing poisoned results from censored DNS servers. - Port release robustness — Slipstream and DNSTT bridges now verify ports are actually released after stopping,
with active polling instead of blind sleeps. Prevents "port already in use" on reconnect. - Reconnect via kill switch — All tunnel failure paths (health check, network change) now route through
handleTunnelFailure(), which enters kill switch mode when enabled instead of silently disconnecting. - Authoritative mode hint — Edit profile screen now shows an explanation when authoritative mode is toggled on.
- Overflow menu reorganized — Settings icon moved before the three-dot overflow menu; import/export and ping
moved into the overflow dropdown.
Bug Fixes
- onRevoke disconnect detection — When another VPN app takes over, the user now receives a notification instead
of silently losing protection. - Connect after kill — Connecting after the service was killed no longer races with stale native threads;
previous proxies are force-stopped before starting new ones.