VPNonly isn't signed with an Apple developer certificate yet, so macOS blocks it on first launch and you allow it once in System Settings. There's a short guide here. The certificate costs $99 a year and I'm paying for it out of the first sales. Once it's signed, the app updates itself and this step goes away.
If that's a dealbreaker, don't buy it yet. You can still read every privileged line before deciding.
NordVPN is the easiest. Paste an access token once, and the app fetches your WireGuard key and picks servers for you, with a country menu.
Everyone else (Mullvad, Proton, IVPN, AirVPN, or a server you run yourself) works by importing a WireGuard config. Download the .conf files from your provider — one, several, or the whole zip they offer — and import them. A zip with every server in it becomes a single entry with a country picker, the way NordVPN works. Import as many providers as you want and switch between them from the menu at the bottom. If your provider gives you a WireGuard config, it works here.
Nearly. The exception is Safari, and any other browser built on WebKit, like Orion or DuckDuckGo's. VPNonly won't switch them on, and switches off any that were. Safari doesn't make its own network connections: WebKit hands them to separate system processes that macOS launches independently, so they never carry Safari's identity and the firewall can't match them. Proton VPN's macOS split tunneling has exactly the same limitation, for the same reason.
Chrome, Firefox, Arc, Brave, CapCut, Slack, Discord and ordinary apps all work. If you need a browser on the VPN, use one of those.
The list shows everything in Applications, including apps that install into a folder of their own there (Adobe’s, for example), Utilities, and your own ~/Applications. For anything else, use “Choose another app…” at the bottom of the list. One honest limit: an app whose real network work happens in background services that macOS starts on its own isn't covered by switching the app on, because those services aren't started by the app. Adobe's Creative Cloud downloads and sync are the clear example: Photoshop, Illustrator and the other suite apps can be switched on, but anything they hand to Creative Cloud's background services stays on your normal connection.
Little Snitch, yes. It decides whether each connection is allowed, but the app still makes the connection itself, so VPNonly's rules still see it.
AdGuard for Mac doesn't mix with it. To filter an app, AdGuard takes over that app's connections and makes them again from its own process. Those connections don't come from the app any more, so they skip the VPN and use your normal connection, even though the app is switched on. Other filters that re-send traffic this way have the same effect, and so does a proxy running on the Mac itself. From 1.9.24, VPNonly notices both and says so in the popup, with what to change.
The fix is to tell AdGuard to leave the app alone: in AdGuard's settings, under Network, open Applications and untick it. If it's a browser, use an ad-blocking extension inside the browser instead. Then check it: click Check in the popup, and open a what's-my-IP page such as ipinfo.io in the app itself. Both should show the VPN's address. If the popup passes but the page doesn't, something on the Mac is still re-sending the app's traffic.
No. VPNonly talks to your provider's servers directly. Keep a whole-Mac VPN disconnected while using it; that changes the underlying route for everything and VPNonly will refuse a conflicting nested connection when it can detect one.
One provider needs a specific warning: Mullvad's app. It leaves a background service running after you quit it, and when Mullvad disconnects that service can switch off the Mac's packet filter altogether — the same filter VPNonly's rules live in. Rules in a filter that's off protect nothing, so an app VPNonly had put on the VPN would quietly be back on your normal connection while the popup still showed its last check. VPNonly now watches for this: within a minute it turns the filter back on, re-applies its rules, checks the exit again and tells you what happened. Even so, if Mullvad's app is on the same Mac, disconnect and quit it before you switch apps on, or uninstall it — the config you imported doesn't need it.
Not every time, but more than once. macOS fixes how an app connects at the moment it opens, and the firewall matches on that, so an app has to be relaunched to get into the tunnel. While it stays open, switching it in and out is instant and it keeps running. Quit it and open it again yourself and it's outside the tunnel, so VPNonly relaunches it once to put it back. In practice: a restart the first time you add it, and one more whenever you reopen the app from scratch. Open connections do drop when the exit IP changes, but most apps reconnect by themselves. VPNonly quits the app the way ⌘Q does before it reopens it, so it saves what it was doing, and Chrome, Brave, Vivaldi, Edge, Opera and Helium come back with the tabs they had. If an app won't quit, say it's asking about unsaved changes, its switch stays off.
Those apps get blocked from the internet until it's back. They never silently fall back to your normal connection. With Allow Local Network on, they can still reach devices on your own network, like your router or printer.
Yes. Allow Local Network in the ⋯ menu is on unless you turn it off. Apps on the VPN reach the private network your Mac is on over Wi-Fi or Ethernet directly: your router's settings page, a printer, a NAS, or a local dev server. Everything else still goes through the tunnel, including any private address that isn't on your network. Very large networks, bigger than a /16 like some offices use, aren't included.
A few things stay closed on purpose. Apps on the VPN can reach your router only on ports 53, 80 and 443, which covers DNS and most routers' settings pages, and on most routers keeps them away from UPnP and the other ways an app can ask it to open a port. A settings page on another port, like 8443, stays blocked. Local access also stays off while your Mac uses a proxy, because a proxy on your network could carry an app's traffic around the tunnel.
Turn it off on networks you don't trust, like public Wi-Fi, because a device there could otherwise receive an app's connections directly. And if your network uses the same addresses as your VPN's own internal services, or as a home network you reach through your own WireGuard server, those addresses go to the local network while this is on.
Not for the apps you leave alone. They keep your normal connection, untouched. The apps you switch on run at your VPN server's speed, the same as with any VPN.
The one thing VPNonly turns on for the whole Mac is the firewall built into macOS, which it uses to pick out the apps you chose. Its cost is negligible at home internet speeds.
If a speed test shows a small difference, run it a few times, because results vary a little from one run to the next. A test in a browser that's on the VPN also measures the VPN server, not your own line.
Creating a network interface and firewall rules needs admin rights. It asks on first setup and when a security-sensitive engine update needs approval. The exact root-owned engine is open source, so you can read every privileged line before you trust it.
Two programs from the WireGuard project, run as child processes: wireguard-go (MIT), with one small published patch so every provider accepts its packets and every connection sends packets small enough for the tunnel, and wg from wireguard-tools (GPL-2.0-only), unmodified. Full notices, versions, upstream source links and a GPL written offer are in third-party-notices.txt, also included in the download.
VPNonly's own privileged code, the part that runs as root, is MIT and on GitHub. The app also bundles Sparkle for updates; its licence is included in the download. "WireGuard" is a registered trademark of Jason A. Donenfeld. VPNonly isn't affiliated with the WireGuard project or with any VPN provider.
No. No account, no analytics in the app, no server of mine in the path. Your WireGuard key stays on your Mac. The app talks to my side twice: once to activate your license, and occasionally to check for a new version.
Your menu bar is full. Macs with a notch hide icons that don't fit, newest first, so the app is running even though you can't see it. Quit a menu bar app you're not using and the shield appears.
SplitTunnel.app runs alongside a VPN client you already use and sets each app to VPN, direct or blocked. VPNonly replaces the VPN client instead: it connects to your provider itself over WireGuard, so your Mac never joins the VPN and only the apps you pick use it. They charge $49 a year, this is $19 once. Their Network Extension approach does avoid the one-time restart, which is a fair advantage, and it's on my list.
The Mac app, a license for 2 Macs, and all future updates. The privileged engine source is public and MIT licensed either way.
Open your purchases page and sign in with the email you bought with. Your download and licence key are both there, and your licence doesn't expire. If that doesn't work, email me.
Click the … button in the app and choose Uninstall VPNonly. That removes the owned tunnel, VPNonly's own firewall rules, the root engine, passwordless rule and per-app groups, then puts the app in the Trash and quits. The audited recovery script is on the install page if you've already deleted the app.
Email kanishk@armoury.in within 14 days and I'll refund you. No forms, no reasons needed.