Three reported issues from v1.0.0 — one real bug, two UX gaps. google_ip auto-resolve (THE FIX) -------------------------------- Google rotates the A record for www.google.com across their anycast pool. A hardcoded default IP breaks new installs on any network that isn't geo-homed to the same edge — symptom is "all SNIs time out" even with a fresh deployment. On Start and via a new "Auto-detect" button, we now do a JVM-side InetAddress lookup BEFORE establishing the VPN (so the resolver uses the underlying network, not our own Virtual-DNS TUN — avoids a loop), update the config, and continue. The auto-resolve lives in the HomeScreen click handler (not MainActivity) so it goes through the same `persist(cfg)` the text fields use. Previous iteration did `ConfigStore.load → modify → save` directly to disk, which left Compose's in-memory cfg stale and a subsequent field edit would overwrite the fresh IP. One source of truth now. Also defensively repairs front_domain: if it's been corrupted into an IP literal (bad paste, whatever) we restore "www.google.com" — the TLS SNI on the outbound leg has to be a hostname or the handshake lands on the wrong vhost. Robust Stop ----------- The Stop button now dispatches both ACTION_STOP (graceful: runs teardown, stops tun2proxy, closes TUN fd, shuts down Rust runtime) AND stopService() (defensive: covers force-closed-then-reopened zombie state where Android auto-restarted our START_STICKY service in a fresh process and the in-memory TUN reference is gone). Check-for-updates ----------------- Tapping the version badge in the top bar now runs the same update_check that the desktop UI uses, via a new `Native.checkUpdate()` JNI entry point. Returns a JSON blob the Kotlin side parses into an "Up to date", "Update available: v→v <url>", "Offline: ...", or "Check failed: ..." snackbar. Mirrors the desktop's behavior so a user doesn't have to manually poll GitHub for new builds. Crash visibility ---------------- New MhrvApp.kt registers a process-wide uncaught exception handler. Crashes are now stamped into logcat under the `mhrv-crash` tag with the thread name before the default handler kills the process — previously the JVM crash in coroutines / the log drain / the tun2proxy worker was invisible unless you caught the dropoff in real time. Version bump: 1.0.0 → 1.0.1 (versionCode 100 → 101). Release APK rebuilt and replaces the 1.0.0 copy in releases/; CI will regenerate on the v1.0.1 tag push. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Prebuilt Binaries
This folder contains the prebuilt binaries from the latest release, committed directly to the repository for users who cannot reach the GitHub Releases page.
Current version: v1.0.1
| File | Platform | Contents |
|---|---|---|
mhrv-rs-android-universal-v1.0.1.apk |
Android 7.0+ (all ABIs) | Universal APK — arm64-v8a, armeabi-v7a, x86_64, x86 in one file |
mhrv-rs-linux-amd64.tar.gz |
Linux x86_64 | mhrv-rs, mhrv-rs-ui, run.sh |
mhrv-rs-linux-arm64.tar.gz |
Linux aarch64 | mhrv-rs, run.sh (CLI only) |
mhrv-rs-raspbian-armhf.tar.gz |
Raspberry Pi / ARMv7 hardfloat | mhrv-rs, run.sh (CLI only) |
mhrv-rs-macos-amd64.tar.gz |
macOS Intel | mhrv-rs, mhrv-rs-ui, run.sh, run.command |
mhrv-rs-macos-amd64-app.zip |
macOS Intel | mhrv-rs.app bundle (double-click from Finder) |
mhrv-rs-macos-arm64.tar.gz |
macOS Apple Silicon | mhrv-rs, mhrv-rs-ui, run.sh, run.command |
mhrv-rs-macos-arm64-app.zip |
macOS Apple Silicon | mhrv-rs.app bundle (double-click from Finder) |
mhrv-rs-windows-amd64.zip |
Windows x86_64 | mhrv-rs.exe, mhrv-rs-ui.exe, run.bat |
mhrv-rs-linux-musl-amd64.tar.gz |
OpenWRT / Alpine x86_64 | static mhrv-rs + mhrv-rs.init (procd) |
mhrv-rs-linux-musl-arm64.tar.gz |
OpenWRT / Alpine aarch64 | static mhrv-rs + mhrv-rs.init (procd) |
Download via git clone
git clone https://github.com/therealaleph/MasterHttpRelayVPN-RUST.git
cd MasterHttpRelayVPN-RUST/releases
Download via ZIP
Go to github.com/therealaleph/MasterHttpRelayVPN-RUST, click the green Code button, then Download ZIP. Extract it — the archives are in the releases/ folder.
After download
Linux / macOS
tar xzf mhrv-rs-macos-arm64.tar.gz
cd mhrv-rs-macos-arm64 # or wherever the archive extracted to
./run.sh # or ./run.command on macOS (double-click in Finder)
Windows
Extract mhrv-rs-windows-amd64.zip, then double-click run.bat inside the extracted folder (accept the UAC prompt so the MITM CA can be installed).
Android
Copy mhrv-rs-android-universal-v1.0.1.apk to your phone, tap it from the Files app, and allow "Install unknown apps" for whichever app is opening the APK (Files, Chrome, etc.). See the Android guide for the full walk-through of the first-run steps (Apps Script deployment, MITM CA install, VPN permission, SNI tester).
See the main README for desktop setup (Apps Script deployment, config, browser proxy settings).
فایلهای اجرایی
این پوشه شامل فایلهای آخرین نسخه است و مستقیماً در ریپو قرار گرفته برای کاربرانی که به صفحهٔ GitHub Releases دسترسی ندارند.
نسخهٔ فعلی: v1.0.1
دانلود از طریق ZIP
به github.com/therealaleph/MasterHttpRelayVPN-RUST بروید، روی دکمهٔ سبز Code کلیک و Download ZIP را بزنید. پس از extract، آرشیوها در پوشهٔ releases/ هستند.
بعد از دانلود
لینوکس / مک:
tar xzf mhrv-rs-macos-arm64.tar.gz
cd mhrv-rs-macos-arm64
./run.sh # در مک میتوانید روی run.command هم از Finder دو بار کلیک کنید
ویندوز: فایل mhrv-rs-windows-amd64.zip را extract کنید و داخل پوشه روی run.bat دو بار کلیک کنید (UAC را قبول کنید تا گواهی MITM نصب شود).
اندروید: فایل mhrv-rs-android-universal-v1.0.1.apk را روی گوشی کپی کنید، از Files app روی آن tap کنید و اجازهٔ "نصب برنامههای ناشناس" را بدهید. راهنمای کامل شروع به کار (دیپلوی Apps Script، نصب CA، اجازهٔ VPN، تستر SNI) در راهنمای اندروید هست.
برای راهاندازی کامل دسکتاپ (دیپلوی Apps Script، config، تنظیم proxy مرورگر) به README اصلی مراجعه کنید.