The Top Down template is one of Unreal Engine 5's starter projects: click to move your character around a small level. Edgegap's sample turns it into a multiplayer game where every match runs on its own dedicated game server.
Matchmaking and voice chat are both off by default: until you turn them on, the sample plays like Unreal's template, and players join a server with open <IP:port>. Unreal's own replication does the networking, as in any Unreal multiplayer game.
Turn on the Edgegap matchmaker and players get a Find Match button: the game measures their ping, groups them with nearby players, and connects them to a server started for their match. Turn on EOS voice chat and players can talk in voice rooms the game server controls: the server decides who shares a room, so a player can’t join a channel it wasn’t given.
Edgegap's network spans 615+ Edge Cloud locations (learn more). Each server is deployed to the best available location for its players, stops itself when the match is empty, and is billed only while it runs.
Clone the sample: Top Down Template sample on GitHub
Full guide: add Edgegap to your own Unreal game with the Unreal Engine integration guide
Platforms: Windows game clients (voice also builds for Mac, not tested) and a Linux dedicated server on Edgegap. Last tested with Unreal Engine 5.5.4 built from source; other Edgegap Unreal samples are confirmed on 5.8. Based on Epic’s Top Down template. Edgegap’s code is under the MIT licence; the Unreal Engine content it builds on stays under Epic’s terms.
How it works
A player selects Find Match on the menu map. The game pings Edgegap's beacons and sends a matchmaking ticket with those ping times.
The matchmaker groups 2 to 4 players with a similar ping to the same beacon, then starts an Edgegap deployment near them.
Each client gets the server's address and port, and connects with Unreal's
ClientTravel.With voice on, each player logs into EOS with a device ID and sends the server an ID token. The server checks it, picks the player's room from the matchmaker's team data, and sends back a voice token for that room only.
When the last player leaves, the server waits 15 seconds, then stops its own deployment, which ends billing.
What the sample adds to the template:
Path | What it does |
|---|---|
| Client: beacon pings, matchmaking ticket, waits for a server, connects. |
| Find Match / Cancel overlay on the menu map; |
| Server: stops the deployment when a matchmaker-started match is empty. |
| EOS voice: settings, client login and rooms, the replicated voice component, the server's token service. |
| The dedicated server build target. |
| The server image and the matchmaker profile. |

