No description
  • Kotlin 99.6%
  • CMake 0.4%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Ivan Pavlina f642c4f847 docs: refresh README and CLAUDE.md
Shorten the README to a quick start and a deploy summary. In CLAUDE.md add
the verified build commands, the dev machine environment, the Forgejo
deployment description, local emulator testing, and gotchas 32-36.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-16 15:21:59 +00:00
.forgejo/workflows ci(android): skip the release when the tag already exists 2026-10-13 07:53:19 +02:00
app Ship the release variant through CI 2026-10-12 18:24:02 +02:00
externals Scaffold project and build ZeroTier core for Android (M0 + M1) 2026-08-17 21:10:31 +02:00
gradle update gradle properties 2026-08-20 13:10:11 +02:00
logcatter Work through the QA pass: nine major findings, and the answer on the first screen 2026-09-05 15:35:12 +02:00
networkmonitor Housekeeping from the audit (FA-016, FA-018 d, FA-019, FA-021, FA-022) 2026-10-12 10:42:25 +02:00
pinger Work through the QA pass: nine major findings, and the answer on the first screen 2026-09-05 15:35:12 +02:00
ztcore Act on a full audit: seventeen defects, nine dead settings, and the tests 2026-08-19 13:13:56 +02:00
.gitignore Scaffold project and build ZeroTier core for Android (M0 + M1) 2026-08-17 21:10:31 +02:00
.gitmodules Scaffold project and build ZeroTier core for Android (M0 + M1) 2026-08-17 21:10:31 +02:00
build.gradle.kts Scaffold project and build ZeroTier core for Android (M0 + M1) 2026-08-17 21:10:31 +02:00
CLAUDE.md docs: refresh README and CLAUDE.md 2026-10-16 15:21:59 +00:00
FABLE_AUDIT.md Bring CLAUDE.md in line with the code and close out the audit (FA-017) 2026-10-12 10:45:56 +02:00
gradle.properties update gradle properties 2026-08-20 13:10:11 +02:00
gradlew Scaffold project and build ZeroTier core for Android (M0 + M1) 2026-08-17 21:10:31 +02:00
gradlew.bat Scaffold project and build ZeroTier core for Android (M0 + M1) 2026-08-17 21:10:31 +02:00
README.md docs: refresh README and CLAUDE.md 2026-10-16 15:21:59 +00:00
settings.gradle.kts Scaffold project and build ZeroTier core for Android (M0 + M1) 2026-08-17 21:10:31 +02:00

ZeroTierTunnel

An Android VPN client for ZeroTier, built around keeping the tunnel honest rather than merely bringing it up.

Existing clients lose the tunnel when the phone changes network and take DNS down with them, so the VPN says "connected" while nothing resolves. This app adds three things on top of the data plane:

  • Health monitoring that checks whether traffic actually crosses the tunnel.
  • A recovery ladder that escalates from the cheapest fix to the most disruptive, and stops as soon as the tunnel works again.
  • DNS fail-open, so a broken tunnel costs you local name resolution and nothing else.

A personal project in daily use on one device (Android 16). Not on any store, not a general-purpose ZeroTier client.

Quick start

Requirements: Android SDK with NDK 27.3.13750724 and CMake 3.31.6, a JDK 25 (Gradle fetches one automatically if it is missing), and Android 8.0+ (API 26) on the device.

git clone --recurse-submodules <this repo>
export ANDROID_HOME=/path/to/android-sdk

./gradlew :app:assembleDebug     # APK in app/build/outputs/apk/debug/
./gradlew test                   # unit tests, JVM only
./gradlew :app:lintDebug

Then in the app: add your network by its 16-character ID, authorise the device on your controller, and set probe targets on the network screen. Nothing about any network is compiled in.

Build and deploy

A push to main builds the release APK in Forgejo Actions (.forgejo/workflows/android.yml), signs it and publishes it as an android-v* release, which Obtainium installs on the phone.

More

CLAUDE.md holds the architecture, conventions, pitfalls and what has been verified on a device. Licence: not yet chosen; the code links the ZeroTier core, which is MPL 2.0.