Factorio Field guide

Factorio Space Age Mod Compatibility: Handling 2.0 Updates and Prototype Errors

Factorio Space Age 2.0 mod compatibility: info.json requirements, parsing prototype exceptions in factorio-current.log, and safely disabling broken packages in mod-list.json.

Factorio Space Age Mod Compatibility: Handling 2.0 Updates and Prototype Errors

The release of the Space Age expansion alongside the Factorio 2.0 engine overhaul fundamentally transformed the internal simulation architecture. Numerous community modifications created during the 1.1 era have become incompatible due to altered item prototype hierarchies, the introduction of multi-surface planetary physics, and the quality tier system. Launching a server with outdated plugins causes immediate startup crashes during data stage initialization.

This technical guide explores the primary architectural causes of mod failures in Factorio 2.0, the format of the info.json manifest, analyzing prototype loading errors in runtime logs, and safely disabling malfunctioning extensions in mod-list.json without damaging save states.

Architectural Changes in Factorio 2.0 and Space Age#

The 2.0 runtime enforces strict version validation. If a community package has not been updated for the modern engine, the mod manager refuses initialization:

  1. Mandatory Manifest Target: The factorio_version key within info.json must be set to "2.0". Legacy archives specifying "1.1" are rejected outright.
  2. Multi-Surface World Hierarchies: In Space Age, the simulation is no longer constrained to a single nauvis surface. Worlds span vulcanus, gleba, fulgora, aquilo, and mobile space platforms. Scripts relying on hardcoded surface references like game.surfaces[1] trigger fatal desync errors.
  3. Specialized Container Layouts: Cargo landing pads and orbital platform hubs possess distinct inventory configurations, crashing legacy container sorting and auto-loader scripts.

Verify an installed mod's targeted engine version by inspecting its metadata file:

bash
cat /opt/factorio/mods/example-mod/info.json

Parsing Prototype Errors in Runtime Logs#

When a dedicated server crashes during initialization, the Factorio engine writes comprehensive exception details to factorio-current.log. Most breakages occur during Loading prototype data or Applying migrations:

bash
grep -E "Error|Failed|Crash" /opt/factorio/factorio-current.log | tail -n 20

Log entries such as Error ModManager.cpp:1624: Failed to load mod: Error while loading entity prototype "..." specify the exact script and line number responsible for the uncaught prototype exception.

Inspecting Mod States in mod-list.json#

Installed extensions on a headless server are orchestrated via /opt/factorio/mods/mod-list.json. To inspect whether a specific package is currently activated, query the JSON manifest using jq:

bash
jq '.mods[] | select(.name == "problematic-mod")' /opt/factorio/mods/mod-list.json

The output confirms the current boolean value of the "enabled" key.

Disabling Incompatible Extensions Safely#

Rather than deleting mod directories from storage (which prevents instant recovery once authors release compatibility updates), deactivate the extension directly in the configuration:

bash
sed -i 's/"name": "problematic-mod", "enabled": true/"name": "problematic-mod", "enabled": false/' /opt/factorio/mods/mod-list.json

Following modification, reboot the dedicated server daemon and verify that prototype compilation finishes successfully:

bash
sudo systemctl restart factorio && sudo journalctl -u factorio -n 25 --no-pager

For industrial teams managing sprawling interplanetary operations without spending hours troubleshooting mod collisions in server consoles, managed Factorio server hosting delivers automated Mod Portal dependency validation and instant rollback snapshots.

Sources#