Configuration - SteamServerUI/StationeersServerUI GitHub Wiki

This document explains the various configuration options available for Stationeers Server UI. Configuration can be handled through three different methods, applied in the following order of precedence:

  1. Environment variables (highest priority) - DISENCOURAGED, USE config.json
  2. config.json file (middle priority)
  3. Default values (lowest priority)

Configuration UI

Configuring the Interface & Gameserver

The server's user interface (UI) provides an intuitive way to adjust settings without directly editing the configuration file. To access it:

  1. Launch the server application.
  2. Locate and click the Config button on the main screen.
  3. A configuration window will appear, allowing you to modify key server parameters.

For detailed explanations of each parameter, refer to the Configuration Reference section below. If you're unsure about a setting, the UI includes tooltips or descriptions for most fields.

Recommended Server Parameters

For a typical multiplayer server, consider the following parameters:

  • ServerName: Set your server's name
  • Save Info: Your Save Name, optionally with a World name to generate
  • ServerPassword: Set a password if you want a private server
  • ServerMaxPlayers: Set the maximum number of concurrent players
  • AutoSave: Enable automatic saving
  • SaveInterval: Set the interval between automatic saves, e.g. 300 seconds

Configuration Methods

Environment Variables

All configuration options can now be set using environment variables. This is particularly useful for containerized deployments or when you want to override configuration without modifying the config.json file.

Environment variable names are uppercase with underscores separating words, corresponding to their JSON counterparts. For example:

  • discordToken in JSON becomes DISCORD_TOKEN as an environment variable
  • ServerMaxPlayers in JSON becomes SERVER_MAX_PLAYERS as an environment variable

Configuration File (config.json)

The config.json file stores all settings in JSON format and is located at ./UIMod/config/config.json. Changes to this file will be applied upon server restart.

Default Values

If a configuration value is not specified in either environment variables or the config.json file, a default value will be used.

Configuration Reference

The following table provides a detailed breakdown of all available configuration options:

Field Name Environment Variable Type Description Default Value
Example Values
discordToken DISCORD_TOKEN string Bot token for Discord integration ""
controlChannelID CONTROL_CHANNEL_ID string Discord channel ID for control commands ""
statusChannelID STATUS_CHANNEL_ID string Channel ID for server status updates ""
Click to view the full table
Field Name Environment Variable Type Description Default Value
Discord Integration
discordToken DISCORD_TOKEN string Bot token for Discord integration ""
controlChannelID CONTROL_CHANNEL_ID string Discord channel ID for control commands ""
statusChannelID STATUS_CHANNEL_ID string Channel ID for server status updates ""
connectionListChannelID CONNECTION_LIST_CHANNEL_ID string Channel ID for player connection logs ""
logChannelID LOG_CHANNEL_ID string Channel ID for general server logs ""
saveChannelID SAVE_CHANNEL_ID string Channel ID for save notifications ""
controlPanelChannelID CONTROL_PANEL_CHANNEL_ID string Channel ID for interactive control panel ""
DiscordCharBufferSize DISCORD_CHAR_BUFFER_SIZE int Buffer size (characters) for Discord messages 1000
blackListFilePath BLACKLIST_FILE_PATH string File path to the banlist "./Blacklist.txt"
isDiscordEnabled IS_DISCORD_ENABLED bool Enables/disables Discord integration false
errorChannelID ERROR_CHANNEL_ID string Channel ID for error logs ""
Backup Configuration
backupKeepLastN BACKUP_KEEP_LAST_N int Number of last backups to retain 2000
isCleanupEnabled IS_CLEANUP_ENABLED bool Enables cleanup of backups false
backupKeepDailyFor BACKUP_KEEP_DAILY_FOR int Hours to keep daily backups 24
backupKeepWeeklyFor BACKUP_KEEP_WEEKLY_FOR int Hours to keep weekly backups 168
backupKeepMonthlyFor BACKUP_KEEP_MONTHLY_FOR int Hours to keep monthly backups 730
backupCleanupInterval BACKUP_CLEANUP_INTERVAL int Hours between cleanup operations 730
backupWaitTime BACKUP_WAIT_TIME int Seconds to wait before copying backups to Safebackups 30
Game Settings
gameBranch GAME_BRANCH string Game branch to run (e.g., "public" or "beta") "public"
ServerName SERVER_NAME string Name displayed in server list "Stationeers Server UI"
SaveInfo SAVE_INFO string Save folder name, optionally with world type "Moon Moon"
ServerMaxPlayers SERVER_MAX_PLAYERS string Maximum number of players allowed "6"
ServerPassword SERVER_PASSWORD string Password for server access ""
ServerAuthSecret SERVER_AUTH_SECRET string Secret key for server authentication ""
AdminPassword ADMIN_PASSWORD string Admin password ""
GamePort GAME_PORT string Port for gameplay traffic "27016"
UpdatePort UPDATE_PORT string Port for server updates "27015"
UPNPEnabled UPNP_ENABLED bool Enables UPNP for automatic port forwarding false
AutoSave AUTO_SAVE bool Enables automatic saving true
SaveInterval SAVE_INTERVAL string Interval between autosaves in seconds "300"
AutoPauseServer AUTO_PAUSE_SERVER bool Pauses server when no players are connected true
LocalIpAddress LOCAL_IP_ADDRESS string IP address to bind server to (required on Linux) ""
StartLocalHost START_LOCAL_HOST bool Restricts server to local network true
ServerVisible SERVER_VISIBLE bool Makes server visible in public listings true
UseSteamP2P USE_STEAM_P2P bool Enables Steam Peer-to-Peer networking true
Server UI Settings
ExePath EXE_PATH string Path to server executable (platform-dependent)
AdditionalParams ADDITIONAL_PARAMS string Extra command-line parameters ""
users SSUI_USERS map[string]string Map of usernames to hashed passwords {}
authEnabled SSUI_AUTH_ENABLED bool Enables authentication for UI access false
JwtKey SSUI_JWT_KEY string JWT key for authentication (auto-generated)
AuthTokenLifetime SSUI_AUTH_TOKEN_LIFETIME int Lifetime of auth token in minutes 1440
Debug DEBUG bool Enables debug mode false
CreateSSUILogFile CREATE_SSUI_LOGFILE bool Enables log file writing false
LogLevel LOG_LEVEL int Sets the log level 20
subsystemFilters SUBSYSTEM_FILTERS []string Filters for specific subsystem logs []
Update Settings
isUpdateEnabled IS_UPDATE_ENABLED bool Enables Auto Updater true
allowPrereleaseUpdates ALLOW_PRERELEASE_UPDATES bool Allows installation of prerelease updates false
allowMajorUpdates ALLOW_MAJOR_UPDATES bool Allows installation of major version updates false

