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:
- Mandatory Manifest Target: The
factorio_versionkey withininfo.jsonmust be set to"2.0". Legacy archives specifying"1.1"are rejected outright. - Multi-Surface World Hierarchies: In Space Age, the simulation is no longer constrained to a single
nauvissurface. Worlds spanvulcanus,gleba,fulgora,aquilo, and mobile space platforms. Scripts relying on hardcoded surface references likegame.surfaces[1]trigger fatal desync errors. - 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:
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:
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:
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:
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:
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.




