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:
- Environment variables (highest priority) - DISENCOURAGED, USE
config.json
-
config.json
file (middle priority) - Default values (lowest priority)
The server's user interface (UI) provides an intuitive way to adjust settings without directly editing the configuration file. To access it:
- Launch the server application.
- Locate and click the Config button on the main screen.
- 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.
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
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 becomesDISCORD_TOKEN
as an environment variable -
ServerMaxPlayers
in JSON becomesSERVER_MAX_PLAYERS
as an environment variable
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.
If a configuration value is not specified in either environment variables or the config.json
file, a default value will be used.
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
-
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.
- 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.
- 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.
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
|
- 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.
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)
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
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"
When the server starts, it follows this process to determine the final configuration:
removed, use config.json
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