This list is slightly outdated, sorry about that

Field Details

Logging Configuration

  • LogLevel: Sets the logging severity level:

    • 10: Debug
    • 20: Info (Default)
    • 30: Warn
    • 40: Error
  • CreateSSUILogFile: When enabled, logs operations to ./UIMod/logs/. Default: false.

  • SubsystemFilters: Array of subsystem names to filter logs, allowing you to focus on specific parts of the application.

Note: Gameserver logs are only saved to a file on Linux systems, where debug.log is written by the gameserver and are not included in the SSUI log files.

Authentication Configuration

  • Users: Map of usernames to hashed passwords for UI authentication.
  • AuthEnabled: When true, requires authentication to access the UI.
  • JwtKey: Secret key used for JWT token generation.
  • AuthTokenLifetime: Duration in minutes that authentication tokens remain valid.

Backup Configuration

  • BackupKeepLastN: Specifies the number of most recent backups to keep (default: 2000).
  • IsCleanupEnabled: When true, enables automatic cleanup of the Backups and Safebackups folders. Default: false.
  • BackupKeepDailyFor: Retention period in hours for daily backups.
  • BackupKeepWeeklyFor: Retention period in hours for weekly backups.
  • BackupKeepMonthlyFor: Retention period in hours for monthly backups.
  • BackupCleanupInterval: Hours between backup cleanup operations.
  • BackupWaitTime: Seconds to wait before copying backup groups to the Safebackups folder.

Retention Policy Example:

The backup system, as of April 20, 2025, deletes files in the safe backup directory based on a retention policy that (for example) keeps the two most recent backup groups, one backup per day for 7 days, one per week for 4 weeks, and one per month for 3 months. Files not meeting these criteria are removed to save disk space. The example below shows which backup groups are kept or deleted during a cleanup run on April 20, 2025, at 12:00 PM UTC.

Click to view the the example

Retention Policy:

  • KeepLastN: 2 (keep the 2 most recent backup groups)
  • KeepDailyFor: 7 days (keep one backup per day for 7 days)
  • KeepWeeklyFor: 4 weeks (keep one backup per week for 4 weeks)
  • KeepMonthlyFor: 3 months (keep one backup per month for 3 months)
