Run a dedicated server.
The Linux build runs the Space Engineers dedicated server headless, with the same plugin system as the client. Start it from the AppImage, put it in Docker, or host Torch on top and manage plugins from its interface.
First run
Download the AppImage from the downloads page, make it executable, and start it with --dedicated:
./CringeLauncher.AppImage --dedicatedThe first launch downloads the dedicated server files automatically. It creates an instance directory in the working directory for configuration, plugins and saves. No Steam installation is required on the machine.
The server does not create a world by itself. Before the first real start, prepare one as described below; otherwise the server exits without starting a session.
Set up a world
The game content ships with premade worlds under Content/CustomWorlds:
- /game/Content/CustomWorlds in the Docker container.
- game/Content/CustomWorlds next to the AppImage.
Empty World and Star System are good starting points. Copy the world into the server save directory:
cp -r "game/Content/CustomWorlds/Empty World" instance/SpaceEngineers/Saves/MyWorldOpen SpaceEngineers-Dedicated.cfg in the server directory and set LoadWorld to the world directory, then start the server:
<LoadWorld>MyWorld</LoadWorld>
<IgnoreLastSession>true</IgnoreLastSession>A relative path is resolved against the save directory, so <LoadWorld>MyWorld</LoadWorld> selects the same world. The server automatically loads the last session when one exists; set <IgnoreLastSession>true</IgnoreLastSession> when it should always load the configured world.
The log confirms the world that was loaded:
Loading session: /data/SpaceEngineers/Saves/MyWorld
Session loaded
Game ready...Multiple instances
Use --instance to select a different instance directory:
./CringeLauncher.AppImage --dedicated --instance=my-instanceEach instance keeps its own configuration, plugins and worlds, so several servers can run side by side on one machine. Use a separate port configuration inside each instance if they are public at the same time.
Dedicated plugins
Dedicated plugins are installed the same way as client plugins, but are published with the CringePluginDedicated package type. The loader only loads them in --dedicated mode, so a client install and a server install can share a package feed without loading the wrong code.
See Build and publish for the package type and review rules.
Torch
Torch is a dedicated server management tool with a UI, live management and its own plugin system. SE Launcher can host it as a provider. Start the dedicated server once to create the instance, then stop it and edit instance/CringeLauncher/config/packages.json.
Add a source for Torch packages, a source for the Silk.NET packages Torch depends on, and the Torch.Provider package plus your Torch plugins:
{
"sources": [
{
"name": "CringeLauncher Official",
"pattern": "^SpaceEngineersDedicated\\.ReferenceAssemblies$|^ImGui\\.NET\\.DirectX$|^NuGet$|^Cringe.+$|^SharedCringe$|^Plugin.+$",
"url": "https://ng.zznty.net/v3/index.json"
},
{
"name": "Torch",
"pattern": "^Torch.*$",
"url": "https://ng.zznty.net/v3/index.json"
},
{
"name": "Silk",
"pattern": "^Silk\\.NET.+$",
"url": "https://gitlab.com/api/v4/projects/51457475/packages/nuget/index.json"
},
{
"name": "nuget.org",
"pattern": "",
"url": "https://api.nuget.org/v3/index.json"
}
],
"packages": [
{
"id": "Torch.Provider",
"range": "[0.0.0, )"
},
{
"id": "TorchPlugin.YourPlugin",
"range": "[0.0.0, )"
}
],
"profiles": []
}Torch.Provider is the adapter that hosts the Torch server inside the dedicated launcher. Torch plugins are regular NuGet packages with the TorchPlugin package type; add one entry per plugin. Run the AppImage with --dedicated again, wait for the packages to download, then press Start in the Torch UI.
You can browse the feed with a local NuGet client:
dotnet package search TorchPlugin --source https://ng.zznty.net/v3/index.jsonDocker
The dedicated server can run as a Docker container instead of the AppImage. The image is based on Arch Linux, contains the launcher, and runs a headless Wayland session with a VNC server so the Torch UI is usable remotely.
- The game root is mounted at /game, with the server executable at /game/DedicatedServer64/SpaceEngineers.exe.
- All writable state lives in /data.
- The game port is 27016/udp and the VNC server is published on 5900.
Build an image with the game files
The recommended deployment embeds the server content in the image. Clone the repository and build from its root:
git clone https://git.zznty.net/PvE/se-launcher.git && cd se-launcher
docker build -f docker/game.Dockerfile -t cringelauncher-game:preview dockerThe base image defaults to zznty/cringelauncher:preview. Pass --build-arg BASE=zznty/cringelauncher:latest to build on the stable branch. The build downloads the game from Steam, so it takes a while and needs several GB of free disk.
Run
docker run -d --name cringelauncher \
-p 27016:27016/udp \
-p 5900:5900 \
-v /srv/se-dedicated:/data \
cringelauncher-game:preview/srv/se-dedicated keeps configuration, plugins and worlds across restarts. A named volume works too. Publish the VNC port only if you need the Torch interface.
Rebuild after an update
docker build --pull -f docker/game.Dockerfile -t cringelauncher-game:preview docker--pull fetches the latest base image and re-runs the game download step. If only the game changed, use --no-cache instead. After rebuilding, recreate the container so it uses the new image.
Files and paths
- Instance root — instance/ by default, or the directory passed to --instance.
- Launcher config — instance/CringeLauncher/config/, including packages.json and launcher.json.
- Torch config — instance/CringeLauncher/config/Instance/.
- Worlds — instance/SpaceEngineers/Saves/.
- Docker — /data for writable state, /game for game content.
The wiki has the longer server pages, including the current Torch configuration and Docker options.