FACTORIO 2.1: GHOSTING HEADLESS CHECKS Date: 2026-10-27 Article: https://ghosting.gg/blog/factorio-2-1-server-update Scope: disposable official Linux x64 headless installs in Ubuntu 24.04 Docker containers on an Apple Silicon Mac. No published ports, public server listing, customer files, player credentials or production servers. These checks establish configuration/migration behaviour. They do not establish performance, a public multiplayer join, mod-pack compatibility or long-duration factory reliability. PACKAGES 2.1.23 (build 87750): https://factorio.com/get-download/2.1.23/headless/linux64 Archive SHA-256: 4633250f7747676279fb210a1717ba34caed6b9890c951fb3e469eefe43c46b9 2.0.77 (build 84539): https://factorio.com/get-download/2.0.77/headless/linux64 Archive SHA-256: c4efc11529f74d37c96933e291e0db73fd9f5aa4738913d9301b24680b3e947f The first archive was fetched through the stable alias, then its version checked. CONFIGURATION CHECKS For each case we used a fresh write-data directory and a version=13 config.ini whose read-data pointed at the package data directory. A fresh mods/mod-list.json selected the component set. We ran the binary with --config CONFIG --create SAVE. 1. Explicit Base: base=true; elevated-rails=false; quality=false; recycler=false; space-age=false. Exit 0; new map created. 2. Old Base list: same list with the recycler entry omitted entirely. Exit 0; recycler added as enabled to mod-list.json and loaded. 3. Space Age without Quality: base=true; elevated-rails=true; recycler=true; space-age=true; quality=false. Exit 0; new map created. 4. Minimal incompatible mod: explicit Base list plus gh-probe=true. mods/gh-probe_0.0.1/info.json contained: {"name":"gh-probe","version":"0.0.1","title":"Compatibility probe", "author":"GHosting","factorio_version":"2.0", "dependencies":["base >= 2.0.0"]} There was no Lua code. Exit 1: Failed to load mod "gh-probe": Incompatible Factorio version (current: 2.1, required: 2.0) Relevant actual startup lines (paths/timing omitted): base-explicit: core 0.0.0 (data.lua) base 2.1.23 (data.lua) base-omitted: core 0.0.0 (data.lua) base 2.1.23 (data.lua) recycler 2.1.23 (data.lua) space-no-quality: core 0.0.0 (data.lua) base 2.1.23 (data.lua) elevated-rails 2.1.23 (data.lua) recycler 2.1.23 (data.lua) space-age 2.1.23 (data.lua) MIGRATION INVENTORY CHECK We created a disposable Space Age save with 2.0.77 and official components enabled. Console scripting disabled achievements in this fixture. It was not a naturally played factory. We generated distant Nauvis chunks, placed a crusher using metallic-asteroid-reprocessing with two normal-quality quality-module-3 items, and a nearby steel chest containing three more. The fixture was saved, copied into a separate 2.1 write-data directory and loaded with all five official components enabled. Inventory counts were queried through Lua after migration: GH_BEFORE crusher_modules=2 chest_modules=3 GH_AFTER crusher_modules=0 chest_modules=3 recipe=metallic-asteroid-reprocessing The 2.1 map reached InGame, a server-save completed, and the server quit cleanly. This measured those inventories only; it did not exhaustively search every place removed items might go. It supports storing the modules before upgrading, not a universal item-loss claim about every save. DOWNGRADE CHECK The 2.1-saved fixture was given to the 2.0.77 binary with --benchmark SAVE --benchmark-ticks 1. It refused to load: Map version 2.1.23-2 cannot be loaded because it is higher than the game version (2.0.77-0). PACKAGE DEPENDENCIES 2.1.23 data/space-age/info.json lists: base >= 2.1.0 elevated-rails >= 2.1.0 + quality >= 2.1.0 recycler >= 2.1.0 The + marker denotes a recommended dependency. data/recycler/info.json requires base >= 2.1.0 and sets expansion_required=true. The component split does not make Recycler free base-game content or remove Space Age ownership requirements. IMAGES Gameplay/UI screenshots are Wube Software's development images, not our test screenshots. They are credited and linked in the article: https://cdn.factorio.com/assets/blog-sync/fff-443-unloader-01.png https://cdn.factorio.com/assets/blog-sync/fff-443-input-output-asteroid-collector.png The module-count diagram is GHosting's illustration of the inventory check.