Lantunnel
Install Lantunnel Client on each participating device to access your whole LAN from anywhere with P2P-first low-latency routing, encrypted transport, and relay fallback without port forwarding.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Tiny, unofficial menu-bar Proton VPN client for macOS. Picks the fastest server that isn't overloaded and switches automatically.
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗A tiny, menu-bar-only Proton VPN client for macOS that does one thing: put you on the fastest server that isn't overloaded, and move you to another one when it fills up or stops answering.
Unofficial. LeanVPN is an independent project. It is not made, endorsed or supported by Proton AG. "Proton" and "Proton VPN" are trademarks of Proton AG. You need your own Proton account. Use it at your own risk (see Disclaimer).
Status: alpha. It works daily on the author's Mac, but it has been tested on exactly one machine. See Status and testing before relying on it.
Website: https://zephyrsai.github.io/LeanVPN/
The official app is a 233 MB, full-featured client. My real problem was simpler: servers got congested and the connection kept dropping, so I was constantly switching servers by hand. LeanVPN picks a good server by itself, keeps checking it, and switches before you notice. It has no window, no settings, no country list. Just a shield in the menu bar.
Measured on an M-series MacBook Pro, macOS 26 (memory = Activity Monitor's "Memory" column):
| LeanVPN | Proton VPN 6.5.1 | |
|---|---|---|
| On disk | 6.1 MB (app 124 KB + helper 6 MB) | 233 MB |
| Menu-bar app memory | 11–15 MB | 168 MB |
| Background helper | Only while connected; exits 30 s after you disconnect | Always running |
| Idle CPU | ~0% (one cheap counter check every 10 s) | Noticeable over a day |
| Picking a server | ~0.3 s (all candidates probed in parallel) | n/a |
xcode-select --installbrew install goNo Xcode, no Apple developer account, no App Store.
git clone https://github.com/ZephyrSai/LeanVPN.git
cd LeanVPN
make install
make install builds everything (about a minute the first time), then asks for your admin
password once. That's needed to install the background helper that creates the VPN
interface. The installer:
LeanVPN.app to /Applications and starts it (it also starts at login);/Library/PrivilegedHelperTools/com.leanvpn.helper and registers it with
launchd (/Library/LaunchDaemons/com.leanvpn.helper.plist). launchd only starts it when the app
asks, and it quits again when the VPN is off.Quit the official Proton VPN app first. Two VPNs at once fight over routes and DNS.
LeanVPN never sees your password. It uses Proton's "enter a code on the web" sign-in, the same flow the Proton VPN Apple TV app uses.
account.protonvpn.com/appletv and the 8-character code is already on
your clipboard. Sign in to Proton there if asked, paste the code and approve.If that page doesn't load (some networks block protonvpn.com), open the same address on your
phone over mobile data and type the code shown in the LeanVPN menu. The code is valid for about
10 minutes.
| Icon | Meaning |
|---|---|
| Shield with a check | Connected. Hover for server, city, load and latency. |
| Half-filled shield | Connecting or switching servers |
Shield with ! | Waiting for network, or the last attempt failed (it retries by itself) |
| Plain shield | Disconnected |
| Shield with a slash | Signed out |
The menu only ever shows what makes sense right now: Connect, Disconnect, Switch Server (jump to the next-best server), Retry Now, Sign Out, and Quit (which also turns the VPN off).
If you were connected when you shut down, LeanVPN reconnects after a restart.
latency_ms + 300 × (load/100)² wins. Load hardly matters when it's low,
but it dominates as a server nears saturation. A 40 ms server at 90% load loses to a 90 ms
server at 30% load.Every 10 seconds the helper reads two counters from WireGuard. That costs almost nothing.
/Library/Application Support/LeanVPN/, readable by root only.vpn-api.proton.me and the VPN servers. There's no telemetry, crash
reporting, analytics or update check.Live logs:
/usr/bin/log stream --predicate 'subsystem == "com.leanvpn"' --level info
Past hour (connects, switches, failures):
/usr/bin/log show --last 1h --predicate 'subsystem == "com.leanvpn"'
| Problem | Fix |
|---|---|
| Menu says "Helper not installed" | Run make install again |
| Sign-in page is blank | Your network blocks protonvpn.com. Open the page on your phone over mobile data. |
| "Sign-in failed" | Try Sign In… again. If it keeps failing, check the logs. |
| No internet after a crash or force-quit | Reconnect, or run sudo /Library/PrivilegedHelperTools/com.leanvpn.helper --cleanup to restore your DNS |
| Keeps switching servers | Look in the logs for leaving … lines, which give the reason each time |
| Conflicts with another VPN | Disconnect the other VPN (the official Proton app, corporate VPNs) first |
make uninstall
This disconnects, restores your DNS, and removes the app, the helper, the launchd entry and the
saved sign-in. Run it from the cloned folder (or run sudo Support/uninstall.sh).
Alpha. What has actually been verified, on one Apple silicon Mac with a Proton Free account:
Not yet tested enough: long sessions (days), sleep/wake cycles, switching between Wi-Fi,
Ethernet and phone tethering mid-session, captive portals, certificate and token renewal over
long sessions, paid plans, macOS 13–15, and other people's Macs and networks. Bug reports are
very welcome, especially with the output of the /usr/bin/log show command above.
Kill switch, country or server picker, Secure Core, NetShield, split tunneling, port forwarding, profiles, notifications, settings, auto-update, Intel builds. Keeping it small is the point.
| Path | What |
|---|---|
Sources/App/main.swift | The menu-bar app (AppKit, about 190 lines) |
Sources/Helper/Engine.swift | Session, server choice, health checks and failover |
Sources/Helper/Tunnel.swift | utun interface, routes, DNS, network watcher |
Sources/Helper/Servers.swift | Server list parsing, shortlist and latency probe |
Sources/Helper/API.swift | The handful of Proton API calls |
Sources/Helper/bridge.h | Small C helpers: utun socket, TCP and DNS probes |
wg/ | wireguard-go (vendored) built as a static library, plus the HTTPS client and its tests |
Support/ | Installer, uninstaller, launchd plist, Info.plist |
docs/ | The website (GitHub Pages) |
Build without installing: make (outputs go to build/). Run the tests with make test.
LeanVPN is provided as is, without warranty of any kind. It is not affiliated with Proton AG. It uses Proton's API the way Proton's own apps do, including the Apple TV app's identifier for sign-in. Proton could change or block that at any time, and using an unofficial client may be against Proton's terms of service. You are responsible for how you use it.
LeanVPN is free software under the GNU General Public License v3.0.
api-apple.go (MIT). The vendored modules keep their own licenses
under wg/vendor/.