RE:NODE

Guides11 min read

Factorio Space Age multiplayer server

Run Space Age on a Factorio headless server: enabling the expansion, who needs to own it, planets and platforms as surfaces, RAM, UPS and save size.

0 readers

A Space Age multiplayer server is the normal Factorio 2.0 headless server with three expansion mods enabled - space-age, quality and elevated-rails. The headless package ships with the expansion's data, so the server itself needs no licence, but every player who joins must own Space Age. What changes is the scale: each planet and each space platform is a separate surface, simulated all the time, so a mature Space Age game behaves like several factories running in one tick. Plan for 4-6 GB of memory on a long game, bigger saves and longer joins, and a single CPU core that has to carry every planet at once. This post covers enabling the expansion, starting or converting a map, what each planet costs, and keeping the update rate at 60.

The headless server itself - download, server-settings.json, ports, admins - is covered in the Factorio headless server guide, and the general theory of UPS and mods in Factorio mods and UPS. This post is the Space Age layer on top.

What Space Age is, in server terms#

Space Age is the paid expansion released alongside Factorio 2.0. Technically it is delivered as three official mods that sit next to base:

ModAddsWho needs to own it
space-agePlanets, space platforms, new science, new enemiesEvery player
qualityQuality tiers for items and machinesEvery player
elevated-railsRaised rail ramps and supportsEvery player

All three are part of the paid expansion. They can be enabled independently - a server can run elevated rails and quality without the planets - but a player who does not own the expansion cannot join a server with any of them enabled.

The free 2.0 update is everything else: the engine changes, the reworked fluid system, the new rail building, the remote view and the interface improvements. A server with all three expansion mods disabled is a 2.0 base-game server, and anyone with Factorio can join it.

The headless server download from factorio.com includes the expansion's data folders - data/space-age, data/quality, data/elevated-rails - alongside data/base. There is nothing extra to download for the server.

Enabling the expansion on a headless server#

Whether the expansion is active is decided by mods/mod-list.json, exactly as for any other mod:

mods/mod-list.json
{  "mods": [    { "name": "base", "enabled": true },    { "name": "elevated-rails", "enabled": true },    { "name": "quality", "enabled": true },    { "name": "space-age", "enabled": true }  ]}

The mods do not need to be in the mods folder as zip files - they are loaded from data/. mod-list.json only switches them on or off. If the file does not exist yet, the server creates it on first start; in current 2.0 releases the expansion mods are enabled by default when the data is present, so check the file rather than assuming either way.

The expansion has to be enabled when the map is created if you want a Space Age game from the start:

bash
$ cd /opt/factorio$ ./bin/x64/factorio --create ./saves/space.zip \    --map-gen-settings ./data/map-gen-settings.json$ ./bin/x64/factorio --start-server-load-latest \    --server-settings ./data/server-settings.json

--start-server-load-latest loads the newest save in saves/, including autosaves, which is what you want after any unclean stop. The headless guide covers the other arguments.

On RE:NODE the map is generated on the first boot and the mods folder is there from the start, so turning the expansion on or off is an edit to mod-list.json in the file manager - followed by a new map if you want it from day one.

Starting fresh, or adding Space Age to an existing map

You have two choices for a group that already has a 2.0 base-game map:

Start a new Space Age map. Everyone goes through the expansion's progression from the start, and the map is generated with the expansion's changes to Nauvis from the beginning. This is what most groups do.

Enable the expansion on the existing save. Factorio supports loading a base-game save with the expansion turned on: the new technologies appear in the tree and the other planets become reachable as your research gets there. Your existing Nauvis base is kept. Take a backup before you do it, because there is no clean way back - once a save has been loaded with the expansion and played, disabling the expansion again removes everything that came from it.

Saves from 1.1 also load in 2.0, with migrations. Mods are the problem there: many 1.1 mods were never updated for 2.0, and a 1.1 save that depends on one cannot move forward without dropping that mod. Factorio mods and UPS explains why removing a content mod from a save is so destructive.

Surfaces: why one Space Age game is several factories#

