Matchmaker In-Depth
Learn more about Edgegap’s no-code matchmaker concepts in-depth and customize to your needs.
See Getting Started for your first steps with Matchmaker, game integration, and detailed examples.
✔️ Introduction
Edgegap Matchmaker is a managed service using your own rules to find the optimal group of teammates and opponents in seconds. Get started in 5 minutes and test the entire feature set for free. Upgrade when you're ready to a private dedicated cluster with enhanced security. Native integration with Edgegap Deployments delivers best-in-class ping no matter where your players are located.
Our matchmaking philosophy is driven by player perspective, with core principles of matchmaking:
maximizing match fill rate and social integration (friends and lobbies),
fast matches and high match quality controls (low latency, similar preferences),
high service availability, observability, analytics, and user-friendly error handling.
To deliver on our core principles, we prioritize first and foremost:
real world examples, game engine SDKs, and step by step guides,
modular and configurable features, focused on player experience,
no-code configuration and support for zero downtime service updates.
⭐ Essentials
See Getting Started for your first steps with Matchmaker, game integration, and detailed examples.
There are three essential concepts to each Matchmaker:
☁️ Hosting Cluster - underlying server infrastructure, fully managed and operated by Edgegap.
📏 Configuration - set of rules and settings that define how the matchmaker will operate.
🌐 Service Instance - the 24/7 live matchmaking service running on the Cluster, using Configuration to match players together and produce deployment (server) assignments.
To take advantage of new features and bug fixes, you’ll need to update your matchmaker version.
☁️ Hosting Cluster
To make things easy, we host and manage matchmaking entirely for you 24/7. You can use our
Free Cluster (shared) to test all features and explore synergies with your design,
matchmakers on free cluster shut down after 3 hours automatically, requiring restart,
Private Cluster to ensure stable and dedicated environment for your production needs.
Private Cluster Tiers
We currently offer 3 private cluster tiers to cater to everybody’s needs:
Best Suited For
enthusiasts, solo developers
commercial releases
high-traffic launches
Resources
1 vCPU + 2GB RAM
6 vCPU + 12GB RAM
18 vCPU + 48GB RAM
Redundancy
1x virtual node
3x virtual nodes
3x virtual nodes
Price (hourly)
$0.0312
$0.146
$0.548
Price (30 days)
$22.464
$105.12
$394.56
Upgrading to a private cluster only takes one click. Changing Private Cluster Tiers after launch, without any player downtime, is also possible with ⏩ Rolling Updates. Managed clusters provide you high-availability service hosting maintained by Edgegap.
Prepare for success and optimize after launch, so you don’t block your players on release day.
📏 Configuration
Every matchmaker is based on JSON configuration, validated automatically during restarts.
See Getting Started for our SDKs and detailed example scenarios.
Editing a running matchmaker will trigger a quick reload, deleting all tickets and causing short downtime.
Profiles
Profiles represent entirely separated matchmaking queues, only sharing the same matchmaker version. You can configure any number of profiles for your matchmakers, though splitting up your player base will result in longer queue times for your players.
Some game modes may require more vCPU / RAM, especially if they support a higher number of players. A single matchmaker may include multiple profiles, each linked to an app version with adjusted resources.
Application and Versions
Each matchmaker profile points to Apps and Versions in your Edgegap organization. Separating development and production environments with separate matchmaker may help prevent accidentally releasing a version which is not production ready.
Rules
Every ticket joins matchmaking queue based on initial
rules defined for their chosen profile.
An openAPI specification will be generated based on your config once you create your matchmaker.
Rules
Each entry in profile at path .rules.initial
represents a rule, where:
key is a string value to name the rule however you prefer; e.g.
match_size
, andvalue is an object defining the type and attributes of the rule, adhering to our standard ruleset.
Operators player_count
and latencies
may only be used once per profile.
Operators (rule type)
To demonstrate various operators, we will refer to our example configuration:
All rules have to be met simultaneously to initiate assignment. You may match using operators:
player_count
is a special rule defining how many players need to match to initiate assignment,
example defaults to 1 team (no team split), see Teams for more details,
matchmaker always strives to maximize match fill rate, up to specified
max_team_size
:if max team size is reached the match is made immediately,
otherwise, players wait in queue to fill match until expansion (or expiration) is about to elapse,
shortly before expanding (or expiring), if a partial match is possible (>min and <max team size), this match will be made with all players in same expansion stage and any preceding expansion stages with matching rules (other than player count).
Rule player_count
is designed to maximize match fill rate (players per match).
Rule player_count
is required and may only be defined once in your initial configuration rules.
string_equality
matches players with the exact same string value, for example:
example
selected_game_mode
rule will match players case sensitively:✅ Alice + Bob + Dave may match,
❌ Alice + Erin, or Charlie + Frank will never match.
Alice
Erin
Frank
Bob
Charlie
Dave
number_difference
matches players within the absolute numerical difference from each other:
example
elo_rating
rule above with"max_difference": 50
initially:✅ Alice + Bob may match, or Bob + Charlie may match,
❌ Alice + Bob + Charlie will never match.

