100 Commits
Author SHA1 Message Date
zaneschepke 2e574c563a chore: release 5.3.0 2026-08-14 00:37:47 -04:00
zaneschepke 71ae16802c fix: bump core for boottime go runtime patch
Bump nav, appcompat, and compose
2026-08-14 00:31:59 -04:00
zaneschepke 8571b4ef9b fix: export .conf mimetype and legacy downloads export snackbar message
closes #902
2026-08-13 12:51:29 -04:00
zaneschepke 3e2ebb5b1c fix: sticky service restore and package replace restore
Tunnels and auto tunnel now properly restore on start sticky scenarios when the service is killed and when package is replaced.

closes #1259
2026-08-13 05:13:18 -04:00
Zane Schepke c00afcbfdc feat(lang): new Crowdin updates (#1410) 2026-08-13 01:22:51 -04:00
zaneschepke 26861aa6f3 ci: fix fastlane to ignore incomplete metadata 2026-08-13 00:43:15 -04:00
zaneschepke 04c7e287e9 chore: fix fastlane for crowdin skip untranslated 2026-08-13 00:41:26 -04:00
zaneschepke ae043d6014 fix: Android TV export flow to legacy downloads export
Refactor of config export to a single flow.

Always assume SAF is not available on Android TV as it can be falsely reported to be supported. Fallback to legacy downloads export.

closes #902
2026-08-13 00:05:47 -04:00
zaneschepke 5526260629 chore: fix crowdin fastlane mappings 2026-08-12 02:57:05 -04:00
zaneschepke b12173ab6e chore: add basque language code mapping 2026-08-12 02:37:41 -04:00
zaneschepke 1eff703bfc chore: fix crowdin config 2026-08-12 02:16:21 -04:00
zaneschepke 827e7301aa Merge branch 'master' of github.com:wgtunnel/wgtunnel 2026-08-12 01:12:54 -04:00
zaneschepke f14db97a49 chore: fix crowdin config locale mapping 2026-08-12 01:12:26 -04:00
Zane Schepke 48d94e5320 Update Crowdin configuration file
[ci skip]
2026-08-12 01:01:10 -04:00
zaneschepke a2695c8b44 chore: trigger Crowdin source sync 2026-08-12 00:57:39 -04:00
Zane Schepke eeb886f830 feat(lang): new Crowdin updates (#1359)
Removes all english placeholders
2026-08-12 00:19:16 -04:00
zaneschepke c0922a210b feat: amnezia 3.0 support
Changes to 1.1.0 add Amnezia 3.0 support to the config parser. UI has also been updated to support Amnezia 3.0 values.

closes #1408

Additional fixes:
- Fixes race during tunnel bootstrap that could leave an orphaned tunnel
closes #1407
- Fixes bug where initial tunnel state could be lost due to a tunnel handle mapping race
closes #1404
2026-08-11 23:30:36 -04:00
zaneschepke 4e344b2e65 fix: android tv and legacy device file exports
closes #902
closes #970
2026-08-11 17:41:00 -04:00
zaneschepke b647b39eaa fix: gamepad google play warning
closes #1393
2026-08-11 03:09:06 -04:00
zaneschepke 71b1466b56 fix: ddns failing to retry after detecting no change
closes #1402
2026-08-11 02:46:19 -04:00
zaneschepke d552abc3e8 fix: missing core deps 2026-08-10 23:06:45 -04:00
zaneschepke 59869e0333 chore(deps): bump ksp, ktfmt, gradle wrapper
closes #1403
closes #1400
closes #1399
2026-08-10 18:13:03 -04:00
zaneschepke 373022412b refactor: migrate to new shared backend and core 2026-08-10 18:01:29 -04:00
zaneschepke d349aeef52 chore(deps): bump navigation3, ktor client 2026-08-02 00:31:27 -04:00
zaneschepke 6076994a22 fix: config import validation and ip4p parsing
closes #869
2026-08-02 00:23:55 -04:00
zaneschepke 86d77488ee fix!: seamless recovery, DDNS recovery, and IPv4/IPv6 fallback/recovery
Seamless recovery was far to aggressive in doing full tunnel bounces in the old implementation. The feature has now been integrated into a more broad recovery job with decoupled individual recovery paths that respect a recovery hierarchy of DDNS recovery first (if enabled), IPv4 fallback second (if ipv6 preferred and active), and only full bounce when all else fails. The feature is now also gated to only work when the device is interactive/not asleep to prevent false positives.

Additionally, the first implementation of seamless recovery was very crude. It performed fresh DNS request for tunnel endpoints because it didn't have a caching mechanism. The same for IPv4/Ipv6 fallback and recovery. This has been fixed by reintroducing the user setting for tagging a tunnel as a DDNS tunnel (BREAKING CHANGE for DDNS users). For the seamless recovery path, we now only make a fresh DNS request if the user has flagged the tunnel as a DDNS tunnel. IPv6 and IPv4 fallback and recovery still respect the cache in all scenarios.

Seamless recovery now properly only fires after 30 seconds of persistent handshake failures while the phone is interactive.

closes #1373
2026-08-01 15:42:40 -04:00
zaneschepke 13171ed1bb fix: old handle not properly cleaned up in tunnel bounce scenarios 2026-07-28 13:12:36 -04:00
zaneschepke 2a0209d609 fix: seamless recovery should only fire if we detect a usable network
Before, seamless recovery would fire if we detect any network. It should really only be triggering if we detect a usable network that has internet connectivity.
2026-07-28 13:07:16 -04:00
zaneschepke 3e17c12d37 chore(deps): bump agp
closes #1382
2026-07-25 02:34:06 -04:00
zaneschepke f585050bf2 chore: release 5.2.1 2026-07-23 03:52:41 -04:00
zaneschepke 38093c3048 chore(deps): update sonner 2026-07-23 03:50:44 -04:00
zaneschepke d65c43eb9e fix: selected tunnels should consume and clear selected on back
On back press/swipe, we should clear selected and consume the back instead of exiting the app
2026-07-23 03:42:36 -04:00
zaneschepke a456b2e510 refactor: add chevron for app mode 2026-07-23 03:20:18 -04:00
zaneschepke 34edc47afe refactor: improve UI divider with a chevron
Match Android to denote another deeper screen
2026-07-23 03:03:03 -04:00
zaneschepke 554f83744a fix: hide Wi-Fi details if they are android defaults
To prevent confusion, Wi-Fi details that are Android defaults should be hidden from user

closes #1377
2026-07-23 02:40:33 -04:00
zaneschepke 8e41986809 fix: attempt to fix wifi change detection on problem oems while vpn active
Certain OEMs fail to fire any wifi network change callbacks while a VPN is active. To get around this, we query all networks for these devices on defaultNetwork change to see if there is a Wifi network available and fallback to legacy mode if we are in default mode as the all networks capabilities won't have location restricted details
2026-07-23 02:00:49 -04:00
zaneschepke 6122b21b05 chore: release 5.2.0 2026-07-22 03:15:37 -04:00
zaneschepke a32da7b758 feat: IP4P support
App now properly checks for IP4P IPv6 addresses and get the real IPv4 peer endpoint and port from the natmap format address

closes #1127

#869
2026-07-22 01:13:01 -04:00
zaneschepke d3b72f0421 fix: tunnel dns ui bug when moving from split to encrypted
Plain should now show as an option under encrypted settings
2026-07-22 00:35:53 -04:00
zaneschepke 69ca4ab0aa fix: stats job failed to find tunnel bug
Fixes bug in the stats job that could cause high CPU turn and drain battery if handle is missing before job is canceled

closes #1375
2026-07-22 00:18:21 -04:00
zaneschepke ff3607f5cc fix: auto tunnel BSSID exact match bug
BSSID exact match was properly finding the first exact match but then we were failing to start the tunnel

closes #1369
2026-07-21 03:00:02 -04:00
zaneschepke f25887fb18 fix: making the split tunnel screen aware of package installs and removals
The split tunneling screen was not properly updating the cache when the user installed packages or removed packages.

closes #1372
2026-07-21 02:49:28 -04:00
zaneschepke 15f12a064d refactor: migrate deprecated orbit api 2026-07-21 00:58:02 -04:00
zaneschepke a1b4f4752f fix: make exclude lan feature private IP DNS server aware
Fixes bug where exclude lan was not private DNS aware. This caused private IP DNS servers to be excluded from the tunnel and break or leak DNS

closes #799
2026-07-21 00:32:06 -04:00
zaneschepke 4f08b9a6d9 fix: bssid should always be normalized to uppercase
closes #1371
2026-07-20 23:10:32 -04:00
zaneschepke c30a2eed95 chore: bump quickie and aboutlibraries
closes #1367
closes #1366
2026-07-20 23:05:44 -04:00
zaneschepke 412c249629 feat: split dns, encrypted tunnel dns
Adds a new dependency on our core library for a tunnel wrapper that allows split dns and encrypted tunnel dns

Fixes a bug in network monitor where the active underlying network was incorrectly set on VPN toggles, cause issues with auto tunneling and other features

Fixes a bug with lockdown mode where the tunnel's DNS servers were not being used and a kill switch default DNS server was being used

closes #572
closes #1128
closes #1370
closes #1341

#1363
2026-07-20 03:15:21 -04:00
zaneschepke 38eb70347f chore: bump agp, enable parallel tooling 2026-07-16 01:17:05 -04:00
zaneschepke 22aa087543 chore: fix crowdin sync issues and metadata language mappings 2026-07-15 14:09:43 -04:00
zaneschepke 06ce2b76fa chore: release 5.1.0 2026-07-15 04:56:26 -04:00
zaneschepke c57a274b2a refactor: add defensive socket protector clearing 2026-07-15 04:43:52 -04:00
zaneschepke dbfaa3d657 chore: code formatting 2026-07-15 03:41:08 -04:00
zaneschepke ff58ffba11 fix: network detection race during vpn starts
Fixes race specifically with Wi-Fi networks where vpn starts could overwrite our SSID and BSSID values with android defaults
Make underlying/active network detail caching logic more robust for all detection modes
2026-07-15 02:03:44 -04:00
zaneschepke 2021a9ebe3 chore: bump orbit and kotlin
closes #1354
closes #1353
closes #1352
2026-07-14 13:29:25 -04:00
zaneschepke 1a35507a03 fix: dns resolver jni race, MTE tagging issue
Race where dns strings could be released from memory before go copied

All copies are now done sync

#1262
2026-07-14 13:20:38 -04:00
zaneschepke 666e015314 feat: add tunnel connection state to tunnel control tile
This also adds the tunnel name as the tile label

closes #1306
2026-07-14 05:27:43 -04:00
zaneschepke ba4dd0ab20 fix: integrate seamless recovery events with notifications
Add seamless recovery events and also detect seamless recovery DDNS and IPv4 events so we can notify user of these events like before
Improve snackbar queuing to fix sonner ordering issues
2026-07-14 03:15:43 -04:00
Zane Schepke 561337cc84 feat(lang): New Crowdin updates (#1350) 2026-07-14 03:10:01 -04:00
zaneschepke f0c094231c chore: update crowdin config 2026-07-14 03:01:12 -04:00
zaneschepke b6c3f27f37 refactor: clean up jni layer, improve logging, move status callback init to on load 2026-07-13 05:33:14 -04:00
zaneschepke 10357d689e chore: fix crowdin to skip untranslated 2026-07-13 02:23:09 -04:00
Zane Schepke e8e889f96c feat(lang): New Crowdin updates (#1346) 2026-07-13 01:58:46 -04:00
zaneschepke ff7eb0a90a chore: fix crowdin sync issue, language mapping 2026-07-13 01:46:23 -04:00
zaneschepke 0a6a639abb chore: fix translation duplicates from merge 2026-07-13 01:38:43 -04:00
Zane Schepke e414fba47c feat(lang): New Crowdin updates (#1335) 2026-07-13 01:30:25 -04:00
zaneschepke 3c69382700 feat: add toggle tunnel action to remote control feature 2026-07-12 01:14:51 -04:00
zaneschepke 95d99d83eb fix: proguard rules for new jni callback
#1262
2026-07-12 00:12:13 -04:00
zaneschepke 396e62df05 fix: defensive copies and async native resolver callback for GrapheneOS MTE crash
Copy strings with strdup to prevent go from seeing MTE tagged memory

Switch to async callback for native resolver to prevent go garbage collection issues with JVM thread + MTE

#1262
2026-07-11 02:54:07 -04:00
zaneschepke 4fe9824dd2 chore: fix warnings, bump gradle and ksp 2026-07-11 01:09:10 -04:00
zaneschepke adf96c66f5 fix: companion service start and shutdown
Companion service was not always properly starting and stopping with the vpnservice

closes #1334
2026-07-11 00:50:48 -04:00
zaneschepke 71712c09c1 feat: seamless recovery
DDNS, IPv4 recovery and seamless roaming have all been merged into the new seamless recovery feature. There were a lot of overlaps and edge cases that were best solved by the nuclear seamless recovery feature

Kotlin side now maintains ownership of the vpn service interface fd, preventing the closure of the interface while the seamless recovery feature closes and recreates the wireguard tunnel device, allowing maintained protection from leaks throughout the bounce process

This feature solves various network and tunnel issues including DDNS changes, network migration issues, NAT issues, Amnezia mimic packet issues, etc that were traditionally solved by a full vpn interface and tunnel destruction

closes #1295
closes #1036
2026-07-10 04:46:14 -04:00
zaneschepke 3eff5be130 chore: release 5.0.9 2026-07-07 15:43:33 -04:00
zaneschepke aaa4a28f4e chore: fix android tv banner 2026-07-07 15:39:15 -04:00
zaneschepke 3a89f2a6a9 fix: standard proxy should not try to protect socket if bypass not set
closes #1339
2026-07-07 14:52:20 -04:00
zaneschepke 3d076b93b5 fix: service foreground start and recovery for tunnel and companion service
#1339
2026-07-07 14:20:26 -04:00
zaneschepke 50863070c0 chore: clean up old translation strings 2026-07-07 06:02:27 -04:00
zaneschepke 839a7649df fix: app translation link should be invite link 2026-07-07 05:58:18 -04:00
zaneschepke 60e0208c11 docs: make crowdin link an invite link 2026-07-07 05:55:19 -04:00
zaneschepke 321484d8f7 chore: release 5.0.8 2026-07-07 05:45:09 -04:00
zaneschepke 10fd5309be docs: update translation url and link to crowdin 2026-07-07 04:07:28 -04:00
zaneschepke 75b9298d0b chore: add fastlane store metadata to crowdin 2026-07-07 02:50:33 -04:00
zaneschepke 856d0444d9 chore: remove translated changelogs
Translating changelogs isn't worth the effort. For Crowdin, we will just focus on the store metadata
2026-07-07 02:48:50 -04:00
zaneschepke ffa995d674 chore: fix crowdin language sync issues 2026-07-07 02:18:51 -04:00
zaneschepke 315262a2b7 fix: improve noisy log filters for logger 2026-07-07 02:15:55 -04:00
zaneschepke a2aec0b1b4 chore: update crowdin config with code mappings 2026-07-07 01:59:07 -04:00
zaneschepke 42f822c39e chore: clean up localizations
Clean up a bunch of english added to localizations

Remove no longer used translated strings
2026-07-07 01:21:30 -04:00
zaneschepke 53b285015a chore: add crowdin config 2026-07-07 00:24:36 -04:00
zaneschepke 035e5ed8c0 refactor: seamless roaming to only refresh bind, not bind network
There are issues where binding network seems counterproductive in certain recovery cases and unreliable. Instead, we now just refresh the tunnel bind on major network transitions to scope the feature more towards Wi-Fi AP migrations and airplane mode migrations while letting wireguard's roaming handling do the rest

Added a small delay before bind refresh to make sure network as stabilized first
2026-07-06 16:21:50 -04:00
zaneschepke f6cb3579c2 fix: apply Amnezia 2.0 compat values for legacy 1.5 configs on tunnel start
Prevent issues where users try to start legacy Amenzia 1.5 configs with only mimicking values set by applying Amnezia 2.0 required properties at tunnel run

Minor bugfix on config ui when applying mimic settings
2026-07-06 01:55:27 -04:00
zaneschepke a4a499457f fix: donation toast localization handling 2026-07-06 01:06:12 -04:00
zaneschepke 2b0ffd18d5 refactor: logger optimizations and log sanitizing
Improved logger to reuse existing files to prevent a bunch of small files created on short lived app starts
Added more log sanitizing for noisy logs
Improved the log delete and export flow with success messages
Added version and flavor to log file name and log file header
2026-07-06 00:29:22 -04:00
zaneschepke 2b21f80ff3 fix: auto tunnel specificity and duplicates
Auto tunnel now properly handles conflicts with ssids, bssid, and wildcards by picking the first most specific match
Added logic to prevent duplicate mappings from being added to multiple tunnels
Auto tunnel now has specificity, prioritizing extact BSSID -> exact SSID -> BSSID wildcard (most precise one) -> SSID wildcard (most precise one) and then fallback back to the default or first tunnel if there are no matches.

closes #1317
2026-07-05 19:12:19 -04:00
zaneschepke a78a947ff3 fix: prevent kill switch from being destroyed except on mode change
Fixes a bug where kill switch could accidentally be cleaned up in stopAllActiveTunnel scenarios

#1322
2026-07-05 17:46:58 -04:00
zaneschepke 440afe4474 fix: system dns resolution can return loopback
The new DnsResolver api can return loopback sometimes. To avoid, we stick with the old API for making network bound requests.

Add safety to prevent double bracketing of ipv6 addresses

#1330
2026-07-05 16:54:19 -04:00
zaneschepke d24a172921 feat: auto tunnel bssid support
Added support for auto tunneling based on BSSID. On conflict with SSID, BSSID takes precedence.
Added support for root shell and shizuku to also query BSSID along with SSID.
Added wildcard support and tunnel mapping for BSSIDs.
Various small UI/UX improvements to auto tunnel Wi-Fi settings and tunnel mapping.

closes #115
2026-07-05 05:00:17 -04:00
zaneschepke d33820d2cf fix: active network initial detection race
Add BSSID detection for all Wi-Fi detection methods making BSSID and SSID a single root shell/Shizuku shell query.

#115
2026-07-04 15:29:16 -04:00
zaneschepke 7c66aea5ea fix: make seamless roaming aware of relevant Wi-Fi AP roams
Improves active SIM detection in dual sim scenarios

closes #1134
2026-07-04 04:33:35 -04:00
zaneschepke f6bbb5d815 fix: url imports
Fix double read on url import for HTML checking

closes #1318
2026-07-04 02:47:41 -04:00
zaneschepke 186f063e23 chore(deps): bump deps
closes #1327
closes #1326
closes #1328
closes #1329
2026-07-03 04:56:54 -04:00
zaneschepke 2c78e9fcbd refactor: app icons and assets, change nightly launcher color
Remove old lincensee task
2026-07-03 04:43:10 -04:00