A surface in Factorio is a separate map. A 1.1 game had one, Nauvis. A Space Age game has one for each planet you have reached and one for each space platform you have built.

Headless serverone game tickNauvisbiters, main baseVulcanusdemolishersFulgorascrap, lightningGlebaspoilage, pentapodsSpace platformseach is a surface
One Space Age server, many surfaces, one tick

Two facts follow.

Every surface is simulated all the time. The factory on Vulcanus keeps producing while every player is on Nauvis. A platform keeps travelling and fighting asteroids with nobody aboard. That is necessary for the game to work, and it means the cost of a Space Age game is the sum of all its bases, not the one the players are looking at.

All surfaces share one update. There is one game tick for the whole server. If the Gleba base is expensive enough to push the tick past 16.67 milliseconds, the whole game - every planet, every platform - slows down for everyone. A slow planet slows the universe.

Space platforms deserve their own mention. A platform is a moving factory: hub, asteroid collectors, crushers, thrusters, turrets and whatever production you put on it. Platforms in transit are fighting asteroids continuously. A few are cheap; thirty forgotten platforms parked in orbit, still collecting and crushing asteroids into full hubs, are not.

What each planet costs#

The planets are not equally expensive. Each has a mechanic that shows up on the server in its own way.

SurfaceWhat costsWhat helps
NauvisBiters, pollution, the main baseSame as 1.1: fewer bots, sensible defences
VulcanusLarge mining and foundry buildsBig drills and foundries mean fewer entities
FulgoraScrap recycling chains, lightningCompact recycling, attractors where needed
GlebaSpoilage on items, agriculture, pentapod attacksShort, fast production lines, less buffering
AquiloHeating networks, cryogenicsKeep heat pipe networks tidy
PlatformsAsteroid collection, turrets, thrustersFewer, purposeful platforms

Gleba is the planet most likely to surprise a server. Many of its products spoil over time, so items carry spoil timers, and long buffers full of perishable goods are both wasteful and work for the simulation. Gleba bases that run short and fast are better for the game and for the server.

The 2.0 engine helps in places. The fluid system was rewritten to be cheaper and more predictable, and large new machines - foundries, electromagnetic plants, big mining drills - do far more per entity than their 1.1 equivalents. A Space Age factory built with the new buildings can be smaller in entity count than a 1.1 factory of the same output.

Memory, saves and joining#

StageRAMSave sizeNotes
Nauvis only, early game1-2 GB5-20 MBLike a 2.0 base game
Two or three planets2-4 GB20-60 MBFirst platforms running
All planets, several platforms4-6 GB60-150 MBTypical long game
Large late game, many platforms6 GB+150 MB+Measure, do not guess

Memory grows with every surface, because Factorio keeps the whole map of every surface in memory. Exploring a planet with radar charts more of it, and charted map data stays.

Saving needs more memory, briefly, than running. A server at 90% of its limit is most likely to reach it during an autosave. On RE:NODE a container that hits its memory limit is stopped and restarted clean rather than swapping - fine for the machine, but it loses everything since the last autosave. RE:NODE's Factorio plans run from 1 GB to 6 GB, which covers most Space Age groups; a very large late game can outgrow the top tier, and the memory graph will show it coming. When to upgrade your plan has the signs.

Saves matter for joining too. A player joining downloads the whole save - every surface - and then catches up to the current tick. A 100 MB save on a modest connection takes a while, and the catch-up takes longer if the server is near its tick budget. On a busy server, lower max_upload_slots in server-settings.json so joins happen one or two at a time and each is faster.

Keeping UPS at 60#

UPS - updates per second - is the only performance number that matters for Factorio, and the server has 16.67 ms per tick to update every surface. The single-threaded rule from 1.1 still applies: more cores do not raise UPS; a faster core does.

Measure before you change anything. The headless binary can run a save as fast as possible and report time per tick:

bash
$ ./bin/x64/factorio --benchmark ./saves/space.zip \    --benchmark-ticks 1000 --benchmark-runs 3 --benchmark-verbose all

