How to set up a Factorio server from scratch
Full setup walkthrough for a Factorio headless server: deploy the latest headless binary, configure server-settings.json, create or upload a save, install mods (vanilla, Space Age DLC, Bobs/Angels, Krastorio 2, Industrial Revolution 3), set up admin list and server tags, enable auto-save and public listing on the Factorio matchmaking server, and fix the common errors.
What you need first
- An active Factorio plan on Fatality Servers. See our Factorio hosting plans.
- A Factorio license per player โ clients need the game to join. The headless server itself runs without a license.
- A Factorio account at factorio.com/profile if you want the server listed on the public matchmaking server. You'll need a username + token (not your password).
- A basic SFTP client for uploading saves and editing JSON.
Sizing note: Factorio perf is about single-thread CPU speed. A megabase (thousand-SPM or larger) late-game save can drop below 60 UPS on anything less than a high-clocked Ryzen core. Early to mid-game on default map settings is trivial โ a 4-player vanilla run uses barely any RAM and maybe 15% of one core.
Deploy the server (1-click)
Our Factorio template downloads the latest stable headless binary from factorio.com/download/headless, generates a default server-settings.json and a fresh map, and opens UDP 34197 on your plan's IP.
-
Pick the Factorio template at checkout
On the Factorio hosting page, pick a plan sized by expected peak UPS load. Our Starter is fine for early/mid-game up to 4-8 players; Community handles 500 SPM mid-late-game; Flagship is where you go if you're shooting for 10k+ SPM.
-
Pick the branch
The template asks for Stable (what you want) or Experimental (nightly, for patch-testing). Swap anytime from the panel.
-
Wait for the binary to pull
The headless binary is tiny โ ~30 MB. First install takes ~20 seconds.
-
Confirm the server is listening
0.000 2026-04-18 12:34:56; Factorio 2.0.28 (build 80000, linux64, headless) 0.025 Running in headless mode 0.087 Loading map /home/container/saves/default.zip 1.342 Checksum for script ... 1.350 Hosting game at IP ADDR:({0.0.0.0:34197}) 1.351 Info ServerMultiplayerManager.cpp:886: updateTick(4294967295) changed state from(Ready) to(PreparedToHostGame) 1.498 Info ServerMultiplayerManager.cpp:886: updateTick(0) changed state from(InGame) to(InGame)
File layout & where things go
/
โโโ bin/x64/factorio โ the headless binary
โโโ data/ โ base game data (read-only, don't touch)
โโโ mods/ โ your mods live here
โ โโโ mod-list.json โ enable/disable flags
โ โโโ mod-settings.dat โ per-mod runtime settings
โ โโโ <ModName_<version>.zip> โ each mod is a ZIP
โโโ saves/
โ โโโ your-save.zip โ map saves (the world)
โโโ server-settings.json โ main server config
โโโ server-adminlist.json
โโโ server-whitelist.json
โโโ server-banlist.json
โโโ factorio-current.log โ server log output
Saves are ZIPs. A Factorio save is a .zip containing level.dat + metadata. Don't extract them โ the server reads the ZIP directly. If you download a save for backup, keep it as a ZIP.
Create a new save or upload one
Generate fresh from the server
SSH into the server (panel โ Console) or use the panel's built-in command:
./bin/x64/factorio --create saves/my-map.zip --map-gen-settings map-gen-settings.json
Our panel has a New Map button that runs this with a GUI โ pick size, resource richness, starting area, and peaceful mode, hit generate.
Upload an existing save from your single-player game
Find your local saves at:
- Windows:
%APPDATA%\Factorio\saves\ - macOS:
~/Library/Application Support/factorio/saves/ - Linux:
~/.factorio/saves/
Upload the .zip to the server's saves/ folder via SFTP, then set it as the startup save in Startup tab โ --start-server saves/your-save.zip.
Change maps
Save files are independent โ swap in any .zip under saves/ and restart. Old save stays put; just change the startup line.
Core server-settings.json
The main config file at server root. JSON โ watch your commas.
{
"name": "My Factorio Server [EU]",
"description": "Vanilla Space Age, friendly, auto-save every 5 min",
"tags": ["space-age", "vanilla", "europe"],
"max_players": 10,
"visibility": {
"public": true,
"lan": true
},
"username": "your-factorio-username",
"token": "your-factorio-token",
"game_password": "",
"require_user_verification": true,
"max_upload_in_kilobytes_per_second": 0,
"max_upload_slots": 5,
"minimum_latency_in_ticks": 0,
"ignore_player_limit_for_returning_players": true,
"allow_commands": "admins-only",
"autosave_interval": 5,
"autosave_slots": 5,
"afk_autokick_interval": 0,
"auto_pause": true,
"auto_pause_when_players_connect": false,
"only_admins_can_pause_the_game": true,
"autosave_only_on_server": true,
"non_blocking_saving": true,
"minimum_segment_size": 25,
"minimum_segment_size_peer_count": 20,
"maximum_segment_size": 100,
"maximum_segment_size_peer_count": 10
}
What actually matters:
nameโ server browser name. 60 chars max.tagsโ array of strings, shown in the server browser.visibility.publicโtrue= list on Factorio matchmaking. Requiresusername+token(see below).username+tokenโ from factorio.com/profile. The token is NOT your password. Without these,publicvisibility is ignored.require_user_verificationโ requires clients to own a legit Factorio license. Alwaystruefor public servers.game_passwordโ server-wide join password. Leave""for unrestricted.autosave_intervalโ minutes between auto-saves. Default 5 is fine; lower if you have large bases and cheap storage.autosave_slotsโ rolling autosave count (_autosave1.zipthrough_autosave5.zip).auto_pauseโ pause when nobody is online. Saves CPU on small plans.allow_commandsโ"true","admins-only", or"false".admins-onlyis the sane default.non_blocking_savingโ turn this on. Saves happen in a background thread; no more 2-second UPS hitches at autosave time.
Get your matchmaking token: go to factorio.com/profile โ log in โ scroll to "Multiplayer token" โ reveal. Paste that string (NOT your password) into server-settings.json. Without it, your server can't register on the public server browser.
Admins, whitelist, banlist
Three simple JSON files at the server root โ all plain arrays of Factorio usernames.
// server-adminlist.json
["YourName", "AnotherAdmin"]
// server-whitelist.json (if you set require_user_verification: true, only these usernames can join)
["YourName", "Friend1", "Friend2"]
// server-banlist.json
[
{ "username": "troll_123", "reason": "Griefing" }
]
In-game you can also manage these with chat commands:
/promote <username> โ grant admin
/demote <username> โ remove admin
/whitelist add <username>
/whitelist remove <username>
/ban <username> [reason]
/unban <username>
/kick <username> [reason]
Installing mods
Factorio has a first-party mod portal โ no Steam Workshop or CurseForge. All mods live at mods.factorio.com.
Option 1: auto-download with credentials
If server-settings.json has your username + token, the server can download mods directly from the portal. On our panel, use the Mods tab โ search by name โ click install. Server grabs the latest compatible version.
Option 2: manual upload
-
Download the mod ZIP
From mods.factorio.com, grab the
.zip. Filename format:ModName_1.2.3.zip. -
Upload to
mods/SFTP the ZIP into the server's
mods/folder. Don't extract. -
Update
mod-list.jsonEdit
mods/mod-list.json:{ "mods": [ { "name": "base", "enabled": true }, { "name": "space-age", "enabled": true }, { "name": "Krastorio2", "enabled": true }, { "name": "even-distribution", "enabled": true } ] }Restart. On boot, the server logs each mod load:
Info ModManager.cpp Loading mod Krastorio2 (1.3.21).
Popular mod packs
- Space Age (paid DLC, 2.0+) โ the official expansion. Interplanetary gameplay, quality tier, new sciences. Requires all players to own the DLC.
- Krastorio 2 โ balanced overhaul, adds matter manipulation and new sciences. Plays nicely with Space Age.
- Bob's & Angel's โ the OG "longer game" pack. Massive, notoriously complex. Mod compatibility is fragile; pin versions.
- Industrial Revolution 3 (IR3) โ total conversion starting with hand-crafting and steam engines; whole new tech tree.
- Pyanodons โ extremely long game (500+ hours). For people who thought Space Age wasn't enough.
- Quality-of-life โ Squeak Through, Long Reach, Rate Calculator, YARM (resource monitor), FNEI (recipe lookup). Safe to mix with any modpack.
Client and server mod versions must match. Unlike some games, Factorio will NOT auto-download mods to the client. Players need to install the same mod set before joining. Publish your mod list in Discord or a pinned MOTD. Our panel exports a ready-to-paste mod-list that players can import.
RCON & in-game commands
Factorio has native RCON over TCP. Enable with launch args (our panel does this automatically):
--rcon-port 27015 --rcon-password "your-rcon-password"
Connect with any Source-protocol RCON client:
- mcrcon โ CLI, great for scripts
- rcon-cli (Go) โ simple TUI
- factorio-rcon-api (Node) โ wraps RCON in HTTP for Discord bots
Once connected, you can run any chat command the Factorio console accepts, prefixed with /:
/version โ server version
/players โ online list
/save โ force a save
/c game.speed = 2 โ run arbitrary Lua (achievements get disabled)
/sc game.surfaces.nauvis.regenerate_entity{name="tree-01"}
/evolution โ show biter evolution factor
/time โ show in-game time
Scripting commands disable achievements. Any /c (short for /command) or /sc (silent-command) run on a save permanently flags it as "cheated" โ Steam achievements won't trigger. If you care about achievements, use the admin menu (right-click name โ Admin) for promotes/kicks instead.
Connect and test
-
Launch Factorio on your PC
From the main menu: Play โ Multiplayer.
-
Browse Public Games
If you set
visibility.public: true, your server shows up within 2-3 minutes of first boot. Filter by name. -
Or use Connect to address
Bottom-right: Connect to address โ
YOUR-SERVER-IP:34197. -
Test admin commands
In-game chat:
/promoteyourself (must be inserver-adminlist.jsonfirst), then/time,/evolution, and/saveto smoke-test.
Common errors and fixes
Server doesn't show in the public browser
visibility.publicisfalseโ set totrueusername+tokenmissing fromserver-settings.jsonโ without these the matchmaking server refuses- Wait 2-3 minutes โ Factorio matchmaking caches server lists
- Check the log for
Authentication succeededโ if you seeAuthentication failed, your token is wrong
"The mod(s) differ: ..." when joining
Client and server mod sets don't match. Either:
- Client uninstalls their extra mods, or
- Client subscribes to the server's mods (export list from panel, paste into client's
mod-list.json, relaunch)
"Map version X.Y.Z is incompatible with server version A.B.C"
Save was made on a newer Factorio than the server is running, or vice-versa. Match versions. Panel has a version swap dropdown โ pick the experimental branch for latest, stable for LTS.
UPS drops to < 60
Base is overtaking your CPU. Diagnose:
- In-game
F5twice to show the debug panel โ check "ms per update" for the largest contributors - Install the mod Fish Market / timer and run
/sc log(game.speed)to check sim speed - Common culprits: too many logistic bots flying, too many biter nests inside pollution cloud, bloated blueprint spam
- If you've hit the limit of a single core, upgrade to a higher-clock plan โ Factorio can't scale horizontally
Server auto-pauses and players complain
Set auto_pause: false. Default is true, meaning the server pauses when the last player leaves โ fine for small groups, annoying for 24/7 megabases where bots should keep building.
Autosave takes 5 seconds and freezes everyone
- Set
non_blocking_saving: trueinserver-settings.json - Save to SSD/NVMe, not spinning disk โ our servers are all NVMe-backed, so this should be automatic on managed plans
- Gigantic save (100MB+) will still take time even with non-blocking; reduce
autosave_slotsto lower I/O
Mods fail to load with "dependency not met"
- Some mods require specific versions of others (e.g. Krastorio 2 needs Flib 0.15.0+)
- Check the mod's Factorio Mod Portal page for declared dependencies
- Delete older versions from
mods/โ Factorio loads the first valid version it finds, but conflicts can happen
Mod-authored Lua error crashes the server
Check factorio-current.log for the traceback. You can:
- Disable the offending mod in
mod-list.json(setenabled: false) and restart โ save still loads without it, with warnings about missing entities - Revert to the last clean autosave in
saves/ - Report to the mod author with the traceback
Stuck on something specific? Email support with your server IP, the last 200 lines of factorio-current.log, and your server-settings.json โ we'll usually have an answer within the hour.