Skip to content

RouteArmor — per-app routing (roadmap)

A per-app traffic-routing layer that lets you set different VPN exits (or no VPN) per application:

  • Slack → United States
  • Signal → direct (no VPN)
  • Instagram → rotating EU exits every 4 hours
  • Banking app → direct (banks often block VPN ranges)
  • Everything else → default exit
PlatformImplementationWhat you get
AndroidStandard VpnService per-app allowlist/denylistFull per-app routing. Trivial.
macOSNetwork Extension with per-app rulesFull per-app routing. Requires macOS 11+.
iOSCannot be done for arbitrary apps. iOS restricts per-app VPN to MDM profiles.Partial: (1) browser-level routing via a Safari Web Extension; (2) Shortcuts integration to toggle exits per invocation; (3) “route this app” prompt that swaps the default exit. Not arbitrary-app routing.

We will not ship iOS “per-app VPN” claims that the OS cannot deliver. Android and macOS get the real feature. iOS gets the honest subset.

Route policies are JSON-serializable, syncable through Vaultyx, and human-readable:

[
{ "match": { "bundle_id": "com.slack.slack" }, "exit": "ash" },
{ "match": { "bundle_id": "org.signal.signal" }, "exit": "direct" },
{ "match": { "bundle_id": "com.instagram.*" }, "exit": { "rotate": ["nbg1", "hel1"], "every_hours": 4 } },
{ "match": { "bundle_id": "com.chase.mobile" }, "exit": "direct" },
{ "default": true, "exit": "sovereign" }
]

Apps managed by the Katafract client enforce the policy; apps outside the Katafract manager fall through to the OS default tunnel.

Not committed. Android-first implementation aligns with the Wraith Android migration currently queued. Rough estimate: 1 week for Android + 2 weeks for macOS. iOS browser-extension + Shortcuts comes after.