Discover how Edgegap works

Discover how Edgegap works

Unreal Engine

Lyra

Deploy to Edgegap

Published

Published

Published

Last reviewed for accuracy

Last reviewed for accuracy

Last reviewed for accuracy

Lyra: Run Epic's Lyra Starter Game on Edgegap dedicated servers, with Matchmaking and EOS

Lyra: Run Epic's Lyra Starter Game on Edgegap dedicated servers, with Matchmaking and EOS

Lyra is Epic’s multiplayer sample game for Unreal Engine 5: a shooter with several game modes, built on Epic Online Services (EOS). Out of the box, Start a Game with Network Online makes the player’s PC the host, as a listen server. Edgegap’s sample changes that: every online match runs on its own dedicated game server.

When a player starts an online game, Lyra asks the Edgegap matchmaker for a server near the players. Edgegap starts a dedicated server, and the player joins it. Two players who queue at the same time share one server.

EOS keeps doing what it does in Lyra. Players sign in with their Epic account, and friends, presence and the overlay keep working. Each Edgegap server registers an EOS session, so Lyra’s own menus can see it.

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.

Platforms: Windows game client and a Linux dedicated server on Edgegap. Unreal Engine 5.8.4 from the Epic Games Launcher, no engine source build. Lyra comes from Epic, on Fab or Epic’s GitHub. Edgegap’s code is under the Apache 2.0 licence; Lyra and the Unreal Engine content stay under Epic’s terms.

How it works

  1. A player signs in with their Epic account, then selects Play Lyra, then Start a Game with Network Online.

  2. The game pings Edgegap’s beacons and sends a matchmaking ticket for the chosen game mode, with those ping times.

  3. The matchmaker groups 2 to 8 players with a similar ping to the same beacon, then starts an Edgegap deployment near them.

  4. The server loads the game mode that matches the ticket, and registers an EOS session with its public port.

  5. Each client gets the server’s address and travels to it, with the player’s EOS identity.

  6. When the last player leaves, the server waits 15 seconds, then stops its own deployment, which ends billing.

What the sample adds to Lyra:

Path

What it does

Plugins/EdgegapIntegration/.../EdgegapSessionSubsystem

Client: replaces Lyra’s session subsystem for online hosting. Beacon pings, matchmaking ticket, waits for a server, connects, with a progress overlay and a Cancel button. Browse, Join, invites and LAN hosting stay Lyra’s.

Plugins/EdgegapIntegration/.../EdgegapServerSubsystem

Server: hosts the game mode picked by the matchmaker, advertises Edgegap’s external port in the EOS session, stops the deployment when the match is empty.

Plugins/EdgegapIntegration/Source/EdgegapEOSServerConfig

Server: turns off Epic account login on the dedicated server and uses the server’s own EOS client, read from the app version’s variables.

Config/DefaultEngine.Edgegap.ini, Config/DefaultGame.Edgegap.ini

Config blocks to append: server target, EOS settings, matchmaker settings, game mode to matchmaker profile map.

Config/UserEngine.ini.example

Template for your local secrets.

Dockerfile, matchmaker-config.json

The server image and the matchmaker profiles.

No credit card required. Free tier includes the resources to deploy a real game server.

No credit card required. Free tier includes the resources to deploy a real game server.

Epic’s Lyra on Edgegap dedicated servers, with the Edgegap matchmaker and EOS sessions.

Step-by-Step Guide

Run the Sample

1. Before you start

  • A free Edgegap account. No credit card is needed to test.

  • Unreal Engine 5.8 from the Epic Games Launcher.

  • Lyra Starter Game for 5.8: in the launcher, add it from Fab and select Create Project. Keep the project outside OneDrive and other synced folders.

  • Docker Desktop and Edgegap’s Docker Extension. The launcher’s engine can’t build Server targets, so the Linux server is built inside Docker. Both build paths in step 4 need a GitHub account linked to your Epic account, and a GitHub Personal Access Token with read:packages.

  • An organization and product in the Epic Developer Portal, for EOS.

  • Clone the sample. It holds only Edgegap’s part, which you add to your copy of Lyra.

