Skip to content

Per-app routing

Three Happ-compatible headers let a subscription assign routes to apps by package name. They’re applied when the user’s Routing policy is Subscription provider.

Header Value
per-app-proxy-mode Required. How listed apps are routed.
per-app-proxy-list Package names, separated by commas, semicolons or whitespace. Can repeat.
per-app-proxy-list-invert Package names whose route is the opposite of the mode. See inverted lists.

Without a valid per-app-proxy-mode, the list is ignored.

Value Listed apps
bypass, direct, off Skip the proxy and use the device network.
proxy, on, default, default_selected Use the server selected on the home screen.
default_outbound, inherit Use the default outbound from Settings. Rootful only.

Values are case-insensitive, and - works in place of _.

Bypass banking apps:

per-app-proxy-mode: bypass
per-app-proxy-list: com.bank.app, ru.sberbankmobile, com.idamob.tinkoff.android

Proxy only a few apps:

per-app-proxy-mode: proxy
per-app-proxy-list: org.telegram.messenger com.google.android.youtube

per-app-proxy-list-invert means “every app except these”. Every other installed app gets the mode, and the listed apps get the opposite:

per-app-proxy-mode: proxy
per-app-proxy-list-invert: com.bank.app, ru.sberbankmobile

Here every app goes through the proxy except the two banking apps, which bypass it.

  • The provider’s list replaces earlier provider-supplied assignments on every refresh.
  • Manual assignments survive for apps the provider doesn’t mention.
  • If the user edits an app route, the client offers to switch to manual mode, which stops applying the header.
  • Invalid package names are dropped.