latencies
is a special rule matching players within a specific difference range in ping values:
this presents a “soft” solution to splitting your player base, enabling matching with neighboring regions, especially improving match speed for less populated regions,
max_latency
should be specified to discard locations above a given threshold,
Our example beacons
rule above with "difference": 100, "max_latency": 200
initially:
✅ Alice and Bob will match:
Tokyo is discarded (>200 ms),
latency for Chicago within 100 ms absolute difference.
Chicago
✅
75.0
12.3
87.3
Los Angeles
❌
113.2 ❌
145.6
32.4
Tokyo
n/a
n/a
233.2 ❌
253.2 ❌
❌ Alice and Charlie will never match:
no beacons have < 200 ms latency for both players,
Alice lives in North America - Illinois,
Charlie lives in Asia - Japan.
Chicago
n/a
n/a
12.3
215.6 ❌
Los Angeles
n/a
n/a
145.6
238.3 ❌
Tokyo
n/a
n/a
233.2 ❌
24.2
Rule latencies
is optional and may only be defined once in your initial configuration rules.
intersection
matches players with one or more overlapping string values, case sensitively:
example
selected_map
rule above with"overlap": 1
:✅ Alice + Bob + Charlie may match, or Alice + Bob + Dave may match,
❌ Alice + Bob + Charlie + Dave will never match.