Epic's Top Down template with a dedicated server, optional matchmaking and EOS voice chat.
1. Before you start
A free Edgegap account. No credit card is needed to test.
Unreal Engine 5.5 built from source, with Visual Studio 2022 and the Linux cross-compile toolchain for 5.5. The sample packages its Linux server with RunUAT, which needs a source build. Plan 1 to 3 hours for the first engine build, and about an hour for the first server package. The Unreal Engine guide covers the setup, and a faster path with Edgegap's Docker Extension (not tested with this sample yet).
Docker Desktop, to build the server image.
For voice chat only: a product in the Epic Developer Portal.
Clone the sample. The Unreal project is in the
MultiplayerGamefolder.
2. Put the game server on Edgegap
Package the Linux dedicated server into Packaged/ at the repository root:
<UE_ROOT>/Engine/Build/BatchFiles/RunUAT.bat BuildCookRun -project=<PATH>/MultiplayerGame/MultiplayerGame.uproject -noP4 -server -noclient -serverplatform=Linux -serverconfig=Development -build -cook -stage -pak -archive -archivedirectory=<PATH>/Packaged
Log Docker into your Edgegap registry with the username and token from the Container Registry page. Then build and push the image from the repository root, with a new tag for every build:
docker build --platform linux/amd64 -t registry.edgegap.com/<project>/unreal-topdown:v1 .
docker push registry.edgegap.com/<project>/unreal-topdown:v1
In the dashboard, create an application (the matchmaker profile expects unreal-topdown) and a version v1:
Your image and tag, with your registry credentials. Without them, deployments fail with "Unable to pull image from registry".
One port: name
gameport, 7777, UDP.
The Dockerfile runs the server binary directly, with -stdout -FullStdOutLogOutput, so its logs show in the dashboard and it stops cleanly when Edgegap ends the deployment.
3. Play on a test server
Open your app version in the dashboard, select Deploy and pick a location near you. When it's Ready, copy the Host and External Port.
Run the game, open the console with the ` key and type:
open <host>:<external port>
The external port changes on every deployment. Run a second client the same way and both players walk around the same level.
A server you deploy by hand never stops itself: stop it from the dashboard when you're done. The free tier runs one deployment at a time, so a forgotten test server blocks matchmaking.
4. Add EOS voice chat (optional)
The game server acts as EOS Voice's trusted server. It calls the EOS Voice Web API over HTTPS, because the EOS SDK doesn't support voice on Linux. Players log in with a device ID, so they need no Epic account.
In the Epic Developer Portal, open your product, then Product Settings. Note the Product ID, Sandbox ID and Deployment ID. On the Clients tab, add two client policies, and one client for each:
Game client: type
GameClient, User required checked, no Voice permission.Trusted server: a custom policy, User required unchecked, with the Voice actions
createRoomToken,kickandmute. This client can create a token for any room: never put it in a game build.Put the product, sandbox and deployment IDs and the game client's ID and secret in an
[EOSVoiceChat]section ofMultiplayerGame/Config/UserEngine.ini. Git ignores it.Turn voice on in
MultiplayerGame/Config/UserGame.ini:bEnabled=Trueunder[/Script/MultiplayerGame.EdgegapVoiceSettings].On a new app version, add the environment variables
EOS_VOICE_CLIENT_IDandEOS_VOICE_CLIENT_SECRET(mark it hidden) with the trusted server's credentials, andEOS_VOICE_DEPLOYMENT_ID. Voice turns on in the server when they're set, with no image rebuild.Package the client again and play. Type
VoiceMutein the console to mute or unmute your microphone.
On a server deployed by hand, the whole match shares one room. With the matchmaker (step 6), teammates share a room.
To test two clients on one PC, add -EOSVoiceNewDeviceId to the second client, and start it only after the first logs Voice: logged into EOS. To check audio without a microphone, start a client with:
-ExecCmds="EOSVoiceChat.FakeAudioInputEnabled 1"
The other client then logs Voice: <id> started talking in room <room>.
5. Add it to your own Unreal game
The sample is a working reference: your coding agent can copy its tested files instead of writing them from scratch. These changes make an Unreal game run on Edgegap:
A dedicated server build. A Server target (
Source/MultiplayerGameServer.Target.cs), a server default map (ServerMapinConfig/DefaultEngine.ini) and that map in the maps to cook (Config/DefaultGame.ini).Find Match on the client.
EdgegapMatchmakerSubsystempings the beacons, creates the ticket, waits for a server and connects. Its settings are in the[/Script/MultiplayerGame.EdgegapMatchmakerSubsystem]section ofDefaultGame.ini.Servers that stop themselves. When the matchmaker started the server, it stops its deployment once the match is empty (
MultiplayerGameGameMode.cpp).Voice rooms decided by the server. The four
EdgegapVoice*classes, the EOS modules inMultiplayerGame.Build.csfor Windows and Mac clients only, and theEOSVoiceChatplugin in the.uproject, limited to Win64 and Mac so the Linux server doesn't load the EOS SDK.A server image. The
DockerfilecopiesPackaged/LinuxServerinto a small Ubuntu image that runs as a non-root user.
In the sample, the Find Match overlay and the self-stop sit in the player controller and the game mode. In your own game, you don't need to edit either: the Edgegap agent skills ship the same logic as drop-in subsystems.
With your agent:
"Load the edgegap-unreal skill, then edgegap-eos-voice. Using github.com/edgegap/game-sample-unreal-engine-topdown as the reference, make my Unreal project dedicated-server ready, add Edgegap matchmaking with a Find Match button and server self-stop, and add EOS voice chat with one room per matchmaker team. Keep matchmaking and voice disabled until I give you my matchmaker URL and EOS IDs, and check that the editor and Server targets compile."
For each step in detail, by hand, see the Unreal Engine integration guide.
6. Turn on Find Match
In the dashboard, open Matchmaker and select Create Matchmaker. Upload the sample's
matchmaker-config.json, withapplication.nameandapplication.versionchanged to your app and version, then Create and Start.When it's ONLINE, copy its API URL and Auth Token.
In
MultiplayerGame/Config/UserGame.ini, add the[/Script/MultiplayerGame.EdgegapMatchmakerSubsystem]section withbEnabled=True,MatchmakerUrl="<API URL>"andAuthToken="<Auth Token>". Keep the URL in quotes: unquoted, Unreal cuts it at//.Launch two clients and select Find Match in both within 10 seconds. They join the same server.
The casual profile matches 2 to 4 players whose ping to a common beacon is under 150 ms and within 100 ms of each other. After 10 seconds, it also accepts a single player and pings up to 250 ms, so you can test alone. A ticket with no match is cancelled after 20 seconds: select Find Match again.
The Auth Token only lets clients create and read tickets, so it's safe to ship in the game. Never put your Edgegap API token in the game.
For unattended tests, -FindMatch on the command line queues at startup. Clients start at different speeds, so with voice tests launch both with the same -FindMatchAt=<unix time> instead: each queues at that moment.
When you ship a new server build, point application.version at the new version, or matches keep deploying the old build. For matchmaking in your own game, see Unreal Matchmaking.
Known limits
Engine built from source. The sample's packaging steps need a source build of Unreal 5.5. Edgegap's Docker Extension builds Unreal servers from a Launcher install; it should work with this sample, but it's not tested yet.
Voice runs on Windows and Mac clients. The engine's EOSVoiceChat plugin has no Linux client. Mac builds should work, not tested.
One team per match. The
casualprofile has one team, so every matched player shares a voice room. For two teams, addteam_count: 2to the profile: the server then gives each team its own room (written but not tested). The server finds a player's team from their IP, so players behind the same IP stay in the match room.Device ID logins. Players get an EOS identity tied to their PC, with no platform account. For a shipped game, use the platform's login (Steam, consoles) and link accounts.
A basic menu. The Find Match overlay is a simple Slate widget. For your own menu, call
FindMatchand listen to the subsystem's status from UMG.No ticket check on the server. The server doesn’t check that a connecting player holds a matchmaker ticket for this match, so anyone who learns the server address can join, and with voice on, get a voice token for its room.
What was tested
Tested end to end on Edgegap in October 2026 (matchmaker test passed on 14 October), with Unreal Engine 5.5.4 built from source, Windows clients and the Linux server on Edgegap:
Matchmaking: two clients matched by latency onto one Edgegap deployment; the server stopped its own deployment after both left.
Voice, local: two clients on one PC (
-EOSVoiceNewDeviceId, fake audio input) against a local dedicated server: both joined the room with different EOS identities.Voice, on Edgegap: two clients matched onto one deployment, in the same team room, hearing each other. When one quit, the server removed it from the room (204).
Log lines to look for (LogEdgegapVoice): on the server, Voice: trusted voice server ready, then Voice: <id> gets room <room> for each player, and Voice: removed <id> when a player leaves. On each client, Voice: logged into EOS as <id> and Voice: joined room <room>.
Not tested yet: matches of 3 or 4 players, two teams in separate rooms, Mac clients, and building the sample with the Docker Extension.
Frequently Asked Questions
Questions about running Unreal's Top Down template with Edgegap matchmaking and EOS voice chat.
Can Unreal's Top Down template run on a dedicated server?
Yes. Edgegap's sample adds a Server target and a server map to the Top Down template, and packages it as a Linux dedicated server. Players join with open <IP:port>, or with a Find Match button once the Edgegap matchmaker is on.
Does EOS voice chat work with a Linux dedicated server?
Not through the EOS SDK, which doesn't support voice on Linux. The sample's server uses the EOS Voice Web API instead: it checks each player's EOS ID token and hands out voice room tokens, while the Windows or Mac clients join the rooms.
Do players need an Epic Games account for EOS voice chat?
No. The sample logs players into EOS with a device ID, so there's nothing to sign up for. For a shipped game, you can replace it with your platform's login, such as Steam.
Can each team have its own voice channel?
Yes. With team rooms on, the server puts each matchmaker team in its own room, so players can't hear the other team. The sample's matchmaker profile has one team per match, so everyone shares a room until you add a second team.

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.









