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.
Headers
Section titled “Headers”| 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 _.
Examples
Section titled “Examples”Bypass banking apps:
per-app-proxy-mode: bypassper-app-proxy-list: com.bank.app, ru.sberbankmobile, com.idamob.tinkoff.androidProxy only a few apps:
per-app-proxy-mode: proxyper-app-proxy-list: org.telegram.messenger com.google.android.youtubeInverted lists
Section titled “Inverted lists”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: proxyper-app-proxy-list-invert: com.bank.app, ru.sberbankmobileHere every app goes through the proxy except the two banking apps, which bypass it.
How it combines with user choices
Section titled “How it combines with user choices”- 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.