Factorio ยท Server setup

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.

  1. 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.

  2. Pick the branch

    The template asks for Stable (what you want) or Experimental (nightly, for patch-testing). Swap anytime from the panel.

  3. Wait for the binary to pull

    The headless binary is tiny โ€” ~30 MB. First install takes ~20 seconds.

  4. 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. Requires username + token (see below).
  • username + token โ€” from factorio.com/profile. The token is NOT your password. Without these, public visibility is ignored.
  • require_user_verification โ€” requires clients to own a legit Factorio license. Always true for 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.zip through _autosave5.zip).
  • auto_pause โ€” pause when nobody is online. Saves CPU on small plans.
  • allow_commands โ€” "true", "admins-only", or "false". admins-only is 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

  1. Download the mod ZIP

    From mods.factorio.com, grab the .zip. Filename format: ModName_1.2.3.zip.

  2. Upload to mods/

    SFTP the ZIP into the server's mods/ folder. Don't extract.

  3. Update mod-list.json

    Edit 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

  1. Launch Factorio on your PC

    From the main menu: Play โ†’ Multiplayer.

  2. Browse Public Games

    If you set visibility.public: true, your server shows up within 2-3 minutes of first boot. Filter by name.

  3. Or use Connect to address

    Bottom-right: Connect to address โ†’ YOUR-SERVER-IP:34197.

  4. Test admin commands

    In-game chat: /promote yourself (must be in server-adminlist.json first), then /time, /evolution, and /save to smoke-test.

Common errors and fixes

Server doesn't show in the public browser

  • visibility.public is false โ€” set to true
  • username + token missing from server-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 see Authentication 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 F5 twice 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: true in server-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_slots to 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 (set enabled: 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.