This guide shows you how to add matchmaking to an Unreal Engine multiplayer game that already runs on Edgegap's dedicated game servers: players select Find Match, get grouped with players close to them, and connect to a server Edgegap starts near them. When everyone leaves, the server stops itself.
Once your game server is containerized, Edgegap deploys it worldwide to 615+ Edge Cloud locations (on-demand) from a simple API call and billed exclusively on usage: no entire server to rent, provision or keep running between matches. For persistent servers of reserved capacity, Edgegap offers Private Fleets. Edgegap's Matchmaking builds on top of that and is optional.
You configure the matchmaker with a JSON file in the Edgegap dashboard, with no backend code. In your game, two ready-made C++ files measure ping, create the ticket, wait for a server and connect, and Blueprints can call them directly. They connect with Unreal's own ClientTravel, so they work with any game that uses Unreal's standard replication and dedicated servers, with no changes to your game mode or player controller.
This guide covers:
Preparing a working Edgegap app version for your game
Connecting your coding agent to Edgegap (optional)
Adding the matchmaking files to your project
Configuring the client
Creating your matchmaker
Choosing your matchmaking rules
Testing with two players
You can do it two ways, and mix them:
With a coding agent. Connect Claude Code, Cursor or another agent to the Edgegap MCP server and its agent skills. The agent adds the files, edits your config, runs the builds and checks the matchmaker. You handle the dashboard clicks and playtest.
By hand. Every step below also works without an agent.
1. Before you start
A free Edgegap account. Verify your email. No credit card is needed to test.
An Unreal Engine 5 project with a C++ module (verified on UE 5.5; 5.3 or newer works the same). Blueprint-only project? Add one with Tools → New C++ Class → None first.
A working Edgegap app version of your game server: a Linux dedicated server, containerized, with port 7777, UDP, named
gameport. Matchmaking deploys the requested version for every match, so it needs a functional, containerized game server to work end to end. If you don't have one yet, use our guide: Unreal Engine.A tested connection: you deployed that version once from the dashboard and joined it from a client with
open <IP>:<port>in the console. Don't add matchmaking on top of a server you haven't joined yet: if something breaks later, you'll know it's the matchmaking layer.For the agent path: an Edgegap API token, from Dashboard → User Settings → Tokens. It is organization-wide, so treat it like a password: never put it in your project, your game client or a chat.
2. Connect your coding agent to Edgegap
Skip this step if you're doing everything by hand.
The Edgegap MCP server lets your agent create apps and versions, deploy servers, read logs and generate matchmaker configurations on your account. The edgegap-unreal agent skill gives it the matchmaking and server shutdown files, the config and the known pitfalls.
Claude Code (run in your own terminal, so the token never passes through the chat):
claude mcp add --transport http edgegap https://mcp.edgegap.dev/mcp -H "Authorization: token YOUR_EDGEGAP_API_TOKEN" --scope user
Then install the skills: /plugin marketplace add edgegap/edgegap-agent-skills, then /plugin install edgegap@edgegap. Restart the session.
Cursor, VS Code and other clients that send headers: add https://mcp.edgegap.dev/mcp with the header Authorization: token YOUR_EDGEGAP_API_TOKEN, and install the skills with npx skills add edgegap/edgegap-agent-skills --skill "*".
Claude Desktop: custom connectors can't send the header, so use the local server instead (Node 18+): { "mcpServers": { "edgegap": { "command": "npx", "args": ["-y", "@edgegap/mcp"] } } }. It asks for the token on first use.
Check it works:
"List my Edgegap apps."
Your app and its version should be in the list.
3. Add the matchmaking files to your project
Edgegap publishes two drop-in files in its open-source agent skills repository:
EdgegapMatchmakerSubsystem(game clients): measures ping to Edgegap's beacons, creates the matchmaking ticket, waits for a server, then connects. It includes a basic Find Match / Cancel overlay.EdgegapServerSubsystem(dedicated server): when the matchmaker started the server, it stops the deployment once the match is empty.
With your agent, audit first (read-only):
"Look at my Unreal project and tell me how players connect today: the C++ module name, whether there's a Server target, the server default map, and whether anything uses open, ClientTravel, sessions or an OnlineSubsystem. Don't change any files."
Then:
"Add Edgegap matchmaking to this project with the edgegap-unreal skill. Drop in the matchmaker and server subsystems, add the config section to DefaultGame.ini with matchmaking disabled, and confirm the editor target still compiles. I'll give you the matchmaker URL and token once it's created."
By hand:
Copy the four files (
.hand.cppfor each) fromassets/unreal/Source/intoSource/<YourModule>/.In
Source/<YourModule>/<YourModule>.Build.cs, add"HTTP", "Json", "Sockets", "Slate", "SlateCore"toPublicDependencyModuleNames.Regenerate the project files and build the editor target.
Both subsystems are off by default: adding the files changes nothing until you turn matchmaking on in step 5. They handle the beacon pings, the ticket, retries, cancelling the ticket if the player quits mid-search, picking the right port, the ClientTravel call and the server shutdown. You write nothing for a first test.
Prefer Blueprints? The Edgegap Integration Kit by Betide Studios, on Fab, supports Edgegap matchmaking with a ready-made Blueprint example.
4. Configure the client
All settings live in Config/DefaultGame.ini, in a section named after your module: [/Script/<YourModule>.EdgegapMatchmakerSubsystem]. Add these lines:
bEnabled=False: keep it off until step 5.MatchmakerUrl="YOUR_MATCHMAKER_URL"andAuthToken="YOUR_MATCHMAKER_AUTH_TOKEN": from your matchmaker page in step 5. Keep the URL in quotes, or Unreal cuts it at//and requests fail with "Couldn't resolve host name".Profile=simple-example: the profile name in your matchmaker configuration.PortName=gameport: the port name on your app version.bSendBeaconLatencies=True: only if the profile has a latency rule (the Simple Example does). The matchmaker refuses tickets with values it doesn't expect, so keep this in sync with your configuration.bShowDefaultUI=True: shows the basic Find Match overlay on menu maps. Set it toFalseonce your own menu calls Find Match.
Also add an empty [/Script/<YourModule>.EdgegapServerSubsystem] section. The server stops itself if nobody joins within 5 minutes, or 15 seconds after the last player leaves (NoPlayerTimeoutSeconds, EmptyServerGraceSeconds). This only applies to servers the matchmaker started, so your manual test deployments aren't affected.
The Auth Token is safe to ship in game clients: it can only create and read tickets, not access your Edgegap account. In a public repository, keep placeholders in DefaultGame.ini and put the real values in Config/UserGame.ini, which overrides it, is ignored by Git, and is still packaged into builds.
5. Create your matchmaker
In the dashboard, open Matchmaker, select Create Matchmaker, name it, and select the Simple Example template (what it contains).
Set
application.nameandapplication.versionto your app and version exactly as they appear in the dashboard. The configuration is refused if the version doesn't exist.Select Create and Start, then wait until it's ready. A new matchmaker's address can take up to 5 minutes to answer.
Copy the API URL and Auth Token into
DefaultGame.ini, and setbEnabled=True.
Check the URL and token before launching the game: curl -H "Authorization: <auth token>" <api url>/locations/beacons. A JSON list of beacons means they work.
With your agent: "Here's my matchmaker API URL and Auth Token. Check they answer, put them in the Edgegap matchmaker settings and turn matchmaking on."
6. Choose your matchmaking rules
Run the step 7 test with the Simple Example first, then tailor the rules to your game. The Simple Example has two:
Match size: one team of exactly 2 players, so the matchmaker waits for 2 tickets before starting a server.
Latency: players are grouped only if their pings to the same Edgegap location are within 100 ms of each other, and locations above 200 ms are ignored.
Testing alone? Add an expansion so a single player gets a server after 10 seconds: "expansions": { "10": { "match_size": { "min_team_size": 1 } } }. Stop the matchmaker, edit the configuration, and start it again. Remove it before release.
Then add team sizes, skill or rank, game modes, maps, and expansions that relax rules the longer players wait. Genre examples (competitive, cooperative, social, backfill) are in the matchmaking documentation. Every rule except match size needs a matching value in each player's ticket: tell your agent when you add a rule, and it updates the client too.
Matchmaker deployments receive MM_MATCH_ID, MM_MATCH_PROFILE, MM_TICKET_IDS, MM_TEAMS, MM_GROUPS and one MM_TICKET_<id> per player, as JSON strings. Read them with FPlatformMisc::GetEnvironmentVariable to assign teams or check who's joining.
When you ship a new server build, update application.version (Stop, Edit, Start), or matches keep deploying the old build.
7. Test with two players
Make sure no test deployment is still running: the free tier runs one deployment at a time, and a leftover one blocks matchmaking.
Launch two clients side by side:
UnrealEditor.exe "<path>\<Project>.uproject" -game -windowed -ResX=960 -ResY=540 -WinX=0 -log, and a second one with-WinX=970.Select Find Match in both. The status goes from measuring latency to searching, match found, then connecting. Within seconds both clients load into the same server, and the dashboard shows the deployment tagged with both ticket IDs.
Close both clients. About a minute later, the deployment stops on its own.
You can also queue from the console with Edgegap.FindMatch and Edgegap.CancelMatch, or add -FindMatch to the command line. If a ticket gets a server but the client can't connect, the issue is the server, not the matchmaker: deploy the version by hand and test open <IP>:<port> again. On the free tier, the matchmaker stops 3 hours after each start: restart it from the dashboard.
Build your own menu. FindMatch, CancelMatch, GetState and GetStatusText are Blueprint-callable on the Edgegap Matchmaker Subsystem (Get Game Instance Subsystem), and OnStatusChanged fires on every update for your UMG widget. Then set bShowDefaultUI=False.
How the files work. The client fetches Edgegap's beacons and times a TCP handshake to each (best of three, in parallel, 1-second timeout), sends the pings in a ticket keyed by city, polls it every 2 seconds until it's assigned, then travels to the server's IP and the port named in PortName, the same as open <IP>:<port>. Cancel or quit deletes the ticket. On the server, the subsystem sees the matchmaker's MM_MATCH_ID, watches logins, and calls the ARBITRIUM_DELETE_URL Edgegap injects once the match is empty. The Auth Token goes as-is in the Authorization header, with no "Bearer" prefix.
Going live? Ask your agent to run the edgegap-launch skill's checklist, and pick a production matchmaker before launch. Using Epic Online Services? See Epic Online Services.
Stuck? Ask your agent to load edgegap-troubleshoot, or ask our team and other studios on the Edgegap Discord.
Frequently Asked Questions
Common questions about adding Edgegap matchmaking to an Unreal Engine multiplayer game.
Is there an Edgegap matchmaking SDK for Unreal Engine?
Edgegap provides two open-source C++ files you drop into your project instead of a plugin: one for game clients, one for the dedicated server. For Blueprint-first teams, Betide Studios' Edgegap Integration Kit on Fab supports Edgegap matchmaking too.
Can I add Edgegap matchmaking to a Blueprint-only Unreal project?
Yes. Add an empty C++ class to create a C++ module, drop in the files, and call Find Match from Blueprints. Or use Betide Studios' Edgegap Integration Kit, which ships a Blueprint example.
Do I need to change my game mode to use Edgegap matchmaking?
No. Clients connect with Unreal's built-in ClientTravel, the same as typing open with the server's address, so any game that uses standard replication and dedicated servers works as is.
Is the matchmaker Auth Token safe in an Unreal game client?
Yes. It can only create and read matchmaking tickets, not access your Edgegap account. In a public repository, keep the real value in Config/UserGame.ini, which Git ignores and Unreal still packages.
How much does Edgegap matchmaking cost?
Testing is free, on a shared matchmaker that stops 3 hours after each start. For a live game, you choose a production matchmaker, and game servers bill per vCPU per minute only while they run.

