Proxy Groups
A proxy group bundles nodes (and other groups) under one name that rules can target. MeowX reads groups from the proxy-groups: list.
proxy-groups: - name: Proxy type: select proxies: [Auto, HK-01, JP-01, DIRECT]
- name: Auto type: url-test proxies: [HK-01, JP-01, SG-01] url: https://cp.cloudflare.com/generate_204 interval: 300 tolerance: 50Group types
Section titled “Group types”type |
Behavior in MeowX |
|---|---|
select |
You choose the member in the app. Defaults to the first member. |
url-test |
Health-checks all members and uses the fastest one that is alive. |
fallback |
Health-checks all members and uses the first one (in list order) that is alive. |
load-balance |
Accepted, but behaves exactly like select: traffic is not spread across members, and strategy is ignored. |
relay |
Accepted, but behaves exactly like select: members are not chained. To chain nodes use dialer-proxy; see Chained proxies. |
Any other type makes the whole configuration fail to load.
Options
Section titled “Options”| Key | Type | Default | Description |
|---|---|---|---|
name |
string | required | Group name. Must be unique across proxies and groups, and must not be a built-in target (DIRECT, REJECT, REJECT-DROP, PASS, COMPATIBLE). |
type |
string | required | See Group types. |
proxies |
list | [] |
Members: node names, other group names, or built-in targets such as DIRECT and REJECT. Every name must exist, otherwise the configuration is rejected. Groups must not contain each other in a loop. |
url |
string | https://cp.cloudflare.com/generate_204 |
Health-check URL for url-test / fallback. Both http:// and https:// work. |
interval |
int (seconds) | 300 |
Time between automatic health checks (url-test / fallback). Values below 1 are treated as 1; there is no “0 = off” as in mihomo, so don’t set 0. |
tolerance |
int (ms) | 0 |
url-test only. Keep the current member while its delay is within this many milliseconds of the fastest member, to avoid switching back and forth between similar nodes. |
lazy |
bool | true |
When true, a scheduled health check is skipped if the group hasn’t carried any traffic during the last interval. |
expected-status |
string or int | any status | Which HTTP status codes from the health-check URL count as “alive”. Same syntax as mihomo: 204, 200/204, 200,204, 200-299, [200-299], 200/300-399; * or empty means any status. An invalid value produces a warning and is treated as not set. |
hidden |
bool | false |
Hide the group from the app’s node list. It still works and can still be referenced. |
icon |
string | — | Image URL shown next to the group name in the app. |
Ignored options
Section titled “Ignored options”These group options are read by mihomo but have no effect in MeowX: use (proxy providers are not supported, so a group that gets its members only from use: ends up empty), include-all, include-all-proxies, include-all-providers, filter, exclude-filter, exclude-type, timeout, max-failed-times, strategy, disable-udp, interface-name, routing-mark, default-selected.
Health checks
Section titled “Health checks”Health checks apply to url-test and fallback groups.
- When they run. Once as soon as the tunnel starts (so a
fallbackgroup doesn’t start on a dead first node), then everyintervalseconds. Withlazy: true, a scheduled check is skipped while the group is idle. Checks are also skipped while the device is asleep or the cellular radio is idle, and one catch-up check runs when activity resumes if a check was missed. - How a member is tested. MeowX connects through the member to
urland measures one HTTP request. Each test has a 5-second budget; at most 10 tests run at the same time. A member whose test fails or times out, or whose status code doesn’t matchexpected-status, is marked unavailable. - Choosing a member.
url-testpicks the member with the lowest delay. Untested members rank after members known to be alive; unavailable members come last. Withtolerance, the current member is kept while it is alive and withintolerancems of the fastest.fallbackpicks the first member in list order that is not marked unavailable.- If every member is unavailable, the group uses its first member.
- Shared results. When several groups contain the same node and check at the same time, a recent result for that node is reused instead of testing it again.
The latency numbers you see after tapping “test” in the app’s node list come from the app’s own latency test, whose method and URL are set in the app’s settings. Automatic member selection always uses the group’s url through the node.
Failover on connection errors
Section titled “Failover on connection errors”url-test and fallback groups don’t wait for the next health check when a member breaks:
- If connecting through the current member fails, the member is marked unavailable, the group re-selects, and the same connection is retried through the next member. This continues until a member works or all have been tried. A member that connects successfully again is cleared of its “unavailable” mark.
- After all members fail, a full health check of the group is scheduled (at most once a minute).
- If a member accepts connections but repeatedly returns no data (three times within 60 seconds), that member is re-tested.
- A connection rejected by a
REJECTmember, and a failure caused by the device having no network at all, do not mark members unavailable.
Pinning a node in url-test and fallback groups
Section titled “Pinning a node in url-test and fallback groups”As in mihomo, you can manually choose a member of a url-test or fallback group in the app. The chosen member is pinned:
- The group keeps using the pinned member as long as it is alive, regardless of delay or order.
- If a health check or a failed connection marks the pinned member unavailable, the pin is dropped and the group goes back to automatic selection. A note is written to the app’s log.
- Selecting the pinned member again, or turning Auto select back on for the group, removes the pin.
- A pin is remembered across restarts until it is removed or dropped.
Built-in targets
Section titled “Built-in targets”These names can be used as group members and rule targets without being defined:
| Name | Behavior |
|---|---|
DIRECT |
Connect directly. |
REJECT |
Refuse the connection. UDP is dropped. |
REJECT-DROP |
Same as REJECT. |
PASS |
Treated as DIRECT. (In mihomo, PASS skips to the next rule; MeowX does not implement that.) |
COMPATIBLE |
Accepted so that configurations load, but it has no outbound of its own. As a rule target it falls back to DIRECT. Avoid using it. |
GLOBAL is not built in. In Global mode MeowX uses a group named GLOBAL if you define one; see Outbound mode.
