The Tunnel tab is the operational heart of qWDTT. It lets you select an active profile, initiate the VPN connection, watch the staged connection pipeline in real time, read Go client logs, and review session traffic statistics. It is the primary screen you interact with once a profile is configured.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/SpaceNeuroX/proxy-turn-vk-android/llms.txt
Use this file to discover all available pages before exploring further.
Connecting
Select a profile
Open the Profiles tab and tap any profile card to make it the active profile. The active profile is highlighted with a colored border.
Switch to the Tunnel tab
The Tunnel tab reflects the currently active profile name and server address.
Tap Connect
Tap the Connect button. If this is the first connection, Android will show a system VPN permission dialog — tap OK to allow qWDTT to create a VPN interface.
The VPN permission dialog appears only once per app installation. If you are using SOCKS5 mode instead of VPN mode, no permission dialog is shown.
TunnelService, an Android foreground service. It acquires a PARTIAL_WAKE_LOCK and a WIFI_MODE_FULL_LOW_LATENCY Wi-Fi lock to prevent the system from putting the Go process to sleep.
Connection pipeline
The connection pipeline is a visual step-by-step progress display that appears while qWDTT is establishing the tunnel. Enable or disable it with theconnectionPipelineEnabled setting (Settings → Behaviour).
The stages in VPN mode are:
| Step | What happens |
|---|---|
| DNS | Pre-flight check: the Go client’s DNS server (e.g. Yandex, Cloudflare) is probed before launching the process |
| VK | TURN credentials are fetched from the VK Calls API (anonymous or account mode) |
| Captcha | Shown only when VK triggers Smart Captcha; solved automatically or via WebView |
| WRAP | WRAP/RTP transport is negotiated with the server |
| TURN | TURN relay allocation is confirmed |
| DTLS | DTLS handshake with wdtt-server completes |
| Workers | Go worker threads reach the server and begin passing traffic |
| VPN | WireGuard config is applied via Android VpnService |
| Done | Tunnel is fully up; pipeline hides after 4 seconds |
Logs tab
The Logs sub-tab inside Tunnel streams the Go client’s combined stdout/stderr in real time.- Log entries are grouped by type and deduplicated by key, so a repeating error appears as a single line with a counter rather than flooding the view.
- Up to 100 entries are kept; oldest entries are dropped when the limit is reached.
- Entries are sorted by priority: critical pipeline events at the top, statistics and verbose output at the bottom.
- Detailed logs (
detailedLogssetting) enables additional verbose output from the Go client, including unhandled lines that are normally suppressed. - Auto-switch to Logs (
autoSwitchToLogssetting, defaulttrue) automatically activates the Logs sub-tab as soon as you tap Connect, so you can watch progress immediately.
Traffic statistics
While the tunnel is running, the Go client emits[STATISTICS] lines every few seconds. qWDTT parses these and displays:
- Active workers — number of currently connected Go worker threads
- Bytes in/out — traffic for the current session
Home screen widget
The Tunnel Widget (provided byTunnelWidgetProvider) can be added to the Android home screen. It shows the current connection state and a brief status string, and it updates automatically whenever the tunnel state changes.
Quick Settings tile
qWDTT adds a Quick Settings tile to the Android notification shade. Add it once by editing your Quick Settings panel and dragging the qWDTT tile into place.- When the tunnel is off: tile label is
qWDTT: Выкл— tap to connect using the last saved profile. - When the tunnel is on: tile label is
qWDTT: Вкл— tap to disconnect.
Watchdog and automatic reconnection
TunnelService registers a ConnectivityManager.NetworkCallback that monitors every non-VPN internet interface. When the underlying network changes (e.g. switching from mobile data to Wi-Fi, or the IP changes), the service calls TunnelManager.restartTransport(), which:
- Kills the Go process and waits for the UDP listen port to be released.
- Reloads the WireGuard interface.
- Restarts the Go client with the same parameters.
TunnelManager also watches for zombie processes (running but 0 active workers for 90 s) and crashes, restarting with exponential back-off (up to 30 s between attempts).
Stop on Wi-Fi (stopOnWifi setting, default false): when enabled, the tunnel is cleanly disconnected the moment the device transitions onto a validated Wi-Fi network. This is useful when you only need the tunnel on mobile data.
If the active network disappears entirely (e.g. flight mode),
TunnelManager.pause() is called to kill the Go process without stopping the foreground service. As soon as any internet interface returns, TunnelManager.resume() restarts the process automatically.SOCKS5 mode
As an alternative to AndroidVpnService, qWDTT can run in SOCKS5 mode. In this mode:
- No VPN permission is required.
- The Go client starts userspace WireGuard internally and exposes a local SOCKS5 proxy at
127.0.0.1:<socksPort>(default1080). - You configure individual apps to use this proxy via their built-in proxy settings.
- The Android VPN interface is never created; system DNS and routing are not modified.
vpn or socks). The SOCKS listen port is configurable with socksPort (default 1080, valid range 1–65535).
The tunnel requires at least one live VK call hash. If all hashes in the active profile are dead (the call was ended for everyone), TURN credential fetching will fail and the connection pipeline will stop at the VK step. To recover, join a new call and update the hash in the profile.