Menu
 

Factorio Multithreading: What Is Threaded on a Server, and What Is Not

Factorio Multithreading: What Is Threaded, and What Is Not

Checked against the shipped builds on 20 September 2026. Stable is 2.0.77, internal build 84539. Experimental is 2.1.19, internal build 87445, released 16 September 2026. Every claim below comes from those two headless builds and from Wube's own changelog.txt that ships inside them.

This page exists because "Factorio multithreading" attracts a lot of confident, invented advice: per-planet threads, core pinning flags, drift settings. None of that is in the game. What Factorio does thread is a short, dated list, and knowing it is what stops you buying the wrong server.

The short answer

Factorio's tick is overwhelmingly single-threaded, and the parts that are not are specific subsystems Wube parallelised one at a time. Their changelog dates each one:

  • 0.18, 21 January 2020: "Electric networks, fluids, and heat pipes are updated in parallel if you have enough cores."
  • 1.1, 23 November 2020: "Multithreaded belt update logic." This is the one most often misattributed to 2.0, and it predates it by four years.
  • 2.0.7, 20 October 2024: "Improved circuit network logic by making it fully multithreaded."

Everything else that advances the world, including the entity update loop, inserters, assemblers, trains and robots, runs on one thread. That thread has to finish inside 16.67 milliseconds to hold 60 UPS, and no number of cores shortens it. This is why single-thread clock speed is the spec that decides how big your base can get.

What 2.1 changes about threading: nothing

The changelog shipped inside 2.1.19 covers 2.1.7 through 2.1.19, dated 23 June to 16 September 2026, and in that range there is no threading or multicore work at all. Its performance entries are ordinary optimisations: inserters with spoil priority, the pollution update when a chunk's trees stop accepting damage, the control behavior update, and several rendering improvements a headless server never runs. The shipped file does not carry entries for 2.1.0 to 2.1.6, so this is not a claim about those six releases. What covers the whole of 2.1 is the binary itself: its option table is listed below, and there is nothing of the sort in it.

Wube have described 2.1 as quality of life, small features, polish and modding work. If you are choosing a server for a Space Age group, treat 2.1 as a content and convenience release, not a performance one. The 2.1 experimental server guide covers what it does bring and how to pin the branch.

There is no per-planet threading, and no flag for it

Planets in Space Age are surfaces inside the same simulation. They tick in the same loop as Nauvis, so UPS is one global number and a busy Gleba slows Nauvis down. There is no setting that puts a surface on its own thread, no way to pin a surface to a core, and no tick-drift tolerance to tune.

The headless binary has exactly one thread-related option, and its own help text says what it is for:

--threads THREADCOUNT     Number of threads to use when generating map previews

That is map preview generation. It does not touch how the game simulates.

If you find a guide offering --surface-threads, --thread-priority, a sam_max_drift setting or a /platform_ghost_mode command, none of those exist in any shipped build. This matters more than it sounds: an option the parser does not know is fatal, not ignored. The binary prints Option 'x' does not exist, dumps the usage and exits. Inside a systemd unit with Restart=always, that is a boot loop with no obvious cause. Run ./bin/x64/factorio --help and trust nothing that is not in the output, because that output is the option parser listing itself.

The 2.1 option table is not the 2.0 one

Worth knowing before you copy a launch line from a 2.0 guide onto a 2.1 server. Comparing the two builds' own --help output:

Added in 2.1.19Present in 2.0.77, gone in 2.1.19
--benchmark-consistency, --dap, --enable-replay, --exchange-string --host, --host-interactive, --until-tick, --disable-migration-window, --dump-icon-sprites, --log-spritesheets-to-optimize

The everyday server options are unchanged across both: --start-server, --start-server-load-latest, --server-settings, --port, --rcon-port, --rcon-password and the admin, ban and whitelist files all behave the same way.

What actually moves UPS on a server

  • Single-thread clock. The one spec that raises the ceiling. See hardware requirements for the sizing.
  • Entity count and update load, not map size. Inserters and active machines cost every tick; explored but idle chunks cost very little.
  • Surface count in Space Age. Five planets plus platforms is five sets of entities on one tick budget. Building the same factory across more surfaces does not spread the cost, it adds to it.
  • Autosave write speed. A long autosave shows up as a periodic stutter rather than a lower average. Fast storage and sensible autosave slots are the fix, not more cores.
  • Mods that run script every tick. Script cost lands on the same thread as everything else.

For measuring rather than guessing, the in-game timing overlay behind show-time-usage breaks the tick down by subsystem, which tells you whether you are entity bound, script bound or something else.

Scale Your Performance

The lever that exists is clock speed, so that is the one we buy for. View plans and pick a node on single-thread performance rather than core count.

Tired of fighting this issue every patch?

Run a managed Factorio server with us. We handle the patches, mod-version pinning, save backups, and DDoS protection. Set up in minutes, multiple datacenter regions, no contract.

See Factorio hosting plans →
Top