Clients
Learn more from clients who integrated Edgegap
31 case studies are available from studios that moved to Edgegap from another platform.

A Flawless Global Launch for Rivals of Aether 2
Aether Studios
Learn how Aether Studios quickly added Edgegap and delivered flawless launch & post-launch to their community.
Case Study

Overcome Latency Introduced by VR’s use of WiFi in Competitive Multiplayer
Halfbrick Studios
Discover how Halfbrick successfully launched & maintains a multiplayer-focused Early Access on META Quest's VR platform.
Case Study

MENA’s Social App Adds Online Games
WOLF
Learn how the highly popular MENA-region social app added matchmaking & multiplayer games orchestration easily to WOLF Qanawat.
Case Study

Hybrid Orchestration Keeps Kickoff Tactics Ready for Any Traffic
Birch Games
How hybrid orchestration helped Birch Games handle traffic, pairing egress-free Fleets with the regionless cloud.
Case Study

7 Days Blood Moons
The Fun Pimps & iLLOGIKA
Learn how Illogika dramatically reduced server costs & ensured the online experience the 7 Days to Die franchise expects.
Case Study

Authentic Online Warfare Requires the Ultimate Orchestration
Highwire Games
Learn how Highwire's need for performance required orchestration only Edgegap can deliver.
Case Study