Rule Expansion
Optionally, expansions
can be defined to modify each rule’s attributes at time intervals after ticket creation, effectively expanding the pool of players which can be matched, speeding up queue times.
Initially, we require 1 team composed of exactly 4 players (possibly split in groups) with:
maximum of 125 ms latency against the same (any one) beacon,
latency difference of 125 ms or less between lowest and highest player value for that beacon,
skill rating difference of 50 points or less between lowest and highest ranking player,
the exact same (case sensitive) selected game mode,
at least one matching map selection (case sensitive) amongst players,
at least one matching backfill group size value amongst players - see Backfill.
In the example above, we expand the search by modifying attributes after:
30 seconds:
4 players
150 skill rating range
max 250 ms latency
60 seconds:
4 players
200 skill rating range
max 250ms latency
3 minutes (180s):
1-4 players
200 skill rating range
any latency
Teams
To support multiple teams, increase team_count
value. Get total number of players by multiplying team size and team count:
for
"team_count": 2
and"max_team_size": 5
, a total of 10 players is allowed for a match,for cooperative and free-for-all game modes, set
"team_count": 1
.
Team IDs will be assigned to 🎫 Player Tickets (accessible by game clients), and injected in deployments as Injected Environment Variables (accessible by dedicated servers).
🎫 Player Tickets
Each player creates tickets to join the matchmaking queue. Tickets are compared and if criteria defined in the 📏 Configuration is met, a deployment will be assigned, and players may establish connection with game server.
See Getting Started for your first steps with Matchmaker, game integration, and detailed examples.
Matchmaking Process
The matchmaking process can be summarized in a few steps:
Player creates a ticket
status="SEARCHING"
,Player repeatedly reads their ticket every second; looking for matches:
Team has been found
status="TEAM_FOUND"
(see Teams and Join as Group),Optionally team disbanded
status="SEARCHING"
, shuffling groups.Optionally team disbanded
status="SEARCHING"
, teammate abandoned.Optionally group disbanded
status="CANCELLED"
, group member abandoned.
Match has been found
status="MATCH_FOUND"
,Deployment started, waiting while Assignment is
null
,Deployment may be retried several times if 4. Deployment Erroroccurs,
Host has been assigned
status="HOST_ASSIGNED"
,Deployment is Ready, server process starts initializing,
Players read the assignment (URL & external port) from their tickets,
Players retry connection to game server until ready.
Matchmaking may stop before
"MATCH_FOUND"
due to either:Player abandoning (deleting) their ticket,
Ticket is immediately deleted and reading it will return
404 Not Found
.
Ticket expiration period reached
status="CANCELLED"
,Ticket can be read until removal period is reached, then it’s deleted (returns
404
).
Maximum deployment retries exhausted
status="CANCELLED"
,Ticket can be read until removal period is reached, then it’s deleted (returns
404
).
If players experience any issues, or a long queue time, they may attempt deleting their current ticket and restarting the process by creating a new ticket.
If the player has been matched and assigned a game server, their ticket will be deleted automatically. Players who abandon queue after HOST_ASSIGNED
may be replaced with server Backfill.
Latency Optimization
To provide best possible latency, 🎫 Player Tickets may include game clients’ latency for one or more Ping Beacons. Once clients perform a “best effort” measurement, they construct an object with all beacon-specific latency values:
{
"Los Angeles": 224.4,
"Manama": 23.2,
"Tokyo": 167.4
}
Beacon latency values are used to prevent matching with players in a vastly different region.
See Getting Started for automated ping measurement using our SDKs. Learn how to start low and increase the allowed latency gradually with Rule Expansion.
Join as Group
Joining matchmaking with your friends relies on a third party identity system. Most games will use Epic Online Services, Nakama, Steamworks, brainCloud, Lootlocker, Playfab, Apple Identity, Google Play, or others… These systems usually expose a platform-dependent friend system and a lobby/party system which can be used to communicate across the group.
To join matchmaking with a group, once the group is assembled:
Group leader requests ticket attributes from other members,
Group members provide requested information to leader,
Group leader creates a Group Ticket using our SDKs or the API,
upon receiving assignments, Group leader sends each member one assignment,
Group members follow regular Matchmaking Process as if they joined alone.
In case a group member decides to abandon their ticket prior to HOST_ASSIGNED
, all tickets of group members immediately update to status="CANCELLED"
pending removal after the configured period. Afterwards, this matchmaking process may be repeated from scratch with a new group ticket, disregarding the previous tickets.
If a group member decides to abandon match after HOST_ASSIGNED
, game server is responsible for waiting for a pre-defined period of time and finally issuing new Backfill tickets to replace the player.
If a group member’s game client crashes, they may reconnect as long as they have saved their assignment ID persistently (on drive) between game restarts.
See Getting Started and our SDKs with automated reconnect and more.
Backfill
Optionally, some games may have special matchmaking needs, such as:
allow new players to join games in progress (friends or strangers),
replace players who leave (leavers) after game starts to avoid restarting match,
allow spectators to join and observe tournament or friends’ matches (e-sports),
centralize players in larger servers to provide more social interactions (MMOs),
let players choose a server to join through a server browser (custom).
See 🥛 Backfill Showcase for a minimal example of a backfill-enabled configuration.
Use Backfill to replace Seat/Match sessions. Matchmaker only supports Default session type.
To initiate successful backfill:
Server creates /backfills for each team separately, with values:
real
assignment
data retrieved from Injected Environment Variables (deployment).adding
backfill_group_size
to tickets, listing group sizes up to available team capacity.real
tickets
data retrieved from Injected Environment Variables (matchmaker),or mock
tickets
data fabricated to match specific (real) player tickets,
Clients create /tickets or /group-tickets with
backfill_group_size
array:including value
"1"
if the player is matchmaking alone, or number of group members,additionally including value
"new"
if players wish to allow starting new games,or omitting value
"new"
if players only wish to join a game in progress (backfill).
Matchmaking Process proceeds to assignment and clients connect to the server.
Backfills ignore player_count
rule, and always match a single group. Values in backfill_group_size
dictate how many players may be matched. Creating one backfill per team ensures team round-robin strategy, with server creating new backfills to fill remaining seats as needed.
Once game server initialization concludes, your server should continually:
Start idle disconnect countdown for each new player (recommend up to 3 min):
Start a loading scene/level while players connect - a full fledged 3D scene, a lobby-like social UI, or a loading screen with a progress bar, to indicate initialization is progressing.
Trigger loading for new players on server initialization.
Trigger loading for players replacing leavers (joining via Backfills).
Keep track of new player connections or existing players leaving over time:
Listen to custom client RPCs containing new player ticket IDs (initial or backfilled), to pair tickets to netcode entities/actors.
Read and verify
assigned_ticket
player data retrieved from /backfills.Create new Backfills for unused player capacity (leavers).
Renew expired Backfills, which are deleted after
ticket_expiration_period
.
Delete any leftover Backfills once the 5. Deployment Stopped:
Unity -
OnApplicationQuit
callback,Unreal Engine -
OnWorldDestroyed
orPreExit
callback.
See Mirror Seat Management and FishNet Seat Management for player connection monitoring.
Any profile can be used for Backfill as long as attributes of backfill are valid.
🔎 Server Browser
This feature is in development, scheduled for late 2025, stay tuned for updates! 🚀
Some games may want to let players join servers with open capacity. We're working on additional matchmaking features allowing this in addition or as a replacement of classic matchmaking.
Reach out to let us know about your server browser requirements and needs!
👀 Observability
To pass information to game servers and provide operational insights, we provide additional features.
Injected Environment Variables
Your server might need to know details about it’s players. Ticket attributes, resolved rule values, and other values are injected to your deployment, in addition to default Injected Environment Variables.
Map players to tickets - players should send their ticket ID to game server when they connect.
Load Testing
Instances use CPU and memory to perform matchmaking and assignments, associating a hosting cost with each private matchmaker. See resources and prices associated with each tier on our pricing page.
The resource requirements for your instance will depend on factors:
number of players - more players make more tickets,
number of requests - polling for status more often creates more load on matchmaker,
configuration complexity - number of profiles, rules, and expansions,
average match duration - shorter duration means more matches, tickets, and higher load,
ticket expiration and removal periods - keeping stale tickets for longer consumes more memory,
client retry fallback logic - retrying with short jittered backoff helps spread traffic burst peaks.
If a matchmaker is experiencing high load:
if CPU is throttling, matchmaking could be slowed down,
if matchmaker runs out of memory, it will restart without losing ticket information, hoping that clients will implement exponential backoff and the burst is retried over longer period of time.
Use ⭐ Matchmaking SDK or implement exponential jittered backoff to recover from high load.
Player Traceability
If your players experience any issues, tracing their path to server logs can be helpful. Each Matchmaker deployment will be tagged with assigned player ticket IDs so you can easily Filter Deployments and find Container Logs to help you troubleshoot.
Display ticket IDs and deployment IDs in client match history UI to trace players when troubleshooting.
Analytics
Gain insights into your matchmaker load and performance, no code or configuration required.
🌟 Upgrade Matchmaker to Enterprise Tier to unlock matchmaking metrics and insights:


