VPNonly how it works faq install repo

Hi, I'm Kanishk and I built VPNonly.

One app on the VPN. Not your whole Mac.

I wanted CapCut on a Singapore IP while everything else stayed home. No VPN on Mac does that, so I built it.

CapCut — Singapore
everything else — untouched

Works with NordVPN · Mullvad · Proton · IVPN · AirVPN · your own WireGuard server

Get it for Mac — $19 or build it yourself, free one-time · 2 Macs · 14-day refund · Apple Silicon
demo

what it does

NordVPN, like basically every big VPN, has no split tunneling on Mac. It's all or nothing: connect, and your entire machine moves to another country. VPNonly inverts that.

Every app on your Mac shows up in a menu bar list. Flip a switch and that app moves onto the VPN with a new exit IP. Flip it back and it's home again. Everything else stays on your normal connection: your browser, your calls, your bank.

The first time an app joins, it gets relaunched once, because macOS decides an app's network identity when it starts. After that, switching is instant and the app keeps running.

how it works

It opens a WireGuard tunnel that nothing uses by default. Your default route is never touched. Then it uses PF, the firewall already built into macOS, to send just the apps you picked through that tunnel.

PF can't match traffic by application, but it can match by unix group. So each app gets its own private group, and two rules do the work:

block return out … from any to any group vpn_a1b2c3
pass out quick route-to (utun9 …) … group vpn_a1b2c3

The second sends that app into the tunnel. The first is the kill switch: when the tunnel is down, the pass rule isn't there, so that traffic is refused instead of quietly leaking to your ISP. Longer version here.

things I should be honest about

  • Apple Silicon only for now.
  • DNS lookups for tunneled apps still go through your normal resolver. The connections themselves are tunneled. If you need to hide which sites you visit from your ISP, this isn't the tool yet.
  • Switching an app's route drops its open connections. Most reconnect on their own, but a big upload would restart.
  • It isn't signed with an Apple certificate yet, so macOS blocks it on first launch and you allow it once in System Settings. Here's the guide. I'm funding the certificate from the first sales.
  • It's one person maintaining this. If it doesn't work for you, email me and I'll refund you.

why it's paid but also open

The split-tunneling engine is about 300 lines of shell and C, MIT licensed, on GitHub. It runs as root on your machine, so you should be able to read every line of it. That's not generosity, it's the minimum.

The $19 is for the Mac app on top: the menu bar list, one-click setup, the country picker, updates. If you'd rather use the terminal, do that. It's free and always will be.

quick answers

Do I need my VPN's own app running?

No, keep it closed. VPNonly talks to your provider's servers directly.

Which providers work?

NordVPN needs nothing but an access token — the app fetches your key and picks servers itself. For Mullvad, Proton, IVPN, AirVPN or your own server, download their WireGuard config and drop it in; import as many as you like and switch between them from the menu.

Why does it want my password?

Firewall rules need admin rights. It asks once, installs a root-owned engine you can read on GitHub, and never asks again.

How is this different from SplitTunnel.app?

They put your whole Mac on the VPN and exclude apps; here your Mac never joins at all. They're ~$49/year, this is $19 once. Their approach does avoid the one-time relaunch, which is fair, and it's on my list. More questions →

Made by @kanishkrazdan kanishk@armoury.in terms & privacy