22,000 Reviews, 4.8 Stars, and Infrastructure That Scaled Automatically
Sinn Studios
How a simple, Slack-supported integration got Sinn Studio's hit VR title online fast and keeps it there.
Case Study

Dynamic Server Orchestration
Under NDA - AAA Studio
Discover how one the world's biggest AAA studio improved its peer-to-peer multiplayer experience through edge computing.
Case Study

Near Zero Latency for AAA Fighting Game
AAA Studio - Under NDA
How an unannounced project delivered the lowest lag possible and improved fairness in its 1v1 game.
Case Study

Play Gods with Multiplayer Physics
Squido Studio
Learn how Squido uses Edgegap's highligh optimized game servers to deliver mind-bending & chaotic VR gameplay.
Case Study

A Fully Managed Solutions that Saves Time for Indies Multiplayer VR Horror
Dirty Pearl Studios
Discover how Dirty Pearl Studios saved development time thanks to Edgegap’s easy integration and automated orchestration alongside its Nakama integration.
Case Study

Instant Global Server Deployment for Collaborative XR Medical Education
AlensiaXR
How AlensiaXR uses Edgegap to deliver low-latency, always-available shared anatomy sessions to medical students worldwide.
Case Study

The Lightkeepers: A VR Social Co-op Game with Dedicated Servers
Spectral Games
How Spectral Games used Edgegap Matchmaking and Server Browser to launch dedicated servers for its VR social lobby, with no prior server experience.
Case Study

