The Satisfactory Dedicated Server for Linux provides two primary distribution tracks: the stable release (Early Access) and the Experimental branch. The experimental branch enables server administrators to test new patches, Unreal Engine performance enhancements, and logistics revisions before they reach the main public build. However, switching between release channels introduces risks of save file schema divergence and blueprint catalog corruption.
This operational guide details the standard procedure for updating a Satisfactory server via SteamCMD, switching branches safely with cold backups, and troubleshooting startup failures caused by mismatched saves.
Satisfactory branches and save file incompatibility risks#
The Satisfactory Dedicated Server is distributed through SteamCMD under App ID 1690800. The default public branch contains stable, production-tested builds matching the regular client release. The experimental branch contains staging builds where the underlying factory data structures and world serialization formats frequently change.
The core rule of Satisfactory versioning is that world saves loaded and modified on a newer experimental build cannot be downgraded to the earlier Early Access build. The engine aborts initialization with a serialization error (CorruptSaveException or EngineVersionMismatch).
Before enabling Experimental, administrators must isolate production saves or ensure the community commits to remaining on the experimental track until the next engine synchronization.
World and blueprint backup before branch switching#
Always shut down the server unit before running any SteamCMD operations. An active server process holds write locks on world data and may flush a corrupted autosave during SteamCMD file replacement:
sudo systemctl stop satisfactory
sudo systemctl status satisfactory --no-pager
On Linux, Satisfactory server save files are located in the service user home directory under:
~/.config/Epic/FactoryGame/Saved/SaveGames/server/
Factory blueprints reside in the sibling directory Saved/SaveGames/Blueprints/. Create a timestamped archive of both directories:
BACKUP_DIR="/opt/satisfactory/backups"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
sudo mkdir -p "$BACKUP_DIR"
sudo tar -czf "$BACKUP_DIR/satisfactory_save_pre_update_${TIMESTAMP}.tar.gz" \
-C /home/satisfactory/.config/Epic/FactoryGame/Saved SaveGames
Verify the archive readability:
tar -tzf "$BACKUP_DIR/satisfactory_save_pre_update_${TIMESTAMP}.tar.gz" | head -n 10
When operating through a modern server management platform, world snapshots and configuration backups run automatically before engine updates without manual terminal packaging.
Updating via SteamCMD and switching branches#
Run SteamCMD under the unprivileged satisfactory service account. Avoid executing update routines as root to preserve consistent file ownership across binary trees.
To update to the stable branch (Early Access / public):
/usr/games/steamcmd +force_install_dir /opt/satisfactory +login anonymous +app_update 1690800 validate +quit
To switch to the experimental branch, supply the -beta experimental parameter:
/usr/games/steamcmd +force_install_dir /opt/satisfactory +login anonymous +app_update 1690800 -beta experimental validate +quit
The validate argument is required: it inspects local binary checksums against the Steam manifest and downloads missing or modified Unreal Engine shared objects.
A successful execution concludes with:
Success! App '1690800' fully installed.
Validating permissions and starting the systemd service#
Once SteamCMD completes, reset the correct ownership across the server installation directory:
sudo chown -R satisfactory:satisfactory /opt/satisfactory
sudo chmod -R u=rwX,go=rX /opt/satisfactory
Start the systemd unit and inspect the initialization log:
sudo systemctl start satisfactory
sudo journalctl -u satisfactory -n 50 --no-pager
Verify that the process bound its listening ports (default UDP 7777 for game traffic and query handling):
sudo ss -ulnp | grep 7777
Troubleshooting post-update startup failures#
If the server fails to stay up after updating, inspect the primary engine log:
tail -n 100 /opt/satisfactory/FactoryGame/Saved/Logs/FactoryGame.log
- Save version mismatch (
Save header version is higher): You attempted to boot a world touched by the Experimental build on an Early Access binary. Restore the pre-update backup:
sudo systemctl stop satisfactory
sudo tar -xzf "$BACKUP_DIR/satisfactory_save_pre_update_${TIMESTAMP}.tar.gz" \
-C /home/satisfactory/.config/Epic/FactoryGame/Saved/
sudo systemctl start satisfactory
- Binary execution error (
Permission denied / FactoryGame-Linux-Shipping): Ensure the execution bit is set on the Unreal binary:
ls -l /opt/satisfactory/Engine/Binaries/Linux/UnrealServer-Linux-Shipping
sudo chmod +x /opt/satisfactory/Engine/Binaries/Linux/UnrealServer-Linux-Shipping




