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 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.

SettingDescription
ModelThe rating model: Plackett–Luce, Thurstone–Mosteller, or Bradley–Terry.
FairnessNone (no fairness constraint) or Min Skill Delta (reject matches whose skill gap is too wide).
Max skill deltaThe 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.

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