With the expansion, the breakdown in verbose mode covers every surface together, so a planet that is suddenly expensive shows up as a jump in the relevant subsystem. Factorio mods and UPS has the full benchmark method.

Then, in roughly this order:

  1. Retire unused platforms. Every platform is a surface. Deconstruct the ones you no longer need instead of parking them.
  2. Use the new big machines. Foundries, electromagnetic plants and big mining drills replace many old entities with one.
  3. Shorten Gleba lines. Less buffering of spoiling goods.
  4. Rein in bots on Nauvis. A main bus of bots costs far more than belts, as it always did.
  5. Fewer radars. Remote view does not need radars everywhere.
  6. Restart regularly so memory stays flat. Restart schedules that help has the timing argument.

Remote view, which lets players look at any planet or platform, is rendered by each player's own machine. It costs the client frame rate, not the server's tick, so a player complaining of low frame rate while viewing Fulgora is describing their PC.

Server settings worth revisiting for Space Age#

A few server-settings.json keys behave differently in a Space Age game:

KeyDefaultSpace Age consideration
auto_pausetrueWith nobody connected, platforms stop mid-trip and planets stop producing. Usually what you want
autosave_interval10Bigger saves take longer to write; do not push it too high to compensate
autosave_slots5Five copies of a big save use real disk space
max_upload_slots5Lower it on a big save so joins finish faster
afk_autokick_interval0Players on long platform trips are sometimes AFK on purpose

The /config set console command changes most of these on a running server - /config set max-upload-slots 2 takes effect immediately. The console reference is in Factorio server commands and admin.

Playing together across planets#

Space Age changes how a group plays on one server, and a few of those changes are worth knowing before the first rocket.

Players spread out. Early on everyone is on Nauvis; by the mid game it is normal to have one player on Vulcanus building foundries, another on Fulgora sorting scrap and a third riding a platform between them. That is fine for the server - it simulates every surface anyway - but it means any one player can make a mess on a planet nobody else is watching. Permission groups and a clear agreement on who owns which planet save arguments later.

Travel takes real time. A platform trip between planets is a journey measured in minutes, and a player aboard is out of reach of the rest of the factory until it arrives. With auto_pause on, a trip started just before everybody logs off simply waits for the next session.

Space platforms are shared property. Any player on the force can change a platform's schedule, its requests and what it builds, which is the multiplayer version of somebody rerouting the trains. Agree on platform names and purposes, and treat changing another player's platform the way you would treat moving their belts.

Backups before every update#

Factorio 2.0 is still receiving patches, and Space Age saves contain a lot of state that migrations have to carry forward. Before every update of the headless server, take a copy of the save. Before enabling the expansion on an existing map, take a copy. Before adding or removing a mod, take a copy.

Autosaves are not backups: they live next to the save on the same disk and they rotate. Backups that actually restore makes the case for real copies that you occasionally test. On RE:NODE, backup slots are included on every Factorio plan, stored off the machine and restored with a button, and the Schedules tab can send /server-save as a console command and take a backup straight after, on a cron expression.

FAQ#

Does the Factorio headless server need a Space Age licence?

No. The headless download includes the expansion's data and runs without a licence. Each player who joins a server with any of the expansion mods enabled must own Space Age.

Can players without Space Age join a Space Age server?

No. They can join only a server with space-age, quality and elevated-rails all disabled - a 2.0 base-game server.

Can I add Space Age to our existing 2.0 map?

Yes. Enable the three mods in mod-list.json and load the save; the new technologies and planets become available. Back up first, because disabling the expansion again later removes everything it added.

Why did the whole game slow down after we settled Gleba?

All surfaces share one game tick. If one planet's base is expensive, the tick takes longer for everyone. Run the benchmark, then look at long buffers of spoiling products and the size of the Gleba base.

How much RAM does a Space Age server need?

2-4 GB through the first planets, 4-6 GB for a long game with every planet and several platforms. Watch the memory graph during autosaves, when use briefly peaks.


Comments

Completely anonymous: no account, no email, no cookie. We store the name you type, the text and the time - nothing else. Links are limited and markup is not rendered.

0/2000