server_address field from the Minecraft handshake packet and matching it against the domain rules defined in your MinecraftJoinRoute resources.
hostnames vs filterRules.domain
A MinecraftJoinRoute has two hostname-related fields with different purposes:
In most cases you set both to the same values.
hostnames is the edge-layer availability signal; filterRules is where the routing logic lives.
Basic hostname routing
To route players who connect toplay.example.com to a specific backend:
Wildcard routing
A wildcard pattern*.example.com matches any single subdomain level under example.com. It does not match example.com itself.
lobby.example.com, survival.example.com, etc., but not example.com or a.b.example.com.
When both an exact domain and a wildcard cover the same hostname, the exact match is tried first.
Multiple domains for one route
Use multiple rules within a single rule set to match several hostnames with one route:any rule set adds its domain to the edge routing table independently. The controller automatically removes exact domains that are already fully covered by a wildcard in the same set.
Route priority
When multiple routes could match the same connection at the network proxy layer,priority controls which is evaluated first. Higher integers win.
Combining conditions with all
Use type: all when a route should only match if the connection satisfies every condition in the set — for example, a specific hostname and a player permission:
type: all, only the first rule’s domain is added to the edge routing table (because all rules must match simultaneously, and a connection can only arrive on one hostname).
Route conflicts
A route conflict occurs when twoMinecraftJoinRoute resources from different Gateway objects map the same hostname to different clusters. When a conflict is detected:
- The conflicting gateway’s routes are excluded from the edge snapshot.
- The controller logs the conflict but does not mark the route as failed.
- The remaining (non-conflicting) gateway continues working normally.
Gateway can share domains — the network proxy evaluates them in priority order.
Forge and proxy suffix stripping
The edge filter automatically strips Forge and BungeeCord/Velocity\0-separated suffixes from the server_address field before matching. For example, play.example.com\0FML\0 is treated as play.example.com. This applies regardless of which network proxy integration you use.