Skip to content

Glossary

Every term these documents use. Grouped by subject rather than alphabetised, since most of them only make sense next to their neighbours.


TermMeaning
TicketOne player or one party waiting to be matched, and the unit of matchmaking. The game backend creates it, and it carries everything the engine needs to know about those players. It leaves the pool when it is matched, cancelled, or expires. The ID is a UUID chosen by the caller.
PartySeveral players who queued together and have to land in the same match on the same team. A party is one ticket with several players in it, never several tickets. The engine will not split a ticket across teams.
PoolEvery ticket currently waiting in a queue, and the engine’s working set. Pool size drives match quality more than any other number: more waiting players means more candidates to choose between.
MatchThe engine’s output: a set of tickets, divided into teams, with a chosen host to run on. Its UUID makes a natural session key.
Backfill requestA request to find more players for a match that is already running, because someone left or it started under-full. The game backend posts it on behalf of a live game server.
HostA place a match can be played: a region, a datacenter, a specific machine. IVK Match never interprets host identifiers. Whatever strings you send in Player.latencies come back as the match’s chosen host, so pick strings your provisioning layer already understands.
Skill ratingThe number you assign to a player to say how good they are, sent as Player.mmr. The engine does not compute, store, or update it; that is the game backend’s job. It is unitless, and the queue’s parameters have to use the same scale you send. See Nemesis § The skill rating scale.
AttributeA named property of a ticket that affects who it may be matched with: playlist, platform, language, input device. Each attribute carries what a ticket is (values) and what it will accept (accepts). That pair is how opt-in crossplay gets expressed.

TermMeaning
QueueA group of players who want the same kind of match, and the unit of configuration. One YAML file describes one queue completely. Tickets are always created into a specific queue.
Queue IDA queue’s stable identity, taken from the file’s queue_id field and never from its filename. May be dot-separated (acme.ranked.solo), which groups a customer’s queues and lets outcome consumers subscribe by namespace.
RulesetA named matching configuration inside a queue. One queue can run several side by side (different team sizes, playlists, or skill brackets) and each ticket picks which rulesets it competes in. Each ruleset runs its own engine instance over the queue’s pool.
Engine parameters (params)The settings on a ruleset that control matching: team shape, latency budgets, scoring weights. Documented in full in Nemesis.
engine_defaultsParameters declared once at the queue level and merged into every ruleset, so a multi-mode queue does not repeat twenty settings five times. Objects merge recursively; arrays are replaced wholesale.
Hot reloadConfiguration changes take effect without a restart. The container watches the config directory and applies valid edits within a second. An invalid edit is rejected and the queue keeps running its last known-good configuration.
RetirementThe deliberate shutdown of a queue, via retired: true in its file. Deleting the file does not retire a queue.
QuarantineA queue taken out of service by the runtime after a state error. Unlike a config error, it does not resolve itself; it needs an operator.

TermMeaning
NemesisThe match engine. Stateful and iterative: it keeps working on the matches it is assembling and improves them tick by tick, rather than solving the pool from scratch each time.
TickOne round of engine work, run every tick_rate_secs (normally once per second). Several parameters, wait_time among them, are measured in ticks rather than seconds.
Hard filterA rule that decides whether two tickets may share a match at all: latency budgets, attribute compatibility, match size. Failing a hard filter removes a candidate entirely, however good the fit would otherwise be.
ScoringHow the engine ranks the options the hard filters left it. Skill closeness, connection quality, and team balance are weighted against each other. The weights only mean anything relative to one another.
OriginThe host a ticket’s players are collectively best served from. Used by max_latency_by_origin to give different regions different latency budgets.
Host coverageThe share of the current pool a ticket can reach, given the hosts it finds acceptable. Low coverage is how a pool stops being matchable: strict latency budgets leave each ticket accepting one host, and no two tickets accept the same one. The min_host_coverage_* parameters exist to prevent that.

TermMeaning
OutcomeAnything IVK Match needs to tell the game backend about asynchronously: a match was formed, a backfill was filled, tickets expired or were removed. The message shape is the same regardless of how it is delivered.
SinkHow outcomes reach the game backend: webhook, WebSocket, or NATS JetStream. Chosen per queue in that queue’s config. See Outcomes.
At-least-once deliveryThe guarantee every sink offers. An outcome will arrive, and may arrive more than once. Consumers have to be idempotent; key on Outcome.id or Match.id.
metadataAn opaque blob you attach to a ticket. IVK Match never looks inside it and hands it back verbatim on every outcome about that ticket. The place for your session IDs, party IDs, and anything else you want returned without a side lookup table.
engine_inputThe structured payload the engine does read: players, skill ratings, measured latencies, attributes. Validated at submission; a malformed payload is rejected.
engine_outputThe engine’s structured result on a match: teams and host selection. The counterpart to engine_input.
ReactivationPutting already-resolved tickets back into the pool. The compensating action for a match the backend cannot honour, most often because provisioning failed. Reactivated tickets keep their original queue position.

TermMeaning
ContainerOne IVK Match process, serving one customer, holding all of that customer’s queues. The unit of tenancy: isolation between customers comes from running separate containers, not from anything inside the application.
Queue-config directoryThe read-only mount holding one YAML file per queue. The source of truth for configuration; there is no registration API and no database.
State directoryThe read-write, durable mount holding pool checkpoints and undelivered outcomes. Not optional: with ephemeral storage, every player waiting in queue is dropped on restart.
CheckpointA periodic snapshot of a queue’s pool to the state directory, so queued players survive a container restart.
DashboardThe embedded operator UI on port 3002. A live view of queues, the pool, and recent matches. Unauthenticated, so never expose it outside the platform’s own network.
Model A / Model BThe two integration shapes. In Model A the game backend receives the match and provisions the server itself; this is what works today. In Model B IVK Match provisions the server and returns a match that is ready to join. See Integration Flow.

TermWho it means
PlayerThe game client. Never talks to IVK Match directly.
Game backendThe customer’s service. Owns identity, skill ratings, and session state; the only thing that calls IVK Match.
IVK MatchThe matchmaker — the managed service, or a self-hosted container at a later stage. Holds the pool, forms matches, emits outcomes.
OrchestratorThe platform’s gameserver provisioning API.
Game serverThe dedicated server process a match is played on.
Platform / resellerThe gameserver-orchestration company offering IVK Match to its own customers.
Game team / customerThe studio authoring queue configs and integrating the API.