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 Rating Model
Declares which skill rating model this matchmaker uses, so tickets carry real
mu / sigma and finished matches can be scored. Its output connects only to a
Skill Rule, the node that acts on the rating.
| Setting | Description |
|---|---|
| Skill Rating Model | The model to bind, chosen from your models. The node shows a summary of its engine, algorithm, format, team shape, and starting μ / σ / β. |
The node also hands the Skill Rule the model's rating algorithm and its effective β. β is the scale win and draw probabilities are computed on, so a Skill Rule with no model node falls back to the engine default (25/6, about 4.17) and the same threshold behaves differently.
Without this node a Skill Rule reads whatever mu / sigma the ticket was created
with. With it, the rating is resolved server-side from the player's history and the
ticket's values are ignored. Ratings resolve per game mode, so this node is what
makes a mode rated end to end. See Skill Rating for
creating and configuring models, and
Using a Model with a Matchmaker for the
full setup.
Skill Rule
Constrains which candidate matches are allowed to form, using the ratings the
tickets carry (mu, sigma). Skip this node for unranked or FIFO matchmakers.
Pair it with a Skill Rating Model node so players carry their real rating and the rule is evaluated on the model's β.
| Setting | Description |
|---|---|
| Fairness Rule | Which constraint to apply: none, rating_delta, win_prob, or draw_prob. Shown as those exact ids, because the same names appear in the API. |
| Max Skill Delta | The largest rating spread allowed across the players considered for one match (0 to 5000). Applied on every candidate match whatever the rule is. |
| Threshold | One numeric field, shown only for the selected rule. See below. |
Fairness rules
| Rule | Threshold field | The match passes when |
|---|---|---|
none | none | Always. Only Max Skill Delta applies. |
rating_delta | maxRatingDelta | The two teams' mean ratings are within that gap. |
win_prob | winProbMin, winProbMax | Team 1's win probability falls inside that range. 0.5 is an even match. |
draw_prob | minDrawProb | The draw probability is at least that value. |
Win and draw probabilities are computed from the teams' aggregate ratings and the
model's β. Probabilities must be between 0 and 1, and any rule other than none
needs a threshold above 0. The editor reports a bad threshold inline, marks the node
incomplete and blocks publishing until it is fixed.
rating_delta rejects lopsided groups, it does not rebalance them. Teams are formed
as the lower and upper halves of a rating-sorted window, so a tight value means fewer
matches form rather than better balanced ones.
A tight Max Skill Delta gives closer matches but longer waits. Pair it with an Expansion Rule to relax the gap as tickets age.
A Skill Rule saved with the old Min Skill Delta fairness opens as none, and its
retired algorithm picker is gone. That value only ever named the Max Skill Delta cap,
so nothing about how the matchmaker matches changes.
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.