discover · compare · collections · requirements · contribute · feed · watching · stats · help with your tokens
wgtunnel/android · source
Snapshot 0 · 2026-11-04T12:47:27Z · Kotlin · MIT
Content fingerprint
b4a43d4a4d683cf892ac930e917473b1fb01a16f88d1cf6302c1cc92fb00e7d6GitHub description at capture
An advanced, open-source client for WireGuard and AmneziaWG on Android.
README at capture
# WG Tunnel
WG Tunnel is an Android client for [WireGuard](https://www.wireguard.com/) and [AmneziaWG](https://docs.amnezia.org/documentation/amnezia-wg/), inspired by the official WireGuard Android app. It adds advanced features like auto-tunneling, tunnel-in-a-tunnel multihop, lockdown (a tunnel-independent kill switch), local proxying (a local SOCKS5/HTTP proxy), and many more!
**Get the app**
[](https://zapstore.dev/apps/com.zaneschepke.wireguardautotunnel)
[](https://play.google.com/store/apps/details?id=com.zaneschepke.wireguardautotunnel)
[](https://apt.izzysoft.de/fdroid/index/apk/com.zaneschepke.wireguardautotunnel)
[](https://fdroid.wgtunnel.com)
[](https://apps.obtainium.imranr.dev/redirect?r=obtainium://app/%7B%22id%22%3A%22com.zaneschepke.wireguardautotunnel%22%2C%22url%22%3A%22https%3A%2F%2Fgithub.com%2Fzaneschepke%2Fwgtunnel%22%2C%22author%22%3A%22zaneschepke%22%2C%22name%22%3A%22WG%20Tunnel%22%2C%22preferredApkIndex%22%3A0%2C%22additionalSettings%22%3A%22%7B%5C%22includePrereleases%5C%22%3Afalse%2C%5C%22fallbackToOlderReleases%5C%22%3Atrue%2C%5C%22filterReleaseTitlesByRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22filterReleaseNotesByRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22verifyLatestTag%5C%22%3Atrue%2C%5C%22sortMethodChoice%5C%22%3A%5C%22date%5C%22%2C%5C%22useLatestAssetDateAsReleaseDate%5C%22%3Afalse%2C%5C%22releaseTitleAsVersion%5C%22%3Afalse%2C%5C%22trackOnly%5C%22%3Afalse%2C%5C%22versionExtractionRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22matchGroupToUse%5C%22%3A%5C%22%5C%22%2C%5C%22versionDetection%5C%22%3Atrue%2C%5C%22releaseDateAsVersion%5C%22%3Afalse%2C%5C%22useVersionCodeAsOSVersion%5C%22%3Afalse%2C%5C%22apkFilterRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22invertAPKFilter%5C%22%3Afalse%2C%5C%22autoApkFilterByArch%5C%22%3Atrue%2C%5C%22appName%5C%22%3A%5C%22WG%20Tunnel%5C%22%2C%5C%22appAuthor%5C%22%3A%5C%22Zane%20Schepke%5C%22%2C%5C%22shizukuPretendToBeGooglePlay%5C%22%3Afalse%2C%5C%22allowInsecure%5C%22%3Afalse%2C%5C%22exemptFromBackgroundUpdates%5C%22%3Afalse%2C%5C%22skipUpdateNotifications%5C%22%3Afalse%2C%5C%22about%5C%22%3A%5C%22%5C%22%2C%5C%22refreshBeforeDownload%5C%22%3Afalse%7D%22%2C%22overrideSource%22%3Anull%7D)
[](https://github.com/wgtunnel/android/releases/latest)
**Community**
[](https://t.me/wgtunnel)
[](https://matrix.to/#/#wg-tunnel-space:matrix.org)
## Screenshots
<p>
<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/main_screen.png" width="200" alt="Main">
<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/config_screen.png" width="200" alt="Config">
<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/settings_screen.png" width="200" alt="Settings">
<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/auto_screen.png" width="200" alt="Auto-tunnel">
</p>
## Features
- **Auto-Tunneling:** Automatically activate tunnels based on your device's active network details.
- **Deferred Endpoint Bootstrapping:** Safely resolves endpoints and updates peers after the tunnel is up for better reliability and leak protection on startup.
- **Multihop:** Tunnel through another tunnel so traffic passes through more than one hop.
- **Handshake Monitoring:** Real-time handshake monitoring for tunnel health feedback.
- **AmneziaWG Support:** Full support for AmneziaWG 2.0 through 3.1, providing robust censorship protection.
- **Split Tunneling:** Flexible support for routing specific apps or traffic through the VPN.
- **Split & Encrypted DNS:** Resolve DNS through the tunnel using plain DNS, DoT, or DoH, and optionally split by domain suffix (tunnel or system).
- **Local Proxy Mode:** Expose WireGuard tunnels over a local SOCKS5 or HTTP proxy to browsers or firewall apps (like AdGuard).
- **Lockdown Mode:** Advanced in-app kill switch that blocks all traffic while the tunnel is down.
- **Quick Controls:** Quick Settings tile and home screen shortcuts for easy toggling.
- **Remote Control Support:** Intent-based automation for controlling tunnels and auto-tunneling from automation apps (like Tasker).
- **Dynamic DNS Handling:** Automatically detect and update endpoints on server IP changes without requiring a restart.
- **IPv6 Endpoints:** Automatically upgrade to IPv6 endpoints or fall back to IPv4 based on network conditions without requiring a restart.
- **Android TV Support:** Full support for nearly all features on Android TV.
## Building
### App build
```sh
git clone https://github.com/wgtunnel/android
cd android
./gradlew assembleDebug
```
### Full build (app + core)
To build against a local core (native JNI, backend, parser, hevtunnel), clone **core next to this repo**:
```
parent/
android/ # this repository
core/ # https://github.com/wgtunnel/core
```
```sh
cd /path/to/parent
git clone https://github.com/wgtunnel/android
git clone https://github.com/wgtunnel/core
cd android
```
You also need the [core build requirements](https://github.com/wgtunnel/core#requirements) (JDK 21, Android NDK, `make`, a C toolchain).
Then switch Gradle from Maven Central to the composite build:
1. In `settings.gradle.kts`, uncomment the local-dev `includeBuild`:
```kotlin
// Local dev
includeBuild("../core") {
dependencySubstitution {
substitute(module("com.wgtunnel:backend"))
.using(project(":backend"))
substitute(module("com.wgtunnel:backend-android"))
.using(project(":backend"))
substitute(module("com.wgtunnel:backend-android-jni"))
.using(project(":backend-android-jni"))
substitute(module("com.wgtunnel:hevtunnel"))
.using(project(":hevtunnel"))
substitute(module("com.wgtunnel:parser"))
.using(project(":parser"))
}
}
```
2. Build from `android/`:
```sh
./gradlew assembleDebug
```
Please restore the commented `includeBuild` before opening a PR.
## Translation
Help translate WG Tunnel on [Crowdin](https://translate.wgtunnel.com/project/wgtunnel/invite?h=11b5b7bf2099293095775d4477320c772818907).
<!-- CROWDIN-CONTRIBUTORS-START -->
<table>
<tbody>
<tr>
<td align="center" valign="top">
<a href="https://crowdin.com/profile/zaneschepke"><img alt="logo" style="width: 100px" src="https://crowdin-static.cf-downloads.crowdin.com/avatar/16294570/medium/965e75d46c8e69124d9ad93b6648d70a.jpg" />
<br />
<sub><b>Zane Schepke</b></sub>
<br />
<sub><b>(zaneschepke)</b></sub></a>
<br />
<sub><b>249913 words</b></sub>
</td>
<td align="center" valign="top">
<a href="https://crowdin.com/profile/martinellimarco"><img alt="logo" style="width: 100px" src="https://crowdin-static.cf-downloads.crowdin.com/avatar/17936585/medium/3e4a64d969fa19dca9cda5134eb75ace.png" />
<br />
<sub><b>Marco Martinelli</b></sub>
<br />
<sub><b>(martinellimarco)</b></sub></a>
<br />
<sub><b>4792 words</b></sub>
</td>
<td align="center" valign="top">
<a href="https://crowdin.com/profile/Pida88"><img alt="logo" style="width: 100px" src="https://crowdin-static.cf-downloads.crowdin.com/avatar/17799913/medium/ac2cec66927300857724bef7bd432cd3.jpg" />
<br />
<sub><b>Petr Sedl</b></sub>
<br />
<sub><b>(Pida88)</b></sub></a>
<br />
<sub><b>2211 words</b></sub>
</td>
<td align="center" valign="top">
<a href="https://crowdin.com/profile/Matthaiks"><img alt="logo" style="width: 100px" src="https://crowdin-static.cf-downloads.crowdin.com/avatar/13139078/medium/27126ff13e6785d239e4cf1d47016adc.png" />
<br />
<sub><b>Matthaiks</b></sub></a>
<br />
<sub><b>1992 words</b></sub>
</td>
<td align="center" valign="top">
<a href="https://crowdin.com/profile/Surfoo"><img alt="logo" style="width: 100px" src="https://crowdin-static.cf-downloads.crowdin.com/avatar/12385147/medium/2d69c468ab233ce1d371a4323309190e_default.png" />
<br />
<sub><b>Surfoo</b></sub></a>
<br />
<sub><b>1984 words</b></sub>
</td>
<td align="center" valign="top">
<a href="https://crowdin.com/profile/solokot"><img alt="logo" style="width: 100px" src="https://crowdin-static.cf-downloads.crowdin.com/avatar/12939368/medium/23417b511371f5884018368baa1de8f3.jpg" />
<br />
<sub><b>solokot</b></sub></a>
<br />
<sub><b>1254 words</b></sub>
</td>
<td align="center" valign="top">
<a href="https://crowdin.com/profile/EvanTechDev"><img alt="logo" style="width: 100px" src="https://crowdin-static.cf-downloads.crowdin.com/avatar/17786633/medium/75db2d8a253d39f149683c270378d8c0.jpeg" />
<br />
<sub><b>Evan Huang</b></sub>
<br />
<sub><b>(EvanTechDev)</b></sub></a>
<br />
<sub><b>1120 words</b></sub>
</td>
</tr>
<tr>
<td align="center" valign="top">
<a href="https://crowdin.com/profile/alis36"><img alt="logo" style="width: 100px" src="https://crowdin-static.cf-downloads.crowdin.com/avatar/17816977/medium/be84bd9763853d31c10c09f3708fb72b.jpeg" />
<br />
<sub><b>Ali Saeedi</b></sub>
<br />
<sub><b>(alis36)</b></sub></a>
<br />
<sub><b>1050 words</b></sub>
</td>
<td align="center" valign="top">
<a href="https://crowdin.com/profile/justcontributor"><img alt="logo" style="width: 100px" src="https://crowdin-static.cf-downloads.crowdin.com/avatar/13442389/medium/a6e71d4e535abf3b6d5c954658a93c70.jpg" />
<br />
<sub><b>그냥기여자</b></sub>
<br />
<sub><b>(justcontributor)</b></sub></a>
<br />
<sub><b>965 words</b></sub>
</td>
<td align="center" valign="top">
<a href="https://crowdin.com/profile/LEDPixel"><img alt="logo" style="width: 100px" src="https://crowdin-static.cf-downloads.crowdin.com/avatar/17784119/medium/fb3350aedffaf9c73b3f9de283b92b3e_default.png" />
<br />
<sub><b>LEDPixel</b></sub></a>
<br />
<sub><b>950 words</b></sub>
</td>
<td align="center" valign="top">
<a href="https://crowdin.com/profile/cyanwolfg"><img alt="logo" style="width: 100px" src="https://crowdin-static.cf-downloads.crowdin.com/avatar/15465504/medium/c294e2b66970ece817e0639c12319b48.png" />
<br />
<sub><b>CyanWolf</b></sub>
<br />
<sub><b>(cyanwolfg)</b></sub></a>
<br />
<sub><b>891 words</b></sub>
</td>
<td align="center" valign="top">
<a href="https://crowdin.com/profile/tehb29"><img alt="logo" style="width: 100px" src="https://crowdin-static.cf-downloads.crowdin.com/avatar/17950253/medium/73287160ada318e24dae684912e5f3d5.png" />
<br />
<sub><b>Den</b></sub>
<br />
<sub><b>(tehb29)</b></sub></a>
<br />
<sub><b>460 words</b></sub>
</td>
<td align="center" valign="top">
<a href="https://crowdin.com/profile/pixnet"><img alt="logo" style="width: 100px" src="https://crowdin-static.cf-downloads.crowdin.com/avatar/17785035/medium/ba0625fb3822f186f2a2892f443d5af9_default.png" />
<br />
<sub><b>pixnet</b></sub></a>
<br />
<sub><b>378 words</b></sub>
</td>
<td align="center" valign="top">
<a href="https://crowdin.com/profile/zlronron159"><img alt="logo" style="width: 100px" src="https://crowdin-static.cf-downloads.crowdin.com/avatar/13014680/medium/54f9e03c69b4f779ba7ef0f6e2ea70c7.jpg" />
<br />
<sub><b>ron</b></sub>
<br />
<sub><b>(zlronron159)</b></sub></a>
<br />
<sub><b>320 words</b></sub>
</td>
</tr>
<tr>
<td align="center" valign="top">
<a href="https://crowdin.com/profile/ppac"><img alt="logo" style="width: 100px" src="https://crowdin-static.cf-downloads.crowdin.com/avatar/14481388/medium/a640e3856ebc6794ff424b663627bf6f.png" />
<br />
<sub><b>Philip</b></sub>
<br />
<sub><b>(ppac)</b></sub></a>
<br />
<sub><b>273 words</b></sub>
</td>
<td align="center" valign="top">
<a href="https://crowdin.com/profile/YuryKomar"><img alt="logo" style="width: 100px" src="https://crowdin-static.cf-downloads.crowdin.com/avatar/17782179/medium/687a5b3ebd16654bef045ab89c24d237_default.png" />
<br />
<sub><b>YuryKomar</b></sub></a>
<br />
<sub><b>271 words</b></sub>
</td>
<td align="center" valign="top">
<a href="https://crowdin.com/profile/georgybog"><img alt="logo" style="width: 100px" src="https://crowdin-static.cf-downloads.crowdin.com/avatar/14779108/medium/da357a1603284460ec743f3c8cb51ba5.png" />
<br />
<sub><b>georgybog</b></sub></a>
<br />
<sub><b>257 words</b></sub>
</td>
<td align="center" valign="top">
<a href="https://crowdin.com/profile/darbrzozo"><img alt="logo" style="width: 100px" src="https://crowdin-static.cf-downloads.crowdin.com/avatar/17844297/medium/80791831ba4d2a563c6044832cd1a9e7.png" />
<br />
<sub><b>Dariusz</b></sub>
<br />
<sub><b>(darbrzozo)</b></sub></a>
<br />
<sub><b>125 words</b></sub>
</td>
</tr>
</tbody>
</table>
<!-- CROWDIN-CONTRIBUTORS-END -->
## Acknowledgements
Thank you to the following:
- All of the users that have helped contribute to the project with ideas, translations, feedback, bug reports, testing, and donations.
- [WireGuard](https://www.wireguard.com/) - Jason A. Donenfeld (https://github.com/WireGuard/wireguard-android)
- [AmneziaWG](https://docs.amnezia.org/documentation/amnezia-wg/) - Amnezia Team (https://github.com/amnezia-vpn/amneziawg-android)
- [JetBrains](https://jetbrains.com) - For supporting open-source developers with free software licenses.
## Contributing
Any contributions in the form of feedback, issues, code, or translations are welcome and much
appreciated!
For PRs, please make sure to format before submitting.
```sh
./gradlew format
```
CI runs `./gradlew formatCheck`, which uses the same files and style as `format`. If that job fails, run `./gradlew format` and commit the result.
If your PR requires [core](https://github.com/wgtunnel/core) changes, please link the associated PR.