Split tunneling means some traffic goes through the VPN and the rest doesn't. On Windows and Android nearly every provider offers it. On macOS the picture is patchier, and a lot of what's written about it online is out of date.
Every row below is checked against the provider's own documentation, linked at the bottom. Last verified August 2026.
| Provider | On macOS | What you get |
|---|---|---|
| NordVPN | No | Their own feature page lists Android, Android TV and Windows. macOS isn't there. The browser extension can route a browser, but not other apps. |
| ExpressVPN | Yes | On macOS 11 and later. Choose apps, plus specific IPs and subnets. |
| Surfshark | Yes | Called Bypasser. Apps and websites. Not supported on Big Sur. |
| Mullvad | Yes | Since app version 2024.4. Outgoing connections only, and it needs full-disk access so the daemon can track processes. Exclude-only, like Proton. |
| Windscribe | Yes | Listed as available in the Windows, Mac, Linux and Android apps. |
| Proton VPN | Experimental | Exclude-only on macOS, and their docs still call it experimental. Include mode — choosing which apps go into the tunnel — exists on Windows, Linux and Android but not here. Doesn't work with Safari or other WebKit apps, and each excluded app must be restarted after you connect. |
Every provider above does split tunneling the same way round: your whole Mac joins the VPN, and you list apps to exclude from it. The tunnel is the default and exclusions are the exception.
That matters more than it sounds. If the VPN drops, or you forget to connect, or an app you didn't think about starts talking, the default is that your traffic is going through another country. You're opting things out of a decision that's already been made for the whole machine.
The other model is the opposite: your Mac stays on its normal connection, and individual apps opt in. Nothing is tunneled unless you asked for it. If the tunnel drops, the apps you picked lose connectivity rather than silently falling back. That's how VPNonly works, and it's the reason it exists.
Every feature in that table only works with that company's own service. Surfshark's Bypasser doesn't help if you're on Mullvad. If you switch providers, or run two, or use a WireGuard server you host yourself, you start again.
A separate tool sits above all of them. VPNonly takes a WireGuard config from any provider — Mullvad, Proton, IVPN, AirVPN, your own server — or a NordVPN access token, and routes per app the same way regardless.
Tested end to end with VPNonly: NordVPN and Mullvad, exit address verified in both cases. Surfshark, Proton, IVPN and AirVPN all publish standard WireGuard configs, which is exactly what the import takes, but those rows come from their documentation rather than from a test on this Mac. We'll say which is which.
One thing worth noticing: Proton's macOS implementation also requires restarting each app after you connect. That isn't a Proton failing, it's macOS. An app's network identity is fixed when it launches, so anything doing per-app routing has to relaunch it once. VPNonly has the same constraint, and explains why here.
Safari can't be split-tunneled by anything. WebKit hands its connections to separate system processes that macOS launches on its own, so they don't carry the app's identity, and no per-app router can match them. Proton documents this for their implementation, and it's true of VPNonly too. If you want a browser on a different exit IP, use Chrome, Firefox, Arc or Brave.
If something here is wrong or has changed, tell me and I'll fix it. These pages get out of date quickly, which is most of the reason the rest of the internet's versions are wrong.
The app’s exact privileged engine source is public and MIT licensed.