{"meta":{"slug":"games-steamcmd-satisfactory","name":"Satisfactory","category":"satisfactory","source":"pelican","owner":"pelican-eggs","repo":"games-steamcmd","branch":"main","path":"satisfactory/egg-satisfactory.json","rawUrl":"https://raw.githubusercontent.com/pelican-eggs/games-steamcmd/main/satisfactory/egg-satisfactory.json","indexedAt":1792246788483},"egg":{"_comment":"DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL","meta":{"version":"PLCN_v1","update_url":"https://raw.githubusercontent.com/pelican-eggs/games-steamcmd/refs/heads/main/satisfactory/egg-satisfactory.json"},"exported_at":"2026-04-06T02:01:23+00:00","name":"Satisfactory","author":"red_thirten@yahoo.com","uuid":"dafdb96a-e8c1-449f-a6ae-b7ba209c05ff","description":"Satisfactory is a first-person open-world factory building game with a dash of exploration and combat. Play alone or with friends, explore an alien planet, create multi-story factories, and enter conveyor belt heaven!","tags":["steamcmd"],"features":["steam_disk_space"],"docker_images":{"ghcr.io/parkervcp/steamcmd:debian":"ghcr.io/parkervcp/steamcmd:debian"},"file_denylist":[],"startup":"./Engine/Binaries/Linux/*-Linux-Shipping FactoryGame -Port={{SERVER_PORT}} -ReliablePort={{RELIABLE_PORT}}","config":{"files":"{\r\n    \"FactoryGame/Saved/Config/LinuxServer/Game.ini\": {\r\n        \"parser\": \"ini\",\r\n        \"find\": {\r\n            \"[/Script/Engine.GameSession].MaxPlayers\": \"{{server.environment.MAX_PLAYERS}}\"\r\n        }\r\n    },\r\n    \"FactoryGame/Saved/Config/LinuxServer/Engine.ini\": {\r\n        \"parser\": \"ini\",\r\n        \"find\": {\r\n            \"[/Script/FactoryGame.FGSaveSession].mNumRotatingAutosaves\": \"{{server.environment.NUM_AUTOSAVES}}\",\r\n            \"[/Script/OnlineSubsystemUtils.IpNetDriver].InitialConnectTimeout\": \"{{server.environment.INIT_CONNECT_TIMEOUT}}\",\r\n            \"[/Script/OnlineSubsystemUtils.IpNetDriver].ConnectionTimeout\": \"{{server.environment.CONNECT_TIMEOUT}}\"\r\n        }\r\n    }\r\n}","startup":"{\r\n    \"done\": \"Engine Initialization\"\r\n}","logs":"{}","stop":"^C"},"scripts":{"installation":{"script":"#!/bin/bash\r\n\r\n# File: Pelican Satisfactory Egg - egg-satisfactory.json\r\n# Authors: Red-Thirten, Kubi, matthewp, Software-Noob, and Zarklord\r\n# Date: 2024/09/10\r\n# License: MIT License\r\n\r\n## Download and install SteamCMD\r\ncd /tmp\r\ncurl -sSL -o steamcmd.tar.gz https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz\r\nmkdir -p /mnt/server/steamcmd\r\ntar -xzvf steamcmd.tar.gz -C /mnt/server/steamcmd\r\ncd /mnt/server/steamcmd\r\n\r\n# SteamCMD fails otherwise for some reason, even running as root.\r\nchown -R root:root /mnt\r\nexport HOME=/mnt/server\r\n\r\n# Install game server using SteamCMD\r\n./steamcmd.sh +force_install_dir /mnt/server +login anonymous +app_update ${SRCDS_APPID} $( [[ -z ${SRCDS_BETAID} ]] || printf %s \"-beta ${SRCDS_BETAID}\" ) $( [[ -z ${SRCDS_BETAPASS} ]] || printf %s \"-betapassword ${SRCDS_BETAPASS}\" ) validate +exit\r\n\r\n# Set up 32 and 64 bit libraries\r\nmkdir -p /mnt/server/.steam/sdk{32,64}\r\ncp -v linux32/steamclient.so /mnt/server/.steam/sdk32/steamclient.so\r\ncp -v linux64/steamclient.so /mnt/server/.steam/sdk64/steamclient.so\r\n\r\n## Satisfactory setup\r\n# Check for successful installation and make the server binary executable.\r\n# Use `find` to see if a valid server binary exists using a wildcard, because\r\n# the binary name may change in the future.\r\n# (eg. it changed when the engine was updated from UE4 to UE5)\r\ncd /mnt/server/Engine/Binaries/Linux\r\ncount=$(find . -maxdepth 1 -name '*-Linux-Shipping' -type f -executable | wc -l)\r\nif [[ $count -eq 0 ]]; then\r\n    echo -e \"\\n\\nSteamCMD failed to install the Satisfactory Dedicated Server!\"\r\n    echo -e \"\\tTry reinstalling the server again.\\n\"\r\n    exit 1\r\nelse\r\n    chmod +x *-Linux-Shipping\r\nfi\r\n\r\necho -e \"\\nSatisfactory Dedicated Server successfully installed!\\n\"","container":"ghcr.io/parkervcp/installers:debian","entrypoint":"/bin/bash"}},"variables":[{"name":"[Host] Reliable Messaging Port","description":"This port is required for the initial handshake between clients and the server. When connecting, clients should connect to the server's primary port; NOT this port.","env_variable":"RELIABLE_PORT","default_value":"8888","user_viewable":true,"user_editable":false,"rules":["required","integer","min:0","max:65535"],"sort":1},{"name":"Automatic Updates","description":"Quickly checks for any server updates on startup, and updates if necessary. (1 Enable | 0 Disable)","env_variable":"AUTO_UPDATE","default_value":"1","user_viewable":true,"user_editable":true,"rules":["boolean"],"sort":2},{"name":"Number of Rotating Autosaves","description":"Number of session auto-saves for the server to keep before the oldest save is deleted and the others are moved down the list.","env_variable":"NUM_AUTOSAVES","default_value":"3","user_viewable":true,"user_editable":true,"rules":["required","integer","min:0"],"sort":3},{"name":"[Experimental] Max Players","description":"The server and client are currently not optimized to support more than 4 players. However, you can override this value here at your own risk of poor performance.","env_variable":"MAX_PLAYERS","default_value":"4","user_viewable":true,"user_editable":true,"rules":["required","integer","min:1"],"sort":4},{"name":"[Advanced] Client Initial Connection Timeout","description":"Time in seconds to wait for a new client connection to be established before destroying the connection.","env_variable":"INIT_CONNECT_TIMEOUT","default_value":"30","user_viewable":true,"user_editable":true,"rules":["required","numeric","min:1"],"sort":5},{"name":"[Advanced] Client Established Connection Timeout","description":"Time in seconds to wait before considering an established client connection timed out. Typically shorter than the time to wait on an initial connection because this connection should already have been setup and any interruption should be trapped quicker.","env_variable":"CONNECT_TIMEOUT","default_value":"20","user_viewable":true,"user_editable":true,"rules":["required","numeric","min:1"],"sort":6},{"name":"[Advanced] Branch Name","description":"[Accepted Values: \"public\", \"experimental\", or leave empty to use the primary branch of the server] Used to download or switch to a non-primary branch of the game server. \"Automatic Updates\" and \"Validate Server Files\" must be set to \"1\" to switch branches if the server is already installed. NOTE: Any non-primary branches may not be fully compatible/stable!","env_variable":"SRCDS_BETAID","default_value":"","user_viewable":true,"user_editable":true,"rules":["string","nullable","in:public,experimental"],"sort":7},{"name":"[Repair] Validate Server Files","description":"Leave empty (no value) for OFF or type \"true\" or \"1\" for ON. Validates all server files when Automatic Updates is enabled. Note: This will significantly increase server startup times, so it is recommended to only enable this when needed.","env_variable":"VALIDATE","default_value":"","user_viewable":true,"user_editable":true,"rules":["string","nullable"],"sort":8},{"name":"[System] Satisfactory Dedicated Server App ID","description":"Steam App ID used for installation and updates.","env_variable":"SRCDS_APPID","default_value":"1690800","user_viewable":false,"user_editable":false,"rules":["required","integer","in:1690800"],"sort":9}]},"readme":"# Satisfactory\n\n> [!IMPORTANT]\n> ***Updating for v1.1?***\n> - Ensure any existing servers have the updated Startup Command applied!\n> - A new TCP port is now required! (See [Server Ports](#server-ports) for details)\n> - While not required, it's recommended existing servers delete the `LinuxServer` directory under `~/FactoryGame/Saved/Config/` to remove depreciated settings, and reconfigure the settings via the in-game Server Manager.\n___\n\n### Authors / Contributors\n\n<!-- prettier-ignore-start -->\n<!-- markdownlint-disable -->\n<table>\n    <tr>\n        <td align=\"center\">\n            <a href=\"https://github.com/redthirten\">\n                <img src=\"https://avatars.githubusercontent.com/u/4533989\" width=\"50px;\" alt=\"\"/><br /><sub><b>Red-Thirten</b></sub>\n            </a>\n            <br />\n            <a href=\"https://github.com/pelican-eggs/games-steamcmd/commits?author=redthirten\" title=\"Codes\">💻</a>\n            <a href=\"https://github.com/pelican-eggs/games-steamcmd/commits?author=redthirten\" title=\"Maintains\">🔨</a>\n        </td>\n        <td align=\"center\">\n            <a href=\"https://github.com/iamkubi\">\n                <img src=\"https://avatars.githubusercontent.com/u/6176191\" width=\"50px;\" alt=\"\"/><br /><sub><b>Kubi</b></sub>\n            </a>\n            <br />\n            <a href=\"https://github.com/pelican-eggs/games-steamcmd/commits?author=iamkubi\" title=\"Codes\">💻</a>\n            <a href=\"https://github.com/pelican-eggs/games-steamcmd/commits?author=iamkubi\" title=\"Contributor\">💡</a>\n        </td>\n        <td align=\"center\">\n            <a href=\"https://github.com/matthewpi\">\n                <img src=\"https://avatars.githubusercontent.com/u/26559841\" width=\"50px;\" alt=\"\"/><br /><sub><b>matthewpi</b></sub>\n            </a>\n            <br />\n            <a href=\"https://github.com/pelican-eggs/games-steamcmd/commits?author=matthewpi\" title=\"Codes\">💻</a>\n            <a href=\"https://github.com/pelican-eggs/games-steamcmd/commits?author=matthewpi\" title=\"Contributor\">💡</a>\n        </td>\n        <td align=\"center\">\n            <a href=\"https://github.com/Software-Noob\">\n                <img src=\"https://avatars.githubusercontent.com/u/10975908\" width=\"50px;\" alt=\"\"/><br /><sub><b>Software-Noob</b></sub>\n            </a>\n            <br />\n            <a href=\"https://github.com/pelican-eggs/games-steamcmd/commits?author=Software-Noob\" title=\"Codes\">💻</a>\n            <a href=\"https://github.com/pelican-eggs/games-steamcmd/commits?author=Software-Noob\" title=\"Contributor\">💡</a>\n        </td>\n        <td align=\"center\">\n            <a href=\"https://github.com/Zarklord\">\n                <img src=\"https://avatars.githubusercontent.com/u/1622280\" width=\"50px;\" alt=\"\"/><br /><sub><b>Zarklord</b></sub>\n            </a>\n            <br />\n            <a href=\"https://github.com/pelican-eggs/games-steamcmd/commits?author=Zarklord\" title=\"Codes\">💻</a>\n            <a href=\"https://github.com/pelican-eggs/games-steamcmd/commits?author=Zarklord\" title=\"Contributor\">💡</a>\n        </td>\n        <td align=\"center\">\n            <a href=\"https://github.com/AlienXAXS\">\n                <img src=\"https://avatars.githubusercontent.com/u/1773445\" width=\"50px;\" alt=\"\"/><br /><sub><b>AlienXAXS</b></sub>\n            </a>\n            <br />\n            <a href=\"https://github.com/pelican-eggs/games-steamcmd/commits?author=AlienXAXS\" title=\"Contributor\">💡</a>\n        </td>\n        <td align=\"center\">\n            <a href=\"https://github.com/gOOvER\">\n                <img src=\"https://avatars.githubusercontent.com/u/116325?v=4\" width=\"50px;\" alt=\"\"/><br /><sub><b>gOOvER</b></sub>\n            </a>\n            <br />\n            <a href=\"https://github.com/pelican-eggs/games-steamcmd/commits?author=gOOvER\" title=\"Codes\">💻</a>\n            <a href=\"https://github.com/pelican-eggs/games-steamcmd/commits?author=gOOvER\" title=\"Contributor\">💡</a>\n        </td>\n    </tr>\n</table>\n<!-- markdownlint-enable -->\n<!-- prettier-ignore-end -->\n\n___\n\n### Game Description\n\nFrom Coffee Stain's [Website](https://www.satisfactorygame.com/):\n> Satisfactory is a first-person open-world factory building game with a dash of exploration and combat. Play alone or with friends, explore an alien planet, create multi-story factories, and enter conveyor belt heaven!\n\n___\n\n### Egg Capabilities\n\n- Configurable to automatically check for server updates on start via SteamCMD. Forcing validation is also configurable.\n- Configurable number of rotating autosaves.\n- [*Experimental*] Configurable maximum number of players.\n- [*Advanced*] Configurable networking and server branch settings.\n\n> [!NOTE]\n> As of Satisfactory v1.0, most server settings have moved from being configured in the Egg to being configured via the in-game Server Manager.\\\n> Please see [Server Initialization](#server-initialization) for what settings can be configured in-game.\n\n___\n\n### Server Ports\n\n| Port | Default | Protocol | Required | Notes |\n|---------|---------|---------|---------|---------|\n| **Primary** | 7777 | UDP & TCP | **Yes** | Clients connect using this port. UDP is un-encrypted game traffic. TCP is also required for the in-game Server Manager & API, and it is TLS encrypted. |\n| Reliable Messaging | 8888 | TCP | **Yes** | Required for Satisfactory v1.1 and above. Must be allocated to the server and specified in the associated Startup Variable. |\n\n> [!TIP]\n> ~~\\*Your internal ports **must match** your external ports on your network (ie. you can't have an external port of 7778 forwarded to your 7777 internal port; they must match). (\\*Testing needed after v1.0 release)~~\\\n> \\\n> **TODO**: This is no longer explicitly true and needs to be reworded to support the following:\n> - Clients must connect to the correct port, but port remapping (e.g., via NAT/firewall rules) can break this.\n> - To address this, the server now communicates the listening port to clients during the initial handshake.\n> - If external port remapping is used, the server must be aware of the external port via:\n> - The `ExternalPortRangeBegin` config setting (for remapped ranges).\n> - The `-ExternalReliablePort=` command-line parameter (for explicitly mapped ports).\n\n___\n\n### Installation/System Requirements\n\n|  | Bare Minimum | Recommended |\n|---------|---------|---------|\n| Processor | Recent x86/64 (AMD/Intel) processor that supports modern instructions (ie. AVX, AES, etc.). No 32 bit or ARM support. | Favours higher single-core performance over multiple cores. If you are running Wings via Proxmox, you may need to set the VM's CPU Type to \"host\" to avoid session save/load crashes. |\n| RAM | 4608 MiB | 8192-12288 MiB (especially for 4 players or large save files) |\n| Storage | 5120 MiB | 7168-10240 MiB (or more, depending on save size or frequency) |\n| Network | 1 Mbit/s | 1-5 Mbit/s ([may require server *and* client config tweaks](https://satisfactory.wiki.gg/wiki/Multiplayer#Temporary_lag_solution)) |\n| Host OS | Most stable Linux OS branches should work | Using the latest kernel version for your installed OS can prevent some edge-case installation/boot issues. |\n| Game Ownership | Not required to start. | Required to fully \"initialize\" (see [Server Initialization](#server-initialization) below) |\n\n___\n\n### Server Initialization\n\n> [!WARNING]\n> The server cannot be joined for the first time via \"Join Game -> Join game directly...\" on the main menu due to the TLS certificate not being trusted yet. Instead, join via \"Server Manager -> Add Server\" and you will be prompted to trust the certificate and initialize the server.\n\nFor a server to be fully \"initialized\", a client who owns the game must log into the server to \"claim\" it and create an administrator password. Then, a new session can be created via the \"Create Game\" tab in-game, or an existing save file can be uploaded (see [Save Files](#save-files) below).\n\nMisc. settings listed below can be configured by an admin client via the Server Manager's \"Server Settings\" tab, and are currently **not** set via the Egg:\n\n- Server Name\n- Admin Password\n- Player Password Protection\n- Auto-Load Session Name\n- Auto Pause (when no players are online)\n- Auto-Save on Player Disconnect\n- Disable Seasonal Events\n- Autosave Interval\n- Server Restart Interval\n- Send Gameplay Data (Crash Reports)\n- Network Quality\n\n> [!NOTE]\n> Currently, Tier 0 (Onboarding) is not possible to play on a dedicated server and it will be automatically unlocked, even if you upload a save in Tier 0. If you would like to play the beginning of the game with Onboarding, it is recommended you play local multiplayer first, and then upload your save after completing Tier 0.\n\n___\n\n### Save Files\n\n> [!CAUTION]\n> Stopping the server **does not** currently save your game! Ensure it is saved before stopping the server!\n\nSave files are located in the following directory, but can be more easily downloaded to your local computer in-game via the Server Manager under the \"Manage Saves\" tab (admins only).\n\n```md\n/home/container/.config/Epic/FactoryGame/Saved/SaveGames/server\n```\n\nAn existing save file (including single-player saves) can be uploaded to the server via the Server Manager as well and loaded under the same tab.\n\nIf you have forgotten your administrator password or would generally like to reset your server as if it were new, you can delete the following file:\n\n```md\n/home/container/.config/Epic/FactoryGame/Saved/SaveGames/ServerSettings.<your_server_query_port>.sav\n```\n\n___\n\n### Console Commands\n\nThe \"Console\" tab in the in-game Server Manager is the only way to execute commands. Entering commands via the Panel do nothing.\n\n[List of known commands can be found via the Wiki.](https://satisfactory.wiki.gg/wiki/Dedicated_servers#Console_commands)\n\n___\n\n### Known Errors/Warnings\n\nThe following errors or warnings you see in the console can safely be ignored:\n\n```log\nsteamclient.so: cannot open shared object file: No such file or directory\n[S_API] SteamAPI_Init(): Loaded '/home/container/.steam/sdk64/steamclient.so' OK.  (First tried local 'steamclient.so')\nLogSteamShared: Warning: Steam Dedicated Server API failed to initialize.\n```\n\n↑ The local file of 'steamclient.so' was attempted to be loaded, but could not because it is not present, causing the warning message. However, the backup `/home/container/.steam/sdk64/steamclient.so` is loaded successfully (this is the correct behavior according to the [Wiki](https://satisfactory.wiki.gg/wiki/Dedicated_servers#SteamAPI_Init():_Sys_LoadModule_failed_to_load:_/path/to/.steam/sdk64/steamclient.so)).\n\n```log\nWarning: failed to init SDL thread priority manager: SDL not found\n```\n\n↑ This is a common error with Steam related software on Linux, but can safely be ignored.\n\n```log\nExiting abnormally (error code: 130)\n```\n\n↑ This misleading message occurs when stopping the server. It is printed by the Unreal Engine because it doesn't know why it was interrupted (even though it was expected by us). This can be safely ignored if you notice normal engine shutdown logs above.\n\n```log\n...Error: Couldn't find file for package...\n```\n\n```log\n...Error: Navmesh bounds are too large!...\n```\n\n```log\n...Warning: NiagaraSystem...\n```\n\n```log\nLogStreaming: Warning: Failed to read file '../../../FactoryGame/Saved/SaveGames/GameAnalytics.sav' error.\n```\n\n↑ These seem to be common error messages with the current experimental version of the game.\n"}