2. Add the sample to your Lyra project

  1. Copy Plugins/EdgegapIntegration into your project’s Plugins folder.

  2. In your .uproject, enable two plugins: OnlineSubsystemEOS and EdgegapIntegration.

  3. Append Config/DefaultEngine.Edgegap.ini to your Config/DefaultEngine.ini, and Config/DefaultGame.Edgegap.ini to your Config/DefaultGame.ini (replace <Project> with your project name: LyraStarterGame from Fab).

  4. In Source/LyraServer.Target.cs, wrap bUseChecksInShipping = true; in if (BuildEnvironment == TargetBuildEnvironment.Unique). Installed engines, like the launcher’s and the Docker build images, refuse targets that change it.

  5. Add Config/User*.ini to your .gitignore.

The Fab copy of Lyra for 5.8 has two CommonUser files (CommonUserBasicPresence.cpp, CommonSessionSubsystem.cpp) with unreachable code that the Linux build’s clang compiler rejects. Take both files from Epic’s GitHub 5.8.4-release tag, or delete the unreachable break; lines and the loop that returns on its first pass.

3. Set up Epic Online Services

In your product in the Epic Developer Portal:

  1. Client policies: a Peer2Peer policy for players. For the server, a Custom policy with Sessions enabled (tick each action) and User required off. The TrustedServer template doesn’t save in the portal.

  2. Clients: one per policy, for example Lyra Client and Lyra Server.

  3. Epic Account Services: accept the terms, create an application, enable Online Presence and Friends, and link Lyra Client. Brand settings are only needed before release.

  4. Put the product, sandbox and deployment IDs and the Lyra Client ID in the LyraEdgegap artifact in Config/DefaultEngine.ini.

  5. Copy Config/UserEngine.ini.example to Config/UserEngine.ini and add the Lyra Client secret and a 64-hex-character encryption key. The matchmaker URL and token go here in step 6.

The Lyra Server secret never goes in a file or a game build: it lives on the Edgegap app version (step 4). For EOS with Edgegap in general, see the Epic Online Services guide.

4. Build the Linux server and put it on Edgegap

Option A (recommended): Edgegap’s Docker Extension. It’s the fastest way to build: no engine source build, no Linux toolchain, from any operating system.

  1. In Docker Desktop, open the Edgegap extension. Enter your project’s name and your Edgegap token, then select Validate Token.

  2. Select Unreal Engine, then Browse to your Lyra project folder and select Create Project. The extension fills in your engine version.

  3. Enter your GitHub username and Personal Access Token, then select Validate Configuration. All three checks must turn green.

  4. Select Build Project, then Upload Image. Use a new tag for every build.

The Unreal Engine integration guide shows each screen of the extension.

Option B: Epic’s engine container, by hand. The repo’s README has the exact commands: run BuildCookRun in ghcr.io/epicgames/unreal-engine:dev-slim-5.8.4 (about 80 GB) with -server -noclient -platform=Linux and -UbtArgs="-NoUBA", then build the sample’s Dockerfile with --build-arg PROJECT=LyraStarterGame and push it to registry.edgegap.com/<project>/lyra:<tag>. The first build takes about 40 minutes.

