Run your Unreal game’s server on Simpl. You make a Linux server, upload it, and start it.

Which way do you build?

One question decides it: did you build Unreal Engine yourself from source code?
  • Yes. Use Way 1.
  • No, I installed it from the Epic Games Launcher. Use Way 2. The Launcher version can’t make a Linux server on its own, so you build it inside a container.
Not sure? Most people use the Launcher, so choose Way 2. Way 1 has been tested with a source-built Unreal 5.7. Way 2 has been tested with Unreal 4.27.2. Other versions should work the same way but haven’t been tried yet.

Set up your project

Do these two things first, whichever way you build. 1. Add a server target. In your project’s Source folder, copy <YourProject>.Target.cs and rename the copy <YourProject>Server.Target.cs. Inside the copy, change <YourProject>Target to <YourProject>ServerTarget in both places (the class name and the line below it), and set Type = TargetType.Server. 2. Choose the map your server opens. Add these lines to Config/DefaultEngine.ini, using the same map as your GameDefaultMap:
Without this, the server opens an empty world.

Way 1: You built the engine from source

  1. Package a Linux server with your engine. Use a Development server, so you can see logs:
  1. Zip the LinuxServer folder that it creates.
  2. Upload the ZIP. See Upload a ZIP. Use the simpl-server.sh starter script from the dashboard as your start file.

Way 2: You installed Unreal from the Launcher

You build the server inside a container, which is like a sealed box with Unreal inside. It runs on your own computer. Only your finished server leaves your computer, never the engine. Before you start
  1. Link your GitHub account to your Epic Games account. Epic keeps its engine images on GitHub, so you need the link to download them.
  2. Install Docker Desktop or Podman. Both are free.
  3. Have a private place for the finished image, such as a private GitHub package.
Steps
  1. Save the file below as Dockerfile in your project folder, next to your .uproject file.
  2. Replace two things in it:
    • __PROJECT__ with your project’s name.
    • __DEV_SLIM_IMAGE__ with Epic’s image for your Unreal version, for example ghcr.io/epicgames/unreal-engine:dev-slim-4.27.2.
  3. Add a .dockerignore file next to it that lists Binaries/, Intermediate/, Saved/, DerivedDataCache/ and .vs/, one per line.
  4. Build it: podman build -t <registry>/<name>:1 . (with Docker, use docker build).
  5. Push your finished image to your private registry. Only push this one. Never push Epic’s engine image.
  6. Register the image in Simpl. See Use a Docker image.
The first build downloads a very large engine image (about 20 GB), so it takes a while. Later builds are quicker. On newer Unreal versions than 4.27.2, the build might need small changes.

What your server needs to do

  • Use port 7777 (UDP). That’s Unreal’s default. Simpl sends your players there.
  • Write logs to the console. Use a Development server, not Shipping, so you can read the logs in the dashboard.
  • Exit when the match is over. The server stops, and so does billing.
Match details are in a file your server can read. See its_simpl.json.

Plugin

You don’t need a plugin to run servers on Simpl. There is a Simpl plugin for Unreal (lobbies, matchmaking and match details). See Unreal SDK overview.

If something goes wrong

  • The server opens an empty world. Set ServerDefaultMap, as shown in “Set up your project”.
  • You can’t see any logs. Build a Development server, not Shipping.
  • “Exiting abnormally” appears when a server stops. That’s normal. It doesn’t mean a crash.
  • Warnings about xdg-user-dir or OnlineSession. You can ignore them.
  • Unreal 4.27 asks for Visual Studio 2017. Add -VS2019 to the RunUAT command.
  • The container build failed once, then worked. Just run it again.