Backup Index ModTime Reason for Keeping/Deletion Files Affected
1000 Apr 20, 2025 10:00 Kept: Most recent backup (KeepLastN) world(1000).bin, world(1000).xml, world_meta(1000).xml
999 Apr 20, 2025 02:00 Kept: Second most recent backup (KeepLastN) world(999).bin, world(999).xml, world_meta(999).xml
998 Apr 19, 2025 10:00 Kept: Daily backup for Apr 19 world(998).bin, world(998).xml, world_meta(998).xml
997 Apr 18, 2025 10:00 Kept: Daily backup for Apr 18 world(997).bin, world(997).xml, world_meta(997).xml
996 Apr 17, 2025 10:00 Kept: Daily backup for Apr 17 world(996).bin, world(996).xml, world_meta(996).xml
995 Apr 16, 2025 10:00 Kept: Daily backup for Apr 16 world(995).bin, world(995).xml, world_meta(995).xml
994 Apr 15, 2025 10:00 Kept: Daily backup for Apr 15 world(994).bin, world(994).xml, world_meta(994).xml
993 Apr 14, 2025 10:00 Kept: Daily backup for Apr 14 world(993).bin, world(993).xml, world_meta(993).xml
992 Apr 13, 2025 10:00 Kept: Daily backup for Apr 13, Weekly for week 15 world(992).bin, world(992).xml, world_meta(992).xml
991 Apr 6, 2025 10:00 Kept: Weekly backup for week 14 world(991).bin, world(991).xml, world_meta(991).xml
990 Mar 30, 2025 10:00 Kept: Weekly backup for week 13 world(990).bin, world(990).xml, world_meta(990).xml
989 Mar 23, 2025 10:00 Kept: Weekly backup for week 12, Monthly for March world(989).bin, world(989).xml, world_meta(989).xml
988 Mar 16, 2025 10:00 Deleted: Outside weekly period, March monthly already kept world(988).bin, world(988).xml, world_meta(988).xml
987 Mar 1, 2025 10:00 Deleted: Outside weekly period, March monthly already kept world(987).bin, world(987).xml, world_meta(987).xml
986 Feb 1, 2025 10:00 Kept: Monthly backup for February world(986).bin, world(986).xml, world_meta(986).xml
985 Jan 1, 2025 10:00 Deleted: Outside monthly period (too old) world(985).bin, world(985).xml, world_meta(985).xml
984 Dec 1, 2024 10:00 Deleted: Outside monthly period (too old) world(984).bin, world(984).xml, world_meta(984).xml

Update Configuration

  • IsUpdateEnabled: When true, automatically checks for and downloads new executable updates from GitHub. Default: true.
  • AllowPrereleaseUpdates: When true, includes prerelease versions in update checks. Default: false.
  • AllowMajorUpdates: When true, allows installation of major version updates that might include breaking changes. Default: false.

Save Info Format

The SaveInfo parameter has a special format that affects how the world is generated:

  • Single word (e.g., "Moon"): Uses only the save name
  • Two words (e.g., "Moon Moon"): First word is the save name, second is the world type

When this parameter is processed, the system automatically sets:

  • WorldName: The first part of SaveInfo
  • BackupWorldName: The second part of SaveInfo (if provided)

Example Configuration

Example JSON Configuration

Click to view the full example
{
  "discordToken": "",
  "controlChannelID": "",
  "statusChannelID": "",
  "connectionListChannelID": "",
  "logChannelID": "",
  "saveChannelID": "",
  "controlPanelChannelID": "",
  "DiscordCharBufferSize": 1000,
  "blackListFilePath": "./Blacklist.txt",
  "isDiscordEnabled": false,
  "errorChannelID": "",
  "backupKeepLastN": 2000,
  "isCleanupEnabled": true,
  "backupKeepDailyFor": 24,
  "backupKeepWeeklyFor": 168,
  "backupKeepMonthlyFor": 730,
  "backupCleanupInterval": 730,
  "backupWaitTime": 30,
  "gameBranch": "public",
  "ServerName": "StationeersServerWithUI",
  "SaveInfo": "Moon Moon",
  "ServerMaxPlayers": "8",
  "ServerPassword": "secret",
  "ServerAuthSecret": "",
  "AdminPassword": "",
  "GamePort": "27016",
  "UpdatePort": "27015",
  "UPNPEnabled": false,
  "AutoSave": true,
  "SaveInterval": "300",
  "AutoPauseServer": true,
  "LocalIpAddress": "0.0.0.0",
  "StartLocalHost": false,
  "ServerVisible": true,
  "UseSteamP2P": true,
  "ExePath": "",
  "AdditionalParams": "",
  "users": null,
  "authEnabled": false,
  "JwtKey": "",
  "AuthTokenLifetime": 1440,
  "Debug": false,
  "CreateSSUILogFile": true,
  "LogLevel": 20,
  "subsystemFilters": [],
  "isUpdateEnabled": true,
  "allowPrereleaseUpdates": false,
  "allowMajorUpdates": false
}

