Matchmaking Nodes
A matchmaker is a graph of nodes. Tickets enter at a Ticket Input node, flow left to right through the nodes you connect, and leave at an Output node. Each node narrows who can match whom or shapes how the match is formed.
You add nodes from the palette, drag to connect their ports, and configure each one in the side panel. This page describes every node and its settings.
How tickets flow
- Every matchmaker starts with one Ticket Input and ends with one or more Output nodes.
- A connection carries the tickets that reach it into the next node.
- A Split is the only node that branches: it sends tickets down different paths based on a condition.
- Bucket and rule nodes do not branch. They partition or constrain the tickets passing through.
Roughly: bucket and split decide who can match whom, skill and expansion decide how fair and how patient matching is, and team composition decides the shape of the match.
Ticket Input
The entry point. Declares the game mode this matchmaker serves and the attributes a ticket carries.
| Setting | Description |
|---|---|
| Game mode | The mode this matchmaker matches. It must equal the game_mode your backend sends on the ticket. See Creating a Matchmaker. |
| Custom attributes | Extra fields your backend sets on the ticket, each with a type (String, Number, or Boolean). Use them in Bucket and Split conditions. |
Every ticket also carries these system attributes, always available to other nodes:
player_id, game_id, game_mode, preferred_az (region), mu, sigma, and
rating_bucket.
Bucket by Field
Partitions tickets by an attribute so that only tickets in the same bucket can match each other. Use it to keep, say, one region or one rating band together.
| Setting | Description |
|---|---|
| Field | The ticket attribute to bucket on (a system or custom attribute). |
| Source | How to read the field: String, Number, or Tag. |
| Strategy | Exact match (one bucket per distinct value), Numeric width (fixed-size numeric bands, set Width), or Ranges (explicit numeric boundaries, set Ranges). |
Tickets only match inside their bucket, so buckets that are too narrow can slow matching. Pair a tight bucket with an Expansion Rule if wait times grow.
Split
Routes tickets down conditional branches, with a catch-all for everything else. Use it to run different rules per mode, per region, or per any attribute.
| Setting | Description |
|---|---|
| Branches | How many conditional branches the node has (1 to 6). Each branch has its own condition. A catch-all branch is always present in addition. |
Each conditional branch carries a condition on its connection: a field, an operator, and a value.
- String and Boolean fields support
isandis not. - Number fields support
=,≠,>,≥,<, and≤.
Conditions are evaluated in order and the first match wins. Any ticket that matches no branch takes the catch-all.
Skill Rule
Balances teams by a skill model so matches stay competitive. It reads the ticket's
rating (mu, sigma). Skip this node for unranked or FIFO matchmakers.
| Setting | Description |
|---|---|
| Model | The rating model: Plackett–Luce, Thurstone–Mosteller, or Bradley–Terry. |
| Fairness | None (no fairness constraint) or Min Skill Delta (reject matches whose skill gap is too wide). |
| Max skill delta | The largest allowed skill gap between matched tickets (0 to 5000). |
A tight max skill delta gives closer matches but longer waits. Pair it with an Expansion Rule to relax the gap as tickets age.
Expansion Rule
Relaxes matching constraints as a ticket waits, so players are not stuck in the queue when no perfect match exists.
| Setting | Description |
|---|---|
| Based on | What drives the expansion. Currently Ticket Age. |
| Max expansion seconds | How long the constraint keeps relaxing (1 to 3600 seconds). |
| Skill delta growth per second | How much the allowed skill gap widens each second (0 to 1000). |
Team Composition
Defines the shape of the match: how many teams and how many players per team.
| Setting | Description |
|---|---|
| Teams | Number of teams in a match (2 to 8). |
| Min players per team | Smallest team the match can start with (1 to 64). |
| Max players per team | Largest team the match can hold (1 to 64). |
For a 2v2, set Teams to 2 and both player counts to 2. For a 5v5, set Teams to 2 and both player counts to 5.
Output
The terminal node. A match that reaches Output is finalized and GameFlow allocates a server for it. Output has no settings. The target game is set on the matchmaker itself, not on this node.
Next
- Creating a Matchmaker: put these nodes together and publish.