Skip to main content

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.

SettingDescription
Game modeThe mode this matchmaker matches. It must equal the game_mode your backend sends on the ticket. See Creating a Matchmaker.
Custom attributesExtra 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.

SettingDescription
FieldThe ticket attribute to bucket on (a system or custom attribute).
SourceHow to read the field: String, Number, or Tag.
StrategyExact 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.

SettingDescription
BranchesHow 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 is and is 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.

SettingDescription
Skill Rating ModelThe 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 β.

SettingDescription
Fairness RuleWhich 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 DeltaThe largest rating spread allowed across the players considered for one match (0 to 5000). Applied on every candidate match whatever the rule is.
ThresholdOne numeric field, shown only for the selected rule. See below.

Fairness rules

RuleThreshold fieldThe match passes when
nonenoneAlways. Only Max Skill Delta applies.
rating_deltamaxRatingDeltaThe two teams' mean ratings are within that gap.
win_probwinProbMin, winProbMaxTeam 1's win probability falls inside that range. 0.5 is an even match.
draw_probminDrawProbThe 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.

Matchmakers built before the rule picker

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.

SettingDescription
Based onWhat drives the expansion. Currently Ticket Age.
Max expansion secondsHow long the constraint keeps relaxing (1 to 3600 seconds).
Skill delta growth per secondHow 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.

SettingDescription
TeamsNumber of teams in a match (2 to 8).
Min players per teamSmallest team the match can start with (1 to 64).
Max players per teamLargest 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