How to set up a Factorio multiplayer server
A dedicated Factorio server keeps your factory running for the whole group: the host no longer needs to be online, and everyone picks the megabase back up whenever they like. Here's how it actually works — including the two traps that cost people an evening.
The server isn't configured by environment variables, but by a file
This is the part most tutorials get wrong. The Factorio server reads its settings from config/server-settings.json, and nowhere else. Unlike a Minecraft server, there is no MAX_PLAYERS or PASSWORD environment variable: if that file isn't written, the server starts on its defaults, with no password at all.
Here are the keys that matter, with the values we set:
| Key | Value | What it does |
|---|---|---|
name |
your server's name | shown to players |
game_password |
generated per server | the only barrier to entry |
max_players |
your slots (0 = unlimited) |
cap on simultaneous connections |
visibility |
{ public: false, lan: true } |
not publicly listed: you join by address |
username / token |
empty | not needed unless the server is public (see below) |
autosave_interval |
10 (minutes) |
how often the game autosaves |
autosave_slots |
5 |
how many rotating autosaves are kept |
auto_pause |
true |
the game pauses when nobody is connected |
only_admins_can_pause_the_game |
true |
stops one player pausing the factory for everyone |
non_blocking_saving |
true |
saving no longer freezes the game |
allow_commands |
admins-only |
console commands: admins only, everyone, or nobody |
You do not need a factorio.com account. This is the most widespread misconception: the official wiki is explicit that username and token "are necessary if you wish to make the server public. Otherwise, they can be left empty." A private server people join by address needs no identification at all — just the password.
The ports: the one the game uses isn't the one you probe
Factorio plays over UDP on port 34197 (official wiki). UDP can't be tested the way TCP can: nothing "answers" a plain probe. That's why server availability is checked on the RCON port, TCP 27015 — when RCON answers, the server is genuinely up.
Remember it if you're self-hosting: opening 34197 as TCP achieves nothing, and "the port isn't responding" means nothing over UDP.
Trap 1: the server reloads an empty map
This one costs whole evenings, and it comes from the most widely used Docker image.
Two settings coexist: GENERATE_NEW_SAVE (create a fresh map) and LOAD_LATEST_SAVE (load the most recent save). On the very first boot there is no save, so generating is the right thing. But if GENERATE_NEW_SAVE stays on when a save already exists, the sequence is merciless: the image generates a fresh map, that map becomes the most recent one, and LOAD_LATEST_SAVE loads… the empty one. Your factory is still there on disk, but nothing loads it.
So the rule is: as soon as a save exists, GENERATE_NEW_SAVE must go back to false. Here, the agent inspects the saves/ directory before every start and flips the setting itself — which is why an imported world or a previous session always comes back.
Trap 2: SAVE_NAME is mandatory when generating
A corollary of the above, and less well known: when GENERATE_NEW_SAVE is true, the image requires SAVE_NAME. Without it, it doesn't start at all and exits on you must specify $SAVE_NAME. The message is clear enough once you read it in the logs — you just have to go looking, since the container dies within seconds.
Versions have to match exactly
The wiki leaves no room: "All game instances need the installation of exactly the same game-versions and mods." Mod checksums are calculated at launch and compared when joining.
The direct consequence here: the server pulls the latest stable version at every session. You're always up to date without doing anything — but so must everyone else be. If a friend stays on an older version, they won't be able to join. It's a deliberate trade-off: better a server that's always current than one frozen on a version the group has moved past.
RAM won't save your megabase — CPU will
Factorio is a game about UPS (updates per second), and UPS depend on a single fast core. A factory that struggles almost never struggles for want of memory: it struggles because the core simulating the belts can no longer keep up.
- Small or medium factory, up to 8 players: the 8 GB tier is plenty.
- Large factory, megabase, lots of bots: add RAM if you like, but above all move to the dedicated CPU level — it's the only change that lifts UPS.
Player slots default to 8 and go up to 32.
The map preset is chosen once, and only once
Eight presets are available: default, rich resources, rail world, island, ribbon world, marathon, death world, death world marathon. They only act at map generation: once the world exists, changing the preset changes nothing. Choose it at creation, or import an existing save.
The Space Age expansion is off by default — base game. You have to enable it explicitly, and do so before loading a Space Age save, otherwise it won't load.
Console, saves and imports
The RCON console is built into your TickServ console: server commands, player management, /server-save on demand, without leaving the game. It's also what counts the players online.
On the saving side, three nets overlap: the game's own autosaves every 10 minutes (5 kept, rotating), a full archive before every shutdown with a /server-save immediately before it, and an automatic backup every 30 minutes during a session, of which the last 5 are kept.
Finally, you can import an existing game by dropping its .zip file at creation — the very file Factorio writes into its saves directory.
Create your Factorio server. Your first session is free.