The semi‐internal Debug flowchart - SteamServerUI/StationeersServerUI GitHub Wiki
The Holy SSUI Debug Flowchart
Based on the Data of ALL support tickets so far
Navigation: Start at Chart 1. Each chart tells you where to go next.
Chart 1 — Main Triage
Start here. Always.
flowchart TD
START(["🆘 HELP!\nSomething is wrong!"]):::alert --> Q1{"What's the problem?"}
Q1 -->|"Can't access\nWeb UI"| C2["➡️ Go to Chart 2\nWeb UI & Login Issues"]:::nav
Q1 -->|"Can't log in"| C2
Q1 -->|"Server\nwon't start"| C3["➡️ Go to Chart 3\nServer Startup Issues"]:::nav
Q1 -->|"Players\ncan't connect"| C4["➡️ Go to Chart 4\nConnection & Networking"]:::nav
Q1 -->|"Server disappears\nfrom server list"| C5["➡️ Go to Chart 5\nServer List & Advertiser"]:::nav
Q1 -->|"Docker\nbeing Docker"| C6["➡️ Go to Chart 6\nDocker Issues"]:::nav
Q1 -->|"Discord bot /\nSaves / Crashes /\nOther"| C7["➡️ Go to Chart 7\nEverything Else™"]:::nav
Q1 -->|"It's actually fine\nI'm just anxious"| RESOLVED
RESOLVED(["✅ Crisis Averted!\nServer goes brrr.\nGo play Stationeers."]):::success
classDef alert fill:#e74c3c,color:#fff,stroke:#c0392b,stroke-width:3px
classDef success fill:#27ae60,color:#fff,stroke:#1e8449,stroke-width:3px
classDef nav fill:#3498db,color:#fff,stroke:#2980b9,stroke-width:2px
Chart 2 — Web UI & Login Issues
Can't reach the UI or can't log in? Start here.
flowchart TD
ENTRY(["📋 Chart 2\nWeb UI & Login Issues"]):::header --> MODE{"What's the issue?"}
MODE -->|"Can't reach\nthe Web UI"| WEB
MODE -->|"Can't log in"| LOGIN
%% --- WEB UI ACCESS ---
WEB{"Are you using\nhttps:// in the URL?"}
WEB -->|"No / what?"| HTTPS_FIX["Use https://IP:8443\nSSUI does NOT serve HTTP.\nNever has. Never will."]
HTTPS_FIX --> HTTPS_OK{"Fixed?"}
HTTPS_OK -->|"Yes!"| RESOLVED
HTTPS_OK -->|"Nope"| WEB_LOCAL
WEB -->|"Yes"| WEB_LOCAL
WEB_LOCAL{"Using 'localhost'\non Windows?"}
WEB_LOCAL -->|"Yes"| HYPER_FIX["Try 127.0.0.1:8443 instead.\nHyper-V likes to eat\nlocalhost DNS for breakfast."]
HYPER_FIX --> HYPER_OK{"Fixed?"}
HYPER_OK -->|"Yes!"| RESOLVED
HYPER_OK -->|"No"| WEB_PROXY
WEB_LOCAL -->|"No"| WEB_PROXY
WEB_PROXY{"Behind a\nreverse proxy?"}
WEB_PROXY -->|"nginx"| NGINX_FIX["Add to your nginx config:\n• proxy_buffering off\n• proxy_cache off\n• proxy_http_version 1.1\n• proxy_read_timeout 86400s\nClear browser cache after!"]
WEB_PROXY -->|"Traefik"| TRAEFIK_FIX["Add insecureSkipVerify\nfor SSUI's self-signed cert.\nCheck serversTransport config."]
WEB_PROXY -->|"Apache"| APACHE_FIX["SSUI needs RSA certs,\nnot ECDSA!\nUse: certbot --key-type rsa"]
WEB_PROXY -->|"No proxy"| WEB_FW{"Firewall blocking\nport 8443 TCP?"}
WEB_FW -->|"Yes / maybe"| FW_FIX["Open port 8443 TCP\nin your firewall."]
WEB_FW -->|"No, it's open"| JACKSON
NGINX_FIX --> PROXY_OK{"Fixed?"}
TRAEFIK_FIX --> PROXY_OK
APACHE_FIX --> PROXY_OK
FW_FIX --> PROXY_OK
PROXY_OK -->|"Yes!"| RESOLVED
PROXY_OK -->|"No"| JACKSON
%% --- LOGIN ---
LOGIN{"What's happening?"}
LOGIN -->|"Forgot password"| PW_RESET["1. Edit UiMod/config/config.json\n2. Set authEnabled: false\n3. Restart SSUI\n4. Go to /setup\n\nOr use the -r flag on startup."]
LOGIN -->|"'Invalid token'\nspam in logs"| JWT_FIX["Old browser tab from a\nprevious install is haunting you. 👻\nClose ALL SSUI tabs."]
LOGIN -->|"Just doesn't work"| PW_RESET
PW_RESET --> PW_OK{"Fixed?"}
JWT_FIX --> PW_OK
PW_OK -->|"Yes!"| RESOLVED
PW_OK -->|"No"| JACKSON
%% --- TERMINALS ---
JACKSON["➡️ Go to Chart 8\n📣 Ping Jackson"]:::nav
RESOLVED(["✅ Crisis Averted!"]):::success
classDef header fill:#2c3e50,color:#fff,stroke:#1a252f,stroke-width:3px
classDef success fill:#27ae60,color:#fff,stroke:#1e8449,stroke-width:3px
classDef nav fill:#3498db,color:#fff,stroke:#2980b9,stroke-width:2px
Chart 3 — Server Startup Issues
Server won't start? Find your platform.
flowchart TD
ENTRY(["📋 Chart 3\nServer Startup Issues"]):::header --> PLAT{"What platform?"}
PLAT -->|"Windows"| WIN_START
PLAT -->|"Linux\n(bare metal)"| LIN_START
PLAT -->|"Docker"| DOCK_START
%% --- WINDOWS ---
WIN_START{"Installed VC++\nRedistributable?"}
WIN_START -->|"No / What?"| VCPP["Install the latest VC++ Redist\nfrom Microsoft. Stationeers\nforgets to include it.\nEspecially on Win11."]
VCPP --> VCPP_OK{"Fixed?"}
VCPP_OK -->|"Yes!"| RESOLVED
VCPP_OK -->|"No"| CHECK_CONSOLE
WIN_START -->|"Yes"| CHECK_CONSOLE
%% --- LINUX ---
LIN_START{"What distro / version?"}
LIN_START -->|"Ubuntu 22.04\nor older"| OLD_OS["Your OS is too old.\nStationeers needs newer glibc.\nUpgrade to Debian 13+\nor Ubuntu 24.04+.\n\nOr just use the Docker image."]
OLD_OS --> RESOLVED
LIN_START -->|"Debian 13+ /\nUbuntu 24.04+"| STEAM_ERR
STEAM_ERR{"SteamCMD errors?"}
STEAM_ERR -->|"Error 0x2 /\nupdate fails"| IPV6_FIX["Disable IPv6:\nsysctl -w\nnet.ipv6.conf.all.disable_ipv6=1\n\nSteamCMD and IPv6\nhave beef. 🥩"]
IPV6_FIX --> IPV6_OK{"Fixed?"}
IPV6_OK -->|"Yes!"| RESOLVED
IPV6_OK -->|"No"| CHECK_CONSOLE
STEAM_ERR -->|"'No such file'\nerrors"| PATIENCE["Is SteamCMD still downloading?\nWait for it to finish.\nPatience, young grasshopper. 🧘"]
PATIENCE --> PAT_OK{"Fixed?"}
PAT_OK -->|"Yes!"| RESOLVED
PAT_OK -->|"Still broken"| STEAM_PATH["Ran SteamCMD manually?\nIt puts files in ~/Steam\ninstead of ~/SSUI/Steam.\nDelete stale folders,\nlet SSUI manage it."]
STEAM_PATH --> SP_OK{"Fixed?"}
SP_OK -->|"Yes!"| RESOLVED
SP_OK -->|"No"| CHECK_CONSOLE
STEAM_ERR -->|"No errors"| CHECK_CONSOLE
%% --- DOCKER ---
DOCK_START{"Sanity check\nfailing?"}
DOCK_START -->|"Yes"| SANITY["containerd / K8s?\nSSUI doesn't detect all runtimes.\nUse -NoSanityCheck flag\nor create /.dockerenv"]
SANITY --> SAN_OK{"Fixed?"}
SAN_OK -->|"Yes!"| RESOLVED
SAN_OK -->|"No"| CHECK_CONSOLE
DOCK_START -->|"No"| CHECK_CONSOLE
%% --- SHARED CONSOLE CHECK ---
CHECK_CONSOLE{"Check SSUI console.\nIndexOutOfRangeException\nin TerrainSystem?"}
CHECK_CONSOLE -->|"Yes!"| ONE_CORE["Running a 1-core VM?\nGame does ProcessorCount - 1\n= 0 workers on 1 core.\n\nFix: Add to AdditionalParams:\nMaxConcurrentWorkers 1"]
ONE_CORE --> RESOLVED
CHECK_CONSOLE -->|"No / other errors"| SUPPORT_PKG["Generate a Support Package!\nWiki → Support-Packages"] --> JACKSON
%% --- TERMINALS ---
JACKSON["➡️ Go to Chart 8\n📣 Ping Jackson"]:::nav
RESOLVED(["✅ Crisis Averted!"]):::success
classDef header fill:#2c3e50,color:#fff,stroke:#1a252f,stroke-width:3px
classDef success fill:#27ae60,color:#fff,stroke:#1e8449,stroke-width:3px
classDef nav fill:#3498db,color:#fff,stroke:#2980b9,stroke-width:2px
Chart 4 — Connection & Networking
Server runs but players can't connect? The big one. Deep breaths.
flowchart TD
ENTRY(["📋 Chart 4\nConnection & Networking"]):::header --> PF
PF{"Did you port forward\nUDP 27016 on router?"}
PF -->|"No / What?"| PF_FIX["Forward your game port\n(default: UDP 27016)\non your router.\nSee portforward.com"]
PF_FIX --> PF_OK{"Fixed?"}
PF_OK -->|"Yes!"| RESOLVED
PF_OK -->|"No"| TYPO
PF -->|"Yes"| TYPO
TYPO{"Double-check:\nIs it really 27016\nor did you fat-finger it?\n(Looking at you, 27106)"}
TYPO -->|"Oops, typo!"| PF_FIX
TYPO -->|"It's correct"| LIP
LIP{"Is LocalIpAddress\nset to 0.0.0.0?"}
LIP -->|"No, it's my\nmachine's IP"| LIP_FIX["Set LocalIpAddress to 0.0.0.0\nYes, the name is misleading.\nNo, don't put your actual IP.\nBlame Rocketwerkz. 🤷"]
LIP_FIX --> LIP_OK{"Fixed?"}
LIP_OK -->|"Yes!"| RESOLVED
LIP_OK -->|"No"| CGNAT
LIP -->|"Yes"| CGNAT
CGNAT{"Behind CGNAT?\n(ISP shares your\npublic IP with neighbors)"}
CGNAT -->|"Yes / Probably"| CGNAT_FIX["Port forwarding is impossible.\n1. Rent a VPS + FRP tunnel\n2. VPN tunnel solution\n3. AdvertiserOverride = VPS IP\n\nOr switch ISP. Seriously."]
CGNAT_FIX --> RESOLVED
CGNAT -->|"No"| DOCK
DOCK{"Running in Docker?"}
DOCK -->|"Yes"| UPNP["UPnP does NOT work in Docker.\nManual port forwarding only.\nCheck host networking mode."]
UPNP --> UP_OK{"Fixed?"}
UP_OK -->|"Yes!"| RESOLVED
UP_OK -->|"No"| RAKNET
DOCK -->|"No"| RAKNET
RAKNET{"RakNet errors\nin server logs?"}
RAKNET -->|"Yes"| RK_Q{"On Kubernetes?"}
RK_Q -->|"Yes"| K8S["Use hostNetwork: true\nin your pod spec.\nRakNet can't handle\nkube-proxy SNAT. At all."]
K8S --> RESOLVED
RK_Q -->|"No"| RKPORT["Try moving game port\nto 50000+ range.\nRakNet is picky about ports.\n\n(Stationeers bug, not SSUI.\nWe're innocent. 🤷)"]
RKPORT --> RK_OK{"Fixed?"}
RK_OK -->|"Yes!"| RESOLVED
RK_OK -->|"No"| JACKSON
RAKNET -->|"No"| STUCK
STUCK{"Connection stuck\nat 0%?"}
STUCK -->|"Yes"| CLIENT["Is the CLIENT PC also\nport-forwarding those ports?\nRemove them on client!\nOnly the SERVER forwards."]
STUCK -->|"'Incompatible\nversion'"| VER["Server + client versions\nmust match. Re-run\nSteamCMD update."]
STUCK -->|"Neither"| DNAT{"Double NAT?\n(Modem + Router\nboth doing NAT)"}
DNAT -->|"Yes"| DFIX["Put modem in bridge mode\nor port forward on BOTH\ndevices. Double NAT is pain."]
DNAT -->|"No / Don't know"| JACKSON
CLIENT --> C_OK{"Fixed?"}
VER --> C_OK
DFIX --> C_OK
C_OK -->|"Yes!"| RESOLVED
C_OK -->|"No"| JACKSON
%% --- TERMINALS ---
JACKSON["➡️ Go to Chart 8\n📣 Ping Jackson"]:::nav
RESOLVED(["✅ Crisis Averted!"]):::success
classDef header fill:#2c3e50,color:#fff,stroke:#1a252f,stroke-width:3px
classDef success fill:#27ae60,color:#fff,stroke:#1e8449,stroke-width:3px
classDef nav fill:#3498db,color:#fff,stroke:#2980b9,stroke-width:2px
Chart 5 — Server List & Advertiser
Server runs, people connected before, but now it vanishes from the list?
flowchart TD
ENTRY(["📋 Chart 5\nServer List & Advertiser"]):::header --> WHEN
WHEN{"When does it\ndisappear?"}
WHEN -->|"After some\nhours / days"| DYN{"Dynamic IP\nfrom your ISP?"}
WHEN -->|"Never appears\nat all"| NEVER["Server probably isn't\nreachable at all.\n➡️ Go to Chart 4\nConnection & Networking"]:::nav
WHEN -->|"Shows as\n'incompatible'"| VER["Server + client versions\nmust match.\nRe-run SteamCMD update.\nCheck you're not on\nan old beta branch."]
VER --> V_OK{"Fixed?"}
V_OK -->|"Yes!"| RESOLVED
V_OK -->|"No"| JACKSON
DYN -->|"Yes"| ADV["Enable the SSUI Advertiser\nwith 'auto' mode.\nUses ipify to detect your\npublic IP and re-advertises\nautomatically."]
ADV --> A_OK{"Fixed?"}
A_OK -->|"Yes!"| RESOLVED
A_OK -->|"No"| ERR
DYN -->|"No / Not sure"| ERR
ERR{"Advertiser stopped?\nCheck logs for error count."}
ERR -->|"Yes, error\nthreshold hit"| UPDATE["Update SSUI to latest!\nOld versions killed the\nadvertiser after 5 transient\nerrors. Forever.\nFixed with incremental backoff."]
UPDATE --> RESOLVED
ERR -->|"No errors visible"| JACKSON
%% --- TERMINALS ---
JACKSON["➡️ Go to Chart 8\n📣 Ping Jackson"]:::nav
RESOLVED(["✅ Crisis Averted!"]):::success
classDef header fill:#2c3e50,color:#fff,stroke:#1a252f,stroke-width:3px
classDef success fill:#27ae60,color:#fff,stroke:#1e8449,stroke-width:3px
classDef nav fill:#3498db,color:#fff,stroke:#2980b9,stroke-width:2px
Chart 6 — Docker Issues
Docker being Docker. A tale as old as containerization itself.
flowchart TD
ENTRY(["📋 Chart 6\nDocker Issues"]):::header --> WHAT
WHAT{"What Docker problem?"}
WHAT -->|"Sanity check\nfails"| SANITY["containerd / K8s?\nSSUI doesn't detect all runtimes.\nUse -NoSanityCheck flag\nor create /.dockerenv\nin the container."]
WHAT -->|"Mods not\nloading"| MODS
WHAT -->|"Files owned\nby root"| ROOT["Add user/uid/gid mapping\nin docker-compose.yml\nto match your host user."]
WHAT -->|"CLI commands\ndon't work"| CLI["SSUI manages the server\nthrough the Web UI.\nYou don't need docker exec\nfor game server commands.\nThat's the whole point. 😉"]
WHAT -->|"HTTP 400 on\nfirst access"| HTTPS["Are you using https:// ?\nSSUI does NOT serve HTTP.\n➡️ See Chart 2 if stuck"]:::nav
WHAT -->|"Server works then\nstops responding"| TIMEOUT["Enable SSUI log file:\nCreateSSUILogFile: true\nin config.json.\nWait for next occurrence."]
WHAT -->|"Players can't\nconnect"| CONN["UPnP doesn't work in Docker.\nManual port forwarding only.\n➡️ See Chart 4 for more"]:::nav
SANITY --> S_OK{"Fixed?"}
S_OK -->|"Yes!"| RESOLVED
S_OK -->|"No"| JACKSON
ROOT --> RESOLVED
CLI --> RESOLVED
TIMEOUT --> JACKSON
MODS{"Is BepInEx/core\npresent in the container?"}
MODS -->|"No / Missing"| NUKE["Nuclear option:\n1. Remove all app files\n2. docker volume prune\n3. Re-create with bind mount:\n ./app:/app:rw\n4. Re-install SLP + mods\n5. Verify BepInEx/core exists"]
MODS -->|"Yes"| VER["Check SLP server DLL\nmatches your game version.\nRe-copy the mod package.\nWatch for XML\ndeserialization errors."]
NUKE --> M_OK{"Fixed?"}
VER --> M_OK
M_OK -->|"Yes!"| RESOLVED
M_OK -->|"No"| JACKSON
%% --- TERMINALS ---
JACKSON["➡️ Go to Chart 8\n📣 Ping Jackson"]:::nav
RESOLVED(["✅ Crisis Averted!"]):::success
classDef header fill:#2c3e50,color:#fff,stroke:#1a252f,stroke-width:3px
classDef success fill:#27ae60,color:#fff,stroke:#1e8449,stroke-width:3px
classDef nav fill:#3498db,color:#fff,stroke:#2980b9,stroke-width:2px
Chart 7 — Discord Bot, Saves, Crashes & Everything Else™
The grab-bag chart. If you made it here, things are getting interesting.
flowchart TD
ENTRY(["📋 Chart 7\nEverything Else™"]):::header --> CAT{"Pick your poison:"}
CAT -->|"Discord bot\nacting weird"| DISCORD
CAT -->|"Save / backup\nproblems"| SAVES
CAT -->|"Server crashes"| CRASH
CAT -->|"Something else"| ELSE
%% --- DISCORD ---
DISCORD{"What's the bot doing?"}
DISCORD -->|"403 errors"| OAUTH["Regenerate the bot invite\nwith the updated OAuth URL.\nCheck channel permissions."]
DISCORD -->|"Spamming\nmessages"| SPAM["Restart SSUI.\nUsually a Stationeers memory\nleak causing repeated events.\nClassic Rocketwerkz moment. 🙄"]
DISCORD -->|"Retrieve password\nbroken"| BOTPW["Update to SSUI v5.13+\nRace condition was fixed."]
DISCORD -->|"Save notifications\nmissing"| BOTSAVE["Check Discord OAuth URL\nis up to date."]
DISCORD -->|"Other"| JACKSON
OAUTH --> B_OK{"Fixed?"}
BOTSAVE --> B_OK
B_OK -->|"Yes!"| RESOLVED
B_OK -->|"No"| JACKSON
SPAM --> SP_OK{"Still spamming\nafter restart?"}
SP_OK -->|"No!"| RESOLVED
SP_OK -->|"YES"| JACKSON
BOTPW --> RESOLVED
%% --- SAVES ---
SAVES{"What save issue?"}
SAVES -->|"Server ignores\nmy save"| SNAME["Does SaveName in config\nEXACTLY match folder name?\n\n'Luna' ≠ 'Lunar'\nCase. Matters. Every. Letter."]
SAVES -->|"Backup manager\nis empty"| SBACKUP["It only watches the\nautosaves directory.\nUse 'file save' to trigger\nautosaves instead."]
SAVES -->|"Autosave\ncopy broken"| SBUG["Update to SSUI v5.9.1+\nBug after ~2400 autosaves.\nYes, really."]
SAVES -->|"Commands like\n'say' don't work"| SCMD["Save name mismatch!\nSSCM needs exact world name\nfor command privileges."]
SAVES -->|"Copied save\nfrom another server"| SCOPY{"SaveName matches\nfolder name?\nPermissions OK?"}
SNAME --> S_OK{"Fixed?"}
SCMD --> S_OK
S_OK -->|"Yes!"| RESOLVED
S_OK -->|"No"| JACKSON
SBACKUP --> RESOLVED
SBUG --> RESOLVED
SCOPY -->|"Fixed it!"| RESOLVED
SCOPY -->|"Still broken"| JACKSON
%% --- CRASHES ---
CRASH{"When does it crash?"}
CRASH -->|"During save\noperations"| CSAVE["Update SSUI!\nSSCM had a threading bug:\nsaves ran off the main\nUnity thread. Fixed in PR #119."]
CRASH -->|"On loading\na save"| CLOAD
CRASH -->|"Random crashes\nwith mods"| CMODS
CRASH -->|"Other / random"| COTHER["Generate a Support Package!\nWiki → Support-Packages\nEnable CreateSSUILogFile: true"]
CSAVE --> RESOLVED
COTHER --> JACKSON
CLOAD{"IndexOutOfRange\nor save corruption?"}
CLOAD -->|"IndexOutOfRange"| CTABLET["Known Stationeers bug:\ntablet cartridge switched\nduring a save operation.\nJackson has a patched DLL."]
CLOAD -->|"Other error"| COTHER
CTABLET --> JACKSON
CMODS{"Crashes without\nmods too?"}
CMODS -->|"No, mods only"| MODISSUE["Mod issue, not SSUI.\nRunning beta branch?\nGood luck, brave soul. ⚔️"]
MODISSUE --> SKILL_ISSUE
CMODS -->|"Yes"| COTHER
%% --- OTHER ---
ELSE{"Be more specific:"}
ELSE -->|"AutoPause\ndoesn't work"| APAUSE["Stationeers game bug.\nSSUI sends the command.\nGame just... ignores it. 🫠"]
ELSE -->|"Detection manager\nnot firing"| DETECT["Known bug.\nCheck GitHub issues."]
ELSE -->|"Config changes\ndon't apply"| RESTART{"Restarted SSUI\nafter config change?"}
ELSE -->|"Run 2 servers\non 1 machine"| DUAL["Change SSUIWebPort in\nconfig.json or use -p=PORT.\nChange game port in\nNetwork settings too."]
ELSE -->|"Orphan process\nafter update"| ORPHAN["GH issue #159.\nStop server BEFORE updating.\nKill orphan manually via PID."]
APAUSE --> SKILL_ISSUE
DETECT --> JACKSON
RESTART -->|"...no"| RFIX["Restart SSUI. Always\nrestart after config changes.\nALWAYS."] --> RESOLVED
RESTART -->|"Yes!"| JACKSON
DUAL --> RESOLVED
ORPHAN --> RESOLVED
%% --- TERMINALS ---
JACKSON["➡️ Go to Chart 8\n📣 Ping Jackson"]:::nav
RESOLVED(["✅ Crisis Averted!"]):::success
SKILL_ISSUE(["🏆 SKILL ISSUE™\nCertified by SSUI Support Dept."]):::skillissue
classDef header fill:#2c3e50,color:#fff,stroke:#1a252f,stroke-width:3px
classDef success fill:#27ae60,color:#fff,stroke:#1e8449,stroke-width:3px
classDef skillissue fill:#e67e22,color:#fff,stroke:#d35400,stroke-width:4px
classDef nav fill:#3498db,color:#fff,stroke:#2980b9,stroke-width:2px
Chart 8 — The Jackson Endpoint™
You've tried everything. There's only one hope left.
flowchart TD
ENTRY(["📋 Chart 8\nThe Jackson Endpoint™"]):::header --> JACKSON
JACKSON["📣 Ping @JacksonTheMaster\nin the SSUI Discord #support\n\nBring:\n• SSUI version number\n• A support package\n• Your config.json\n• Patience\n• Snacks (recommended)"]:::jackson
JACKSON --> J_OK{"Did Jackson fix it?"}
J_OK -->|"Yes! 🎉"| RESOLVED
J_OK -->|"No response yet"| J_WAIT["He sleeps sometimes.\nApparently he's 'human'\nand has a 'life'.\nWait 24-48h."]:::wait
J_WAIT --> J_OK2{"How about now?"}
J_OK2 -->|"Fixed! 🎉"| RESOLVED
J_OK2 -->|"Still nothing"| SKILL_ISSUE
J_OK -->|"Even Jackson\ncan't fix this"| SKILL_ISSUE
RESOLVED(["✅ Crisis Averted!\nServer goes brrr.\nGo play Stationeers."]):::success
SKILL_ISSUE(["🏆 SKILL ISSUE™\n\nCertified by the\nSSUI Support Department.\n\nWe tried. We really did.\nMaybe try Minecraft?"]):::skillissue
classDef header fill:#2c3e50,color:#fff,stroke:#1a252f,stroke-width:3px
classDef jackson fill:#3498db,color:#fff,stroke:#2980b9,stroke-width:3px
classDef wait fill:#9b59b6,color:#fff,stroke:#8e44ad,stroke-width:2px
classDef success fill:#27ae60,color:#fff,stroke:#1e8449,stroke-width:3px
classDef skillissue fill:#e67e22,color:#fff,stroke:#d35400,stroke-width:4px
Quick Reference: The Flowchart Cheat Sheet
For those who don't like pictures, here's the TL;DR version:
Tier 1: Check These First (Solves 60% of tickets)
| Symptom | Fix |
|---|---|
| Can't reach Web UI | Use https:// not http://, port 8443 |
localhost doesn't work on Windows |
Use 127.0.0.1 instead (Hyper-V) |
| Forgot password | authEnabled: false in config → restart → /setup |
| Players can't connect | Port forward UDP 27016 on router |
| "Incompatible version" | Update game server via SteamCMD |
| Server won't start on Windows | Install VC++ Redistributable |
Tier 2: Platform-Specific Gotchas (Solves another 25%)
| Platform | Gotcha | Fix |
|---|---|---|
| Linux | SteamCMD error 0x2 | Disable IPv6 |
| Linux | Ubuntu 22.04 too old | Upgrade to Debian 13+ / Ubuntu 24.04+ |
| Linux | 1-core VM crash | MaxConcurrentWorkers 1 in AdditionalParams |
| Docker | UPnP doesn't work | Manual port forwarding only |
| Docker | Containerd not detected | -NoSanityCheck flag |
| Docker | Mods broken after volume change | Full cleanup + rebuild with bind mount |
| Docker | Files owned by root | Add uid/gid to docker-compose |
| Windows | Hyper-V eats localhost | Use 127.0.0.1 |
| Kubernetes | Player disconnects | hostNetwork: true in pod spec |
Tier 3: Networking Nightmares (The hard ones)
| Issue | Fix |
|---|---|
| Behind CGNAT | VPS + FRP tunnel, or VPN |
| Double NAT | Bridge mode on modem, or forward on both devices |
| RakNet errors | Try port 50000+ range; it's a game bug |
| Reverse proxy (nginx) | proxy_buffering off, proxy_cache off, timeouts |
| Reverse proxy (Apache) | certbot --key-type rsa (ECDSA not supported) |
| Reverse proxy (Traefik) | insecureSkipVerify for self-signed cert |
| Server disappears from list | Enable SSUI Advertiser with auto mode |
LocalIpAddress confusion |
Set to 0.0.0.0, NOT your actual IP |
Tier 4: Ping @JacksonTheMaster
When all else fails. Bring logs, a support package, and snacks.
Tier 5: 🏆 Skill Issue™
You've reached the end. We tried.
No Jacksons were harmed in the making of this chart. 3000 GPUs worked hard on this analysis (probably)