How to Host a Factorio Dedicated Server (Headless, Linux)
This guide walks through standing up a Factorio dedicated server on Linux. There are two install paths: the headless tarball from Wube Software (no graphics or sounds, smaller download) and SteamCMD (Steam app 427520, full game files but starts headless when given --start-server flags).
Two valid install methods: the headless package is more efficient for a server-only host. SteamCMD downloads the full game data but behaves identically as a server when launched with --start-server. Pick whichever fits your workflow.
Prefer not to run your own box? Factorio server hosting gives you the same headless build managed from a panel; the rest of this guide is the self-host path.
Method A: Headless Tarball (Recommended for Server-Only Hosts)
Wube Software publishes a Linux headless package at factorio.com/download/headless. Download, extract, run.
mkdir -p /opt/factorio && cd /opt/factorio
wget https://factorio.com/get-download/stable/headless/linux64 -O factorio_headless.tar.xz
tar -xJvf factorio_headless.tar.xz
Method B: SteamCMD
If you prefer SteamCMD or want a single-tool flow:
steamcmd +force_install_dir /opt/factorio +login anonymous +app_update 427520 validate +quit
The downloaded build is the full game (with graphics/sounds), but it starts in headless mode when you pass --start-server at launch — same behavior as the dedicated headless package.
Step 2: Generate or Bring a Save
Factorio's dedicated server runs from a save file. Either:
- Copy an existing single-player save into
/opt/factorio/saves/ - Or generate a new server-side save:
./bin/x64/factorio --create ./saves/my-save.zip
Step 3: Launch the Server
cd /opt/factorio
./bin/x64/factorio --start-server ./saves/my-save.zip
Run ./bin/x64/factorio --help for the full list of command-line arguments. Common useful ones:
| Flag | Purpose |
|---|---|
--start-server SAVE.zip | Start headless with the named save |
--start-server-load-latest | Auto-pick the most recent save in saves/ |
--server-settings server-settings.json | JSON file with server name, password, visibility, autosave, etc. |
--server-adminlist server-adminlist.json | JSON file with admin usernames |
--server-banlist server-banlist.json | JSON file with banned usernames |
--server-whitelist server-whitelist.json | JSON file with whitelisted usernames |
--port N | UDP port (default 34197) |
--rcon-port N | RCON port (TCP) |
--rcon-password PASS | RCON password |
--use-zstd-compression | Zstandard save compression (2.0+) — faster save/load on big maps |
Step 4: Edit server-settings.json
Factorio ships a data/server-settings.example.json template. Copy it and edit:
cp data/server-settings.example.json server-settings.json
Key fields:
name— server display name in the public browserdescription— short description shown to browsing playerstags— discoverability tagsgame_password— connect password (empty for open)visibility.public— whether to advertise on the Factorio public browservisibility.lan— LAN announceautosave_interval— autosave every N minutesautosave_slots— how many rotating autosave slots to keepafk_autokick_interval— kick idle players after N minutesauto_pause— pause when no players online
Step 5: Open the Port
Default Factorio port is UDP 34197. Forward that port on your router/firewall. If you want public browser visibility, the server announces itself to the Factorio matchmaker — no inbound DNS work needed.
If you also enable RCON, open the configured RCON port (TCP).
Step 6: Mods
Mods are downloaded automatically when set in the save. Server-side mod installation:
- Subscribe to the mods on mods.factorio.com with the username/password your server uses (in
server-settings.json'susername+tokenfields). - Server downloads selected mods on first start.
- For modded saves, players need the same mods installed client-side — Factorio's matchmaker compares mod lists at connect time.
First Boot Verification
- Watch the log for
Hosting game at IP ADDRESS(es) and portline — that's the green light. - The server should appear in the public browser within a couple of minutes if visibility is set to public.
- Test connect from your client: paste IP:port directly, or browse the public list.
Common Boot Failures
| Symptom | Fix |
|---|---|
| "Save file not found" | Verify save path is correct (relative paths are relative to the factorio binary's cwd) |
| Server doesn't appear in public browser | Check visibility.public in server-settings.json; verify username + token |
| Mods don't download | username / token in server-settings missing or wrong; subscribe to mods on the website with that account first |
| "Different version" rejection | Server version doesn't match save's mod versions; update the server with SteamCMD or re-download headless |
Run It 24/7: systemd Service (Linux)
For a server that survives reboots and comes back after crashes, run Factorio under systemd instead of a terminal session. First create a dedicated user — don't run the server as root:
sudo useradd -m factorio
sudo chown -R factorio:factorio /opt/factorio
Then create /etc/systemd/system/factorio.service:
[Unit]
Description=Factorio Headless Server
After=network.target
[Service]
Type=simple
User=factorio
WorkingDirectory=/opt/factorio
ExecStart=/opt/factorio/bin/x64/factorio --start-server-load-latest --server-settings /opt/factorio/server-settings.json
Restart=always
[Install]
WantedBy=multi-user.target
Enable and start it with sudo systemctl enable --now factorio. Restart=always brings the server back after a crash, and --start-server-load-latest resumes from the newest autosave. The headless binary needs only standard glibc / libstdc++6, present on any modern Debian or Ubuntu.
Multiple instances: use a systemd template unit (factorio@.service, started as factorio@1, factorio@2…) to run several servers with separate ports and settings files without duplicating service descriptors.
Hardware Notes
Factorio is single-thread heavy on the server side. Late-game megabases stress the simulation tick rate; large factories with many trains and complex circuit logic will cap your single-thread CPU before they cap your RAM. NVMe storage helps with autosave write times.
The number to watch is UPS (updates per second): the simulation targets 60 UPS, and when a huge factory drags it below 60, the game slows down for every connected player. On an empty server, auto_pause in server-settings.json stops the map — and biter evolution — while nobody is online.
Related Reading
- Factorio Server Hardware Requirements - how much CPU (single-thread speed!) and RAM a factory actually needs.
- Is It Legal to Host a Factorio Server? - what Wube's terms allow, and why baking the headless binary into a public Docker image is redistribution.
- Official: Factorio Wiki - Multiplayer
- Official: Factorio headless package download
Quick Start with Supercraft
Supercraft hosts Factorio dedicated servers with the headless package pre-installed, server-settings.json exposed via panel form fields, autosave + autosave-slots tuned, mod auto-install wired to your factorio.com credentials. RCON is pre-configured.