How split routing works
Most VPN clients, once connected, point your Mac’s default route at the VPN interface — every packet you send, for every app and every website, goes through the VPN tunnel first. SplitLane does the opposite by default: it routes only the destinations you list, and sends everything else directly.
Concretely, when you apply your rules, SplitLane’s privileged helper:
- Adds a route for each rule’s destination that points at the VPN interface (
route add -net <cidr> -interface <vpn-interface>). - Restores your Mac’s default route to your physical network interface (Wi-Fi or Ethernet), if it isn’t already there. This step is on by default and can be turned off per rule set in Settings if your environment requires a full-tunnel policy instead.
The result: traffic to your rule destinations goes through the VPN; everything else — video calls, browsing, cloud storage — goes direct. SplitLane doesn’t establish the VPN connection itself; it only manages routing for a VPN connection you already have.
Traffic Mode
The Dashboard has a three-way Traffic Mode switch that changes what “everything” means, without touching your individual rules:
- Split Routing (default) — only your rule destinations go through the VPN, as described above.
- All via VPN — every packet is routed through the VPN interface, with no per-rule routing involved. Disabled when no VPN is connected.
- All Direct — every packet is routed to your physical network, bypassing the VPN entirely for routing purposes.
The Dashboard’s route diagram reflects the actual observed state (not just your intent), so if something doesn’t match what you expect, it’s worth a look. Switching modes has no confirmation dialog — it’s designed so getting back to Split Routing (or any other mode) is always one click.
While Traffic Mode is set to anything other than Split Routing, the Apply/Reload controls on Rules, the Dashboard, and the menu bar are all disabled — rule changes still save, but there’s nothing to apply until you switch back to Split Routing.
Rules and groups
Every rule is either an IP/CIDR rule or a domain rule, and can optionally belong to one group. Groups let you toggle a whole set of related rules on or off together — useful for things like “everything for this client project” or “staging environment access.”
A rule only counts as effectively enabled when both of these are true:
- the rule’s own enabled switch is on, and
- the rule is unclassified (no group), or its group is enabled.
Toggling a group, deleting it, or moving a rule in or out of a group all mark your rule set as dirty (unapplied changes). Renaming a group, or creating an empty one, does not. Deleting a group doesn’t delete its rules — they move to Unclassified.
Auto reapply — and its limits
By default, SplitLane watches for your VPN reconnecting and reapplies your last-confirmed rule set automatically, so you don’t have to open the app and click Apply every time you connect. This runs with a short debounce after the interface comes up, to avoid racing the VPN client’s own route setup.
This automatic reapply has two limits that matter in practice:
- Domain rules aren’t re-resolved unless the app is running. If SplitLane isn’t open when your VPN reconnects, domain-based rules are applied using whichever IP addresses were last resolved — not freshly looked up. Open SplitLane and click Reload to force a fresh resolution.
- The default route isn’t restored automatically if the app isn’t running. Restoring the default route to your physical network (the mechanism that keeps everything except your rules going direct) only happens while SplitLane’s window or menu bar is active to re-enforce it. If your VPN reconnects while SplitLane isn’t running, your Mac temporarily behaves like “All via VPN” — your rule destinations are still routed correctly, but other traffic also goes over the VPN, until you next open SplitLane and it reasserts the split state.
Neither limitation is a bug: they’re a deliberate trade-off to keep SplitLane’s privileged helper from making unattended default-route changes when nothing is watching. Opening the app and clicking Reload always brings things back in sync.