OpenRung
A free, privacy-first relay network that helps you reach the open internet. Open source and nonprofit-run.
翻訳待ち
No updates detected yet. GitHub releases will appear here.
Tiny, unofficial menu-bar Proton VPN client for macOS. Picks the fastest server that isn't overloaded and switches automatically.
翻訳待ち
Loading the full README.
Read the full 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.
This is the beginning of the README. Read the rest at the original. Read the full README ↗