Slightly outdated too, sorry about that

Example Environment Variables Setup

Using Environment Variables is disencouraged in never versions, use config.json

# Discord Configuration
export DISCORD_TOKEN="your_discord_token"
export IS_DISCORD_ENABLED=true
export CONTROL_CHANNEL_ID="123456789012345678"

# Game Settings
export SERVER_NAME="My Stationeers Server"
export SAVE_INFO="Mars Mars"
export SERVER_MAX_PLAYERS="10"
export SERVER_PASSWORD="mysecretpassword"

# Backup Configuration
export BACKUP_KEEP_LAST_N=500
export IS_CLEANUP_ENABLED=true

# UI Authentication
export SSUI_AUTH_ENABLED=true
export SSUI_USERS="admin:hashedpassword123,moderator:hashedpassword456"
export SSUI_JWT_KEY="your-secure-jwt-key"

# Update Settings
export IS_UPDATE_ENABLED=true
export ALLOW_PRERELEASE_UPDATES=false

# Logging
export LOG_LEVEL=10
export CREATE_SSUI_LOGFILE=true
export SUBSYSTEM_FILTERS="gameserver,backup,discord"

Configuration Hierarchy Process

When the server starts, it follows this process to determine the final configuration:

removed, use config.json

Additional Parameters (Gameserver)

You can also customize your gameserver even further by adding parameters in the Additional Parameters field, both from the Json or the UI. These parameters allow you to control even more aspects of the game, from weird graphics stuff to experimental unity server configuration.

Click to view the full list of available parameters
  • get_Path
  • set_Path
  • Save
  • Load
  • Equals
  • GetHashCode
  • GetType
  • ToString
  • .ctor
  • Path
  • SettingsVersion
  • ShowFps
  • ShowLatency
  • AutoSave
  • SaveInterval
  • SavePath
  • HUDScale
  • TooltipOpacity
  • IngamePortrait
  • ExtendedTooltips
  • ChatFadeTimer
  • DayLength
  • LegacyInventory
  • ShowSlotToolTips
  • DeleteSkeletonOnDecay
  • Monitor
  • ScreenWidth
  • ScreenHeight
  • RefreshRate
  • GraphicQuality
  • TextureQuality
  • FullScreen
  • Vsync
  • Shadows
  • ShadowResolution
  • ShadowDistance
  • LightShadowDistance
  • RoomControlTickSpeed
  • ShadowNearPlaneOffset
  • ShadowCascades
  • ThingShadowMode
  • ThingShadowDistanceMultiplier
  • RenderDistance
  • WorldOrigin
  • Brightness
  • FieldOfView
  • ColorBlind
  • ParticleQuality
  • SoftParticles
  • EnvironmentElements
  • ExtendedTerrain
  • VolumeLight
  • PixelLightCount
  • MaxThingLights
  • Antialiasing
  • FrameLock
  • AtmosphericScattering
  • AmbientOcclusion
  • LensFlares
  • ChunkRenderDistance
  • MineableRenderDistance
  • DisableWaterVisualizer
  • Clouds
  • HelmetOverlay
  • WeatherEventQuality
  • MasterVolume
  • SoundVolume
  • VoiceNotificationVolume
  • MusicVolume
  • InterfaceVolume
  • VirtualVoices
  • RealVoices
  • UserSpeakerMode
  • ServerName
  • StartLocalHost
  • ServerVisible
  • ServerPassword
  • AdminPassword
  • ServerAuthSecret
  • ServerMaxPlayers
  • UpdatePort
  • GamePort
  • UPNPEnabled
  • UseSteamP2P
  • DisconnectTimeout
  • NetworkDebugFrequency
  • LocalIpAddress
  • AutoPauseServer
  • LanguageCode
  • VoiceLanguageCode
  • Voice
  • PopupChat
  • CameraSensitivity
  • KeyList
  • InvertMouse
  • InvertMouseWheelInventory
  • MenuLite
  • MouseWheelZoom
  • FirstRun
  • VoiceNotifications
  • CompletedTutorials
  • CompletedScenarios
  • DisplayHelperHints
  • AutoExpandHelperHints
  • VerticalMovementAxis
  • HorizontalMovementAxis
  • ForwardMovementAxis
  • VerticalLookAxis
  • HorizontalLookAxis
  • UseCustomWorkThreadsCount
  • MinWorkerThreads
  • MinCompletionPortThreads
  • MaxWorkerThreads
  • MaxCompletionPortThreads
  • CoroutineTimeBudget
  • SmoothTerrain
  • SmoothTerrainAngle
  • ConsoleBufferSize
  • LegacyCpu
⚠️ **GitHub.com Fallback** ⚠️