Then, in the [dashboard](https://app.edgegap.com/application-management/applications/list), create an application named lyra (the matchmaker profiles expect it) and a version:

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

  • 1.5 vCPU and 3 GB of memory.

  • Environment variables EOS_SERVER_CLIENT_ID and EOS_SERVER_CLIENT_SECRET (mark it hidden), with the Lyra Server client’s credentials.

The sample’s Dockerfile (option B) runs the server binary directly, with -stdout -FullStdOutLogOutput, so its logs show in the dashboard and it stops cleanly when Edgegap ends the deployment.


5. Add it to your own Unreal game

The sample is a working reference: your coding agent starts from files that already ran on Edgegap, so it builds on a tested setup instead of guessing.

If your game is built on Lyra or Epic’s CommonUser plugin, the sample’s plugin drops in as it is: it replaces CommonUser’s session subsystem for online hosting and leaves Browse, Join and invites alone. Map your own playlists to matchmaker profiles in PlaylistProfiles.

For any other Unreal game, the same pieces apply:

  1. A dedicated server build. A Server target and DefaultServerTarget in Config/DefaultEngine.ini.

  2. Matchmaking on the client. Beacon pings, a ticket, a wait for the server, then travel to it.

  3. Servers that stop themselves. Only on deployments the matchmaker started, once the match is empty.

  4. EOS on a dedicated server. No Epic account login on the server, a server-only EOS client from environment variables, and the external port in the EOS session.

  5. A server image. The Dockerfile copies Packaged/LinuxServer into a small Ubuntu image that runs as a non-root user.

With your agent:

“Load the edgegap-unreal skill. Using github.com/edgegap/game-sample-unreal-engine-lyra as the reference, make my Unreal project dedicated-server ready and add Edgegap matchmaking for online hosting, server self-stop, and EOS sessions registered by the dedicated server with Edgegap’s external port. Keep the EOS server credentials out of the game build: read them from environment variables. Keep matchmaking disabled until I give you my matchmaker URL, and check that the editor and Server targets compile.”

For each step in detail, by hand, see the Unreal Engine integration guide and Unreal Matchmaking.

6. Start the matchmaker and play

  1. In the dashboard, open Matchmaker and select Create Matchmaker. Upload the sample’s matchmaker-config.json, with application.version set to your version, then Create and Start.

  2. When it’s ONLINE, copy its API URL and Auth Token into the [/Script/EdgegapIntegration.EdgegapSessionSubsystem] section of Config/UserEngine.ini. Keep the URL in quotes: unquoted, Unreal cuts it at //.

  3. Start Lyra with UnrealEditor.exe <Project>.uproject -game. Press a key to sign in with your Epic account: the account portal opens in your browser.

  4. Select Play Lyra, then Start a Game, with Network Online. A progress overlay shows while the matchmaker works.

Alone, you get a server after 10 seconds. Two players who queue within 10 seconds share one server.

Each Lyra game mode has its own matchmaker profile: Control Point (controlpoint), Elimination (elimination) and Top Down Arena (topdown). Each matches 2 to 8 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. A ticket with no match is cancelled after 30 seconds.

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.

To test two Epic accounts on one PC, use Epic’s Developer Authentication Tool (the README has the command line). For unattended tests, -EdgegapFindMatch=DA_Convolution_ControlPoint queues 5 seconds after the front end loads.

When you ship a new server build, point application.version at the new version, or matches keep deploying the old build.

Known limits

  • Browse and Quick Play from a second account aren’t tested yet. Every Edgegap server registers an EOS session so Lyra’s Browse screen and Quick Play can find it, but finding a running match from another Epic account hasn’t been verified.

  • The server is built in Docker. The launcher’s engine can’t build Server targets, so the server builds inside Docker, with Edgegap’s Docker Extension or Epic’s container image. Both need a GitHub account linked to Epic.

  • Lyra version must match the engine. The sample targets Lyra for 5.8 and Unreal 5.8.4. The Fab copy needs the CommonUser fix in step 2.

  • Players need an Epic account. The sample uses Epic Account Services, so players sign in with Epic. For a shipped game on Steam or consoles, use that platform’s login with EOS Connect.

  • Players can be dropped once at the start. A fresh Lyra server starts on its front end map, then loads the match map and drops early joiners. The client rejoins its assigned server on its own.

  • Servers you deploy by hand don’t stop themselves. Only matchmaker deployments do. Stop the others from the dashboard.

What was tested

Tested end to end on Edgegap on 2 November 2026, with Unreal Engine 5.8.4, a Windows client and the Linux server on Edgegap:

  • Sign-in and matchmaking: Epic login, then Start a Game, the matchmaker and a dedicated server; the player joined with their EOS identity.

  • Two players: two clients queued at the same time and matched onto one server.

  • EOS session: the server created its EOS session with Edgegap’s external port.

  • Self-stop: the server stopped its deployment after the players left.

Not tested yet: Browse and Quick Play finding a running match from a second Epic account.

Frequently Asked Questions

Questions about running Epic's Lyra on Edgegap dedicated servers with EOS.

Can Lyra run on a dedicated server?

Yes. Lyra ships a LyraServer target. Edgegap’s sample builds it as a Linux dedicated server with Edgegap’s Docker Extension, from a launcher install of Unreal 5.8, so you don’t build the engine from source. Online games then start on Edgegap servers instead of a player’s PC.

Does EOS still work when Lyra runs on Edgegap?

Yes. Players sign in with their Epic account, and friends, presence and the overlay keep working. Each Edgegap server registers an EOS session with its public port, using its own EOS client so the server never logs in as a player.

Which Lyra game modes does the sample support?

Control Point, Elimination and Top Down Arena. Each has its own matchmaker profile, and the server loads the game mode the players queued for.

Is Lyra included in the sample?

No. The repository holds only Edgegap’s part: a plugin, config blocks, a Dockerfile and a matchmaker config. Lyra’s code and content come from Epic, on Fab or Epic’s GitHub, under the Unreal Engine EULA.



Clients

Learn more from clients who integrated Edgegap

31 case studies are available from studios that moved to Edgegap from another platform.

Key reasons why they chose Edgegap

Discover the impact of Edgegap's automated game server orchestration for a flawless multiplayer experience.

Cost

Pricing

Pricing

Optimize costs and performance with hybrid orchestration

Optimize costs and performance with hybrid orchestration

Optimize costs and performance with hybrid orchestration

Edge Cloud

On-Demand

$0.00115

/ vCPU

/ MINUTE

Billed by the Minute, Only on Usage

Pay only when players play. 0 active servers = $0

Deploy game servers worldwide, per instance, to all 615+ edge cloud locations. Zero commitment.

Simply add a credit card.

Edge Cloud

On-Demand

$0.00115

/ vCPU

/ MINUTE

Billed by the Minute, Only on Usage

Pay only when players play. 0 active servers = $0

Deploy game servers worldwide, per instance, to all 615+ edge cloud locations. Zero commitment.

Simply add a credit card.

Private Fleet (Bare Metal)

Reserved Capacity

$0.0261

/ vCPU

/ HOUR

Billed Monthly, Always On

$280 per host/month (12 mo rate), or $350 monthly

Optimize the cost effectiveness of your game server with egress-free hosting of Private Fleets.

Persistent, available 24/7, exclusive to your studio.

Private Fleet (Bare Metal)

Reserved Capacity

$0.0261

/ vCPU

/ HOUR

Billed Monthly, Always On

$280 per host/month (12 mo rate), or $350 monthly

Optimize the cost effectiveness of your game server with egress-free hosting of Private Fleets.

Persistent, available 24/7, exclusive to your studio.

Your bill varies per rate and usage; which can vary per game type, player count, & more.

Your bill varies per rate and usage; which can vary per game type, player count, & more.

Model your usage with our estimate calculator ->

Model your usage with our estimate calculator ->

Edgegap's features & price: detailed comparison between Edge Cloud & Private Fleets

Edgegap's features & price: detailed comparison between Edge Cloud & Private Fleets

COMPARE

Free Trial

Edge Cloud

Private Fleets

FEATURES

Analytics & Monitoring

Billing Alarms

Click to Expand

28 more rows

Unlocks

Capabilities are unlocked when a credit card is added to the account.

COMPARE

Free Trial

Edge Cloud

Private Fleets

FEATURES

Analytics & Monitoring

Billing Alarms

Click to Expand

28 more rows

Unlocks

Capabilities are unlocked when a credit card is added to the account.

COMPARE

Free Trial

Edge Cloud

Private Fleets

FEATURES

Analytics & Monitoring

Billing Alarms

Click to Expand

28 more rows

Unlocks

Capabilities are unlocked when a credit card is added to the account.