Fast & reliable deployments worldwide for PvPvE challenger Gravebound
Crater Studios
How Edgegap’s orchestration and matchmaking helped Crater Studios dramatically helped a small them focus on gameplay instead of infrastructure.
Case Study

Rapid Scaling of Web Metaverse
Hiber
Learn how Hiber eliminated the guesswork out of its server capacity planning with Edgegap.
Case Study

High Hardware Requirements & Custom Game Server Pools
Alderon Games
Learn how Alderon Games instantly leverages a custom pool of game servers across multiple providers worldwide for its popular MMO.
Case Study

Easy Integration for Indie Devs
WhaleFood Games
Read how WhaleFood Games "kicked out" its netcode issues with Edgegap.
Case Study

Cutting-edge tech that powers South-East Asia’s first-ever eSports title.
Anantarupa Studios
Learn how Edgegap transformed South-East Asia’s gaming landscape streamlining complex infrastructure and cutting-edge tech with one seamless solution.
Case Study

One Strike. Global Reach.
Triple Hill Interactive
How Triple Hill Interactive leverages Edgegap's orchestration to deliver low latency and improve fairness in a genre where every millisecond counts.
Case Study

Fast-paced Team Battle Royale... with Gun-totting Animal Plushes!
SANDYFLOOR
Discover how a Korea-based Indie Studio launched it multiplayer worldwide.
Case Study

Mobile Horse Racing Goes Global with Instant, Cost-Efficient Servers
Mirai Labs
How Mirai Labs powers Pegaxy Blaze's worldwide multiplayer races with just-in-time server deployment and fractional vCPU to keep cost per player low.
Case Study

Server Management & Distribution
Matrioshka Games
Read how Matrioshka Games were able to ship a Battle Royale in early access with limited ressources.
Case Study

At my Signal, Unleash Hell!
TyGames
Discover how Indie studio TyGames immerses players in third-person gladiatorial combat multiplayer.
Case Study

Instant Worldwide Orchestration
Soliton Interactive
Discover how Soliton Interactive did the impossible… Ship it's first playable as multiplayer!
Case Study

Competitive play with server-side physics ensures ideal sub-50 ms latency
NS7
Discover why solely Edgegap could enable an indie studio to deliver on its vision for a AAA-quality F2P sports gameplay through server-side physics and authority.
Case Study

Regional Deployments for iGaming
X1 Contra 1
X1 Contra 1 delivers real-time PvP casual games to its Brazilian player base through cost-effective hosting & regional deployments, ensuring data and legal compliance.
Case Study

Pay Only When Players Play: Affordable Multiplayer Infrastructure
Meltdown Interactive
How Edgegap helped indie developer Meltdown Interactive Media solve cost-effective scaling and matchmaking without the complexity, so they could focus on building the game.
Case Study

One Edgegap platform, three very different networking profiles
Warped Games
How Warped Games runs a social hub, real-time co-op, and turn-based co-op, all on the same Edgegap deployment API and the same container pipeline.
Case Study

Pool Live Tour Max
RETA Games
Case Study

Korea’s Web3 POP Extraction Shooter Goes Global, Instantly
NDUS Entertainment
How XOCIETY easily added Edgegap orchestration & integrated custom matchmaking working alongside Edgegap Ping Beacons to optimize latency.
Case Study

Multiplayer in Every Dimension
Arcadia.tv
Discover how Arcadia.tv uses Edgegap's edge network to deliver an innovative, team and location-based athletic VR sport.
Case Study

F2P Mobile Fighter Cuts Infrastructure Costs With Just-in-Time Servers
Game Changers Worldwide
How Game Changer Worldwide hosted Rumble Rush's real-time 3v3 PvP globally on mobile.
Case Study
Key reasons why they chose Edgegap
Discover the impact of Edgegap's automated game server orchestration for a flawless multiplayer experience.