⏩ Rolling Updates
Keeping track of compatibility between server and client versions can get confusing. Follow our tips for reliable releases, updates, and preventing downtime or compatibility issues.
Your Matchmaker URL will always remain the same after restarting.
Create separate matchmakers for dev & production environments to safeguard against human error.
Start matchmakers at least 3-7 days before release to propagate DNS records to all ISPs globally. Quick restart doesn't require DNS update propagation and applies changes with 5-10 min downtime.
🟠 Before Going Live
To prepare for zero-downtime updates we recommend creating at least 3x copies of your matchmaker ahead of time, for example green
, blue
and orange
. Each game client version will create tickets for one of these, rotating after each update.
Multiple app versions can use the same server image tag, removing the need to restart your matchmaker when rolling out a new server version. Simply update the associated tag in your app version.
We strongly recommend implementing blue/green strategy for update releases.
🔃 Client + Server Update
Prerequisites:
This section assumes you’ve completed 🟠 Before Going Live.
Live game clients
c1
are currently connecting to matchmakergreen
, pointing to app versionv-green
linked with image tagt1.1.0
.You’ve previously created matchmaker
blue
pointing to app versionv-blue
linked with an older image tag which is no longer usedt1.0.0
.
In order to release game client + server updates, you may:
Prepare new server app version
v1.2.0
on Edgegap:push a new image tag to your container registry
t1.2.0
,create new app version
v1.2.0
,
Perform any dev tests by deploying your new app version
v1.2.0
:connect your game engine’s Editor to the provided URL + external port,
Update unused matchmaker
blue
to link to your new image tagt1.2.0
,enable caching for new app version
v1.2.0
, enabling cache for this version will ensure the image is also cached for versionv-blue
since they reference the same tag,wait for caching indicator in version
v1.2.0
to reach 🟢 green,
Update your new game client
c2
to use the new versionv-blue
when creating tickets:update your base URL and Authorization token in game client,
Perform QA tests and final verifications of your new game client
c2
:if you find and resolve any issues, repeat process from the beginning,
wait 3-7 days to propagate matchmaker DNS changes to ISPs globally, after the matchmaker has been stopped (quick restart doesn't require DNS updates or waiting period),
Release your new game client update
c2
on game distribution platforms,Allow time for new game client
c2
to distribute to player devices (typically up to 3-7 days):monitor outdated game clients
c1
using deployment Analytics,
Clean up unused resources in your Edgegap account:
delete image tag
t1.0.0
to free up Container Registry capacity,delete image tag
t1.1.0
to free up Container Registry capacity,turn off your
green
matchmaker to pause billing until your next update.
For your next update, increase version numbers and swap green
and blue
keywords in the guide.
⚡ Server Hotfix
Prerequisites:
This section assumes you’ve completed 🟠 Before Going Live.
Live game clients
c1
are currently connecting to matchmakergreen
, pointing to app versionv-green
linked with image tagt1.1.0
.
To release a server patch without requiring a game client update, you may:
Prepare new server app version
v1.2.0
on Edgegap:push a new image tag to your container registry
t1.2.0
,create new app version
v1.2.0
,
Perform tests and verifications by deploying your new app version
v1.2.0
:connect your game engine’s Editor to the provided URL + external port,
if you find and resolve any issues, repeat process from the beginning,
enable caching for new app version
v1.2.0
, enabling cache for this version will ensure the image is also cached for versionv-green
later since they will reference the same tag,wait for caching indicator in version
v1.2.0
to reach 🟢 green,
Update version
v-green
to link to your new image tagt1.2.0
,new matches will automatically initiate assignment with the updated tag
t1.2.0
,monitor outdated game clients
c1
using deployment Analytics,
Clean up of unused resources in your Edgegap account:
delete image tag
t1.1.0
to free up Container Registry capacity.
📗 API
Clients and servers may call API directly or with game engine SDKs, see also Getting Started.
Swagger Web UI: deploying a matchmaker will generate an openAPI specification and a convenient web UI. Open the URL in your browser to view and test all API endpoints, and to review payload examples.
Authentication
Game clients and servers authenticate with Matchmaker using Authorization
HTTP header containing your secret token (Auth Token):
Authorization: xxxxxxxx-e458-4592-b607-c2c28afd8b62
This token may be included in your game client safely, as it doesn't grant access to Edgegap API.
Keep your tokens secret and safe! Edgegap staff will never ask you for your tokens.
Authorization (S2S)
Matchmaking API token provides unrestricted access to all matchmaking API endpoints.
Individual players can be identified using the ticket ID shared between clients and server:

Enhance security and integrate custom authorization with Server to Server (below).
Server to Server
Include parameter player_ip
in player ticket with the player’s public IP address to take advantage of 1. Server Score Strategy (Best Practice) and ensure lowest possible player latency:
to authenticate players with your own third party service acting as a proxy,
or when creating tickets from a custom lobby/party service (e.g. 📦 Nakama by Heroic Labs).

Player API
These endpoints can be used directly by game clients or with Server to Server integration.
/monitor
Monitoring endpoint provides a convenient way to verify uptime of your Matchmaker Service from game clients or backend services, so you can reach out for assistance in case of urgent issues. You may integrate redundant (multiple) monitoring systems checking this endpoint for your own visibility.
/locations/beacons
Ping Beacons provide a simple yet effective way to approximate connection quality to major networking nodes and prevent high latency matches. See Matchmaker In-Depth for more.
Beacons are automatically rescaled in real time - adding/removing/replacing existing beacons. Your clients and backend should account for this and reload list of beacons before each matchmaking round.
/tickets
🎫 Player Tickets provide a simple interface for players to match together, see Matchmaking Process and 5. Game Integration.
Create Ticket (POST) - pick a matchmaking profile & submit ticket attributes:
override 📍 Server Placement by using beacon IP in place of
player_ip
in your ticket.
Read a Ticket (GET) - check on matchmaking progress and host assignment.
Delete a Ticket (DELETE) - abandon matchmaking immediately.
Unity/Android - consider using raw string interpolation to prevent code stripping of hardcoded JSONs.
/group-tickets
Join as Group endpoints allows matching deployments as a group/party/lobby:
Create Group Ticket (POST) - submit yours and your group members' tickets.
Your designated group host/leader is responsible to collect ticket attributes from players through a third party of your choice, and to distribute assignment IDs to individual group members to allow managing individual Matchmaking Process.
See Join as Group for details and Getting Started for genre-specific scenarios.
Cross-Origin Resource Sharing (CORS)
For webGL games hosted on third party distribution platforms (e.g. itch.io), sending any requests to Matchmaker from game client may result in Cross-Origin Resource Sharing policy violations. Most modern web browsers send a pre-flight request to verify that a backend service (the Matchmaker) understands and accepts communication from your game client.
Failing pre-flight check (default for security reasons) can result in one of several possible CORS-related errors, most commonly CORS header 'Access-Control-Allow-Origin' missing
.
To resolve this error, add allowed_cors_origin
parameter to your configuration to either:
whitelist your exact client hosting domains:
or whitelist a wildcard domain (including all subdomains):
Game Server API
These endpoints are used by the dedicated game server or your game backend.
/backfills
Backfill allows your game server or your backend service to manage player capacity of servers:
Create a Backfill (POST) - submit current player tickets along with matchmaking profile.
Read a Backfill (GET) - retrieve ticket information about the filled player.
Delete a Backfill (DELETE) - stop backfill depending on game server logic and design.
See Backfill for details and Getting Started for genre-specific scenarios.
/inspect
Inspect API provides real time matchmaking insights. The changes you make to your configuration and the impact on your players will be more predictable if you run tests on your matchmaker.
Inspect Tickets (GET) - list current player tickets, their status, and assignment (if available).
Inspect Matches (GET) - list current matches and resolved Rules values.
Coming Soon: pause and resume matchmaking at specific ticket stages.
🙏 Support & Requests
Your success is our priority. If you'd like to send custom requests, ask for missing critical features , or express any thoughts, please reach out in our Community Discord.
🚨 Troubleshooting
🔖 Changelog
Semantic Versioning
Our matchmaker uses official Semantic Versioning guidelines. Each configuration JSON is tied to a specific version of the matchmaker. Matchmaker version dictates which rules and settings are available in your configuration and API. Once a version is released, it will never change.
Your configuration file will be validated depending on matchmaker version used, make sure your rules are matching the matchmaker version’s capabilities.
Stop, Edit, and Start your matchmaker to upgrade your version. Quick Restart won't do it!
3.1.0 (June 10, 2025)
This is the latest matchmaker service version, recommended for production use.
🩹 Bugfixes:
Matchmakers now correctly validate tickets with multiple profiles including different rules.
✨ Improvements and new features:
More optimizations to maximize match fill rate with player_count rule. Tickets will now wait until end of expansion (or expiration) if only partial match is possible (>min and <max team size).
Full matches (max team size reached) are made immediately (no change).
Upgrade to Enterprise ☁️ Hosting Cluster to unlock matchmaking Analytics! Gain insights into matchmaker load and performance, no code or configuration required. Metrics at launch include:
total tickets, backfills, assignments, and deployments made over custom period of time,
per minute rates for the above metrics over custom period of time,
totals and time series insights into expired tickets, expanded matches, match fill rate,
API usage metrics, and more.
Improved Rules documentation with better examples and visuals.
3.0.0 (May 20, 2025)
⚠️ Breaking changes:
Use min/max team size to fill teams efficiently (replaces player count expansions):
in your configuration
player_count
rule, replaceteam_size
withmin_team_size
andmax_team_size
to achieve "best effort" matching attempting to maximize match fill rate,to require a specific number of players per team, set both min and max to the same value,
backfills bypass
player_count
rule and always match with 1 ticket (unchanged).
Tickets, group tickets, and backfills with all latencies above the highest
max_latency
in a given profile will be immediately rejected with400 Bad Request
response to ticket create request, instead of expiring:only applies if latency rule is configured,
to bypass this behavior, create an expansion with
max_latency: 99999
(any value higher than your client latency measurement timeout).
Injected environment variables containing ticket data now include field
id
(ticket ID) so they can be reused more easily when creating /backfills.
🩹 Bugfixes:
Backfill now uses configured deletion and expiration period (like tickets and group tickets).
Backfill now correctly matches using configured
intersection
rules.Fixed openAPI specification for POST /backfills request (requires
public_ip
) and GET /tickets response (team_id
is optional), including examples.
✨ Improvements and new features:
Up to 3x more potential matches are considered now, producing more optimal groups and maximizing match fill rate.
Up to 200% faster matching speed due to concurrency optimizations.
Up to 40% increased match fill rate due to optimization of expansions algorithm.
Improved service stability and increased speed of quick restarts.
2.1.0 (Feb 24, 2025)
⚠️ Breaking changes:
Separated game profile and expansion stage information in the Injected Environment Variables:
MM_MATCH_PROFILE
will now only include the profile name as it appears in the configuration.Introduced
MM_EXPANSION_STAGE
which will contain the expansion stage as a string (e.g. "initial", "15", "30").
Ticket assignments now include the group ID when Matchmaker In-Depth. Group ID is also included as an Injected Environment Variables, as a mapping of group ID to a list of the group's player IDs.
Ticket assignments now include the team ID when Matchmaker In-Depth. The team ID is also included in every ticket data Injected Environment Variables.
Matchmaker In-Depth now returns
409 Conflict
HTTP code instead of204 No Content
to indicate the ticket can't be deleted since the deployment is starting. To replace leavers, use a Backfill issued by the server after a pre-specified timeout period.Matchmaker In-Depth request body parameter
attributes.deployment_request_id
has been moved toattributes.assignment.request_id
.Matchmaker In-Depth request body now requires full assignment details as part of
attributes
parameter in addition to therequest_id
.
🩹 Bugfixes:
Resolved intersection rule values are now Injected Environment Variables in the
MM_INTERSECTION
environment variable.Quick restart feature now reliably regenerates API endpoints and openAPI specification when configuration is changed.
Fixed several bugs during matchmaker (re)start causing prolonged startup time or getting matchmaker stuck.
✨ Improvements and new features:
Increased rate limits and scalability of all API endpoints, across all matchmaker tiers.
When assigning a player to a Backfill, the new player's ticket ID will be added as a tag to the Backfill's Deployments.
Added swagger UI authentication feature to test API directly in web UI without needing postman.
Improved openAPI examples to reflect realistic requests and responses more closely.
Added new Matchmaker In-Depth meant for development and debugging purposes.
Allows listing all current player tickets in a paginated list.
Allows listing all current matches in a paginated list.
1.0.0 (Dec 9, 2024)
Backfill: Upon (popular) request, we’re adding backfill with automated ticket assignment, which allows you to reuse server seats when players leave the session.
Ideal for filling empty player seats after a match has begun, or for replacing players that have left during a match.
Join as Group: We’re adding the ability to join as a group to the already available ability to fill multiple teams with players.
Ideal for joining up in a matchmaking queue with a group of friends or coming from a common lobby.
⭐ Matchmaking SDK and ⚡ Edgegap Integration Kit by Betide Studio matchmaking SDKs:
To make integration easier, we’re now offering Software Development Kits for the most popular game engines.
Fixed a bug where the Matchmaker In-Depth was not applied correctly.
Tickets will now be automatically canceled after a Matchmaking Process if they haven't been assigned to a deployment.
You can now Matchmaker In-Depth to enhance the flow of your matchmaking process.
Deployments made by the matchmaker are now tagged with ticket IDs.
You can now edit your configuration while the matchmaker is running. This triggers a quick reload of your configuration without requiring a full on/off cycle for your matchmaker. Note: This feature is not recommended for production environments, as it deletes all current tickets and temporarily makes the API unresponsive.
Fixed Injected Environment Variables to use the correct primitive types instead of arrays.
Fixed Injected Environment Variables JSON values, which previously contained escaped characters.
0.2.3 (Oct 8, 2024)
Fixed a bug where certain headers were not accepted by the matchmaker when requests were made from a WebGL application (CORS policies).
0.2.2 (Oct 3, 2024)
Fixed issue with TLS/SSL certificate validation preventing matchmaker from launching.
0.2.1 (Sep 30, 2024)
Fixed a bug causing the beacons endpoint to return a 500 error.
0.2.0 (Sep 25, 2024)
Basic authentication is now mandatory for all endpoints.
Added the ability to configure the number of retries on server assignment failure.
Team-based matchmaking is now the default for all matchmaking configurations.
Both application and version are now required fields in all profiles.
Introduced a new endpoint to monitor the matchmaker's status.
Updated the format of the tickets environment variable in the deployment.
Added a configuration option to allow hosts to communicate with the matchmaker.
The debug API is now only available when explicitly enabled in the configuration (it is currently disabled for rework).
The
game_profile
key in the GET ticket response has been replaced byprofile
.
Last updated
Was this helpful?
🎈 Social Game Example