How to Set Up an Icarus Dedicated Server
From a SteamCMD install to friends joining your Open World: the ports, launch line and ServerSettings.ini values that make an Icarus dedicated server show up in the list and stay running.
If UDP query traffic cannot reach the server, friends will not see it in Join Session even if the world itself is healthy. The game port handles play traffic after joining; the query port is what gets you listed.
SessionName in the INI currently does nothing for the browser entry. Use -SteamServerName="Your Server Name", then restart so the new name is registered.
Icarus runs one prospect at a time. If none is loaded, the server sits in a lobby state, which is valid, but players will land in the lobby until someone creates or loads a prospect.
Both idle timers default to 300 seconds. That is useful for mission-style lobby flow, but it is the wrong behaviour for an always-on Open World unless you change those values.
Before you start: what an Icarus dedicated server is
An Icarus dedicated server is a separate Windows server process that holds one active prospect at a time. If no prospect is loaded, it does not become useless or broken; it waits in a lobby state that players can join, then use to create or load an Open World, Outpost or mission. That one-world-at-a-time design is why prospect management matters more here than it does in some survival servers.
The dedicated server supports up to 8 players and it is free to run. It is also the better fit for a persistent Open World because the save lives on the server instead of on one player’s PC. It is PC only, so if your group is mixing platforms, check whether Icarus servers support crossplay before you build anything around a console player joining.
This guide sticks to the supported Windows build. You can self-host on a Windows PC at home or rent a server that already has the ports and Windows side handled for you. If you are still choosing hardware or a rental plan, the practical starting point is how much RAM an Icarus server needs.
What you need in advance is simple: a Windows machine or rented server, router access if you are self-hosting, a join password and admin password ready, and a decision on how you want an empty server to behave. The setup path below follows the order that avoids most first-day mistakes.
The diagram below shows the whole path from install to your friends joining.
app 2089300
login anonymous
UDP 27015 query
-SteamServerName
ServerSettings.ini
dedicated servers toggle
pick by name
- Join and admin passwords
- Keep the world loaded when empty, or fall back to the lobby
- Who may launch or delete prospects
- Who updates the server after weekly patches
Step 1: install the server with SteamCMD
Icarus uses a separate dedicated server app in SteamCMD, so you do not need a normal Icarus licence on the machine just to install the server. That matters for rented boxes and spare PCs because it keeps the server side clean: one app, one folder, anonymous login, no Steam client session fighting with your personal account.
force_install_dir C:\IcarusServer login anonymous app_update 2089300 validate
That installs the dedicated server app ID 2089300 into C:\IcarusServer. The executable you will launch is the Windows build, IcarusServer.exe. If you prefer a different folder, change the install directory here and keep the rest of the guide pointed at the same location.
The server’s config lives under Saved\Config\WindowsServer\. On a first setup, do not worry if that path is missing yet; Icarus creates its Saved structure after the server has been launched into a lobby or prospect at least once.
Step 2: open the right ports and let the server through the firewall
Icarus uses two UDP ports by default: 17777 for the game traffic and 27015 for server queries. The query port is the one that decides whether the server appears in the dedicated server browser. That is why some servers look healthy in a console window yet never show up for friends: only the game port is reachable, so nobody can discover it in the first place.
For a self-hosted server, forward both UDP ports on your router to the Windows PC running the server. Then allow the server through Windows Firewall so those packets are not dropped locally after they make it across the internet. If you only forward the game port, clients may still fail at the very first step because the Steam server browser never gets a valid query response.
If you run more than one Icarus server on the same machine, each instance needs its own game port and query port. You change those with -PORT= and -QueryPort= on the launch line, then forward the matching pair. Changing ports does not improve performance by itself; it simply prevents one server from trying to bind to a port already used by another.
On a rented server, the host normally assigns the ports and opens them for you, often on values that are not the defaults because the IP is shared. In that case there is no home router forwarding to do. Use the assigned ports exactly as given.
This is the important split to keep in mind when something is invisible or unreachable.
- UDP 27015 query port: discovery and browser listing.
- UDP 17777 game port: actual play traffic after a client joins.
How to tell this step helped: after a clean restart, the server should appear under dedicated servers in Join Session. If you have just restarted it, allow 5 to 10 minutes for the Steam master server list to refresh before assuming the query port is still wrong.
Step 3: launch it with the right parameters
The launch line controls what friends see in the browser, what ports the server binds to, and whether you get a live log window. Always include -Log; without it, nothing visible appears on screen while the server runs, which makes first-time setup harder than it needs to be.
"C:\IcarusServer\IcarusServer.exe" -Log -SteamServerName="Friends Open World" -PORT=17777 -QueryPort=27015
The name in the dedicated browser comes from -SteamServerName, not from the INI. SessionName currently does nothing for browser naming. Keep the Steam server name under the 64-character limit, and remember that any name change only shows up after a restart because the server has to register again.
Step 4: set up ServerSettings.ini
ServerSettings.ini is generated on the first lobby or prospect launch. If the file is not there yet, start the server once, let it reach the lobby, stop it, then edit the file in [ServerInstallDirectory]\Icarus\Saved\Config\WindowsServer\. RocketWerkz also provides a template copy you can place there manually. If you use a custom Saved location with -UserDir=, the same relative Saved\Config\WindowsServer\ path applies there instead, and the Saved folder can also live under %localappdata%\Icarus\.
For a friends-only persistent Open World, the safest starting point is to lock down admin access, stop non-admins from changing prospects in the lobby, and prevent empty-server shutdown. This is RocketWerkz’s own template with those values filled in. Swap in your own passwords; the table underneath explains every line.
[/Script/Icarus.DedicatedServerSettings] SessionName= JoinPassword=SetAJoinPassword MaxPlayers=8 AdminPassword=SetAnAdminPassword ShutdownIfNotJoinedFor=-1 ShutdownIfEmptyFor=-1 AllowNonAdminsToLaunchProspects=False AllowNonAdminsToDeleteProspects=False LoadProspect= CreateProspect= ResumeProspect=True LastProspectName=
| Key | What it does | Recommended value | Why |
|---|---|---|---|
SessionName | Legacy session field in the template | Leave blank | It currently does nothing. The browser name comes from -SteamServerName on the launch line. |
JoinPassword | Password players enter when they join | Set one for a private friends server | Your server is listed publicly in the dedicated server browser, so without a password anyone who finds it can walk in. Leave it empty only if that is what you want. |
MaxPlayers | Slot cap from 1 to 8 | 8, or your group size if you want a hard cap | Icarus sessions top out at eight players, so this only limits how many can be on at once. A lower cap keeps a slot from being taken by someone outside the group. |
AdminPassword | Required for /AdminLogin | Set one | If this is blank, anyone can type /AdminLogin and become admin, which means they can kick, ban or send the server back to the lobby. |
ShutdownIfNotJoinedFor | Time before an unjoined prospect is closed and the server returns to lobby | -1 for a persistent Open World, or keep 300 for lobby-driven sessions | Closing an idle world saves CPU time, RAM and background simulation state. The trade-off is convenience: a non-negative value can dump you back to the lobby before your group arrives. |
ShutdownIfEmptyFor | Time before an empty prospect is closed and the server returns to lobby | -1 for a persistent Open World, or keep 300 if you want on-demand worlds | This is the setting that decides whether the world stays ready between play sessions. Indefinite uptime uses more machine time than unloading the prospect, but it avoids surprise resets to the lobby. |
AllowNonAdminsToLaunchProspects | Lets players in the lobby create or load prospects | False for a shared Open World | Stops guests changing the active world by accident or loading the wrong save. The trade-off is that an admin must be around if the server is sitting in the lobby. |
AllowNonAdminsToDeleteProspects | Lets non-admins delete saved prospects | False | This is pure safety. There is no upside for most friend groups beyond convenience, and the downside is losing a save. |
LoadProspect | Loads a specific saved prospect by name at startup | Blank unless you need a named save | Useful when you want one exact save every boot. It avoids manual selection, but only if you already know the correct saved prospect name in the dedicated server prospects folder. |
CreateProspect | Creates a prospect at startup using a command string | Blank for Open World | Good for automating missions or outposts, not for guessing Open World internals. Leaving it blank avoids startup conflicts and keeps creation in the official lobby UI. |
ResumeProspect | Reloads the last prospect stored in LastProspectName | True | This is the simplest reliable restart behaviour. After updates or scheduled restarts, the same world comes back without manual work. |
LastProspectName | Tracks the last active prospect | Let the server manage it | It exists to support ResumeProspect. Manual edits are usually unnecessary, and leaving it alone reduces the chance of pointing the server at the wrong save state. |
Step 5: understand the shutdown timers before they surprise you
The two shutdown timers are the biggest source of “it worked, then vanished” reports. Their default is 300 seconds. One applies after the server starts a prospect and nobody joins in time; the other applies after the last player leaves an active prospect. In both cases, the server shuts the prospect down and returns to the lobby state.
That behaviour exists for a reason: unloading an empty world frees the ongoing cost of keeping the prospect resident in memory and active on the server. It is sensible for mission-style use where someone joins, starts something, finishes, then leaves. It is not sensible for a persistent Open World that you expect to remain loaded and ready every evening.
Look at the timer flow below, then decide which model you want.
- Keep the defaults: best if you like the lobby workflow and want the server to fall back to it when nobody is around.
- Set both values to
-1: best for an always-on Open World. Negative values run indefinitely. - Use a long positive value: valid if you want a long grace period but not a permanently loaded world. A common host suggestion is
86400for a full day. - Do not use
0to disable them:0means “shut down as soon as possible”, not “off”.
How to tell a timer is the problem: the server appears online, but when players come back later they land in the lobby instead of the world they expected. That means the process is fine; the active prospect is what got unloaded.
Step 6: create or bring your prospect
Icarus only runs one prospect at a time, so you need to be deliberate about what the server should open. If you leave the startup keys blank and simply join, the server will wait in the lobby and let you create an Open World, Outpost or mission through the normal server lobby UI. For Open World, that is the cleanest route because it avoids guessing internal prospect identifiers.
If you want the server to reopen the last used world after every restart, keep ResumeProspect=True. If you want a specific saved prospect every time, use LoadProspect with the save name from Saved\PlayerData\DedicatedServer\Prospects\. The server processes startup prospect instructions in order, so leave unused ones blank rather than setting several at once and hoping the right one wins.
The startup creation syntax is:
CreateProspect="[ProspectType] [Difficulty 1-4] [Hardcore true/false] [SaveName]" CreateProspect="Tier1_Forest_Recon_0 3 false TestProspect01"
That official example creates the tutorial prospect on hard. For outposts, the save name must be included. For Open World, use the lobby UI instead. Also note the expansion rule: the player who creates a prospect needs the map’s expansion if that map requires one.
Migrating a local prospect to the dedicated server
This works, but handle the save carefully. Back it up first, then copy it as-is. Do not rename the file and do not edit the JSON, because that can corrupt the prospect unrecoverably.
- Local prospect source:
%UserProfile%\AppData\Local\Icarus\Saved\PlayerData\{SteamID}\Prospects\{Name}.json - Dedicated server destination:
[server]\Icarus\Saved\PlayerData\DedicatedServer\Prospects\
If the PlayerData\DedicatedServer\Prospects folders do not exist on the server yet, create them. Once the file is copied, load it by name or let the server find it through the normal resume flow.
Step 7: join the server and become admin
To join, launch Icarus, select your character, open Join Session in the HAB menu, switch the top-right filter to dedicated servers, then pick the server by the Steam server name you set on the launch line. If a JoinPassword is set, players must enter it to continue. If no prospect is currently running, they will land in the Server Lobby rather than directly in-world.
Admin is separate from joining. Use /AdminLogin YourAdminPassword in chat after you are connected. If the admin password is blank, anyone can do this, which is why setting one is worth the tiny bit of extra friction. These are chat or lobby commands, not a separate port you need to open.
| Command | What it does | When to use it |
|---|---|---|
/AdminLogin [password] | Grants admin access to the current player | Run this first when you need management rights. In the lobby, the slash is not needed. |
/KickPlayer [SteamId or name] | Removes a player from the current session | Useful for a stuck client, griefing, or freeing the session so someone can rejoin cleanly. |
/BanPlayer [SteamId or name] | Bans a player | Use for repeated disruption, not ordinary connection problems. |
/UnbanPlayer [SteamId or name] | Removes a ban | Use if the wrong player was banned or you are reversing a temporary block. |
/ReturnToLobby | Sends the server back to the lobby | Handy when you want to stop the current prospect and create or load a different one. |
/ReturnToLobbyWhenEmpty | Returns to the lobby after the current players leave | Good for planned maintenance without throwing everyone out immediately. |
/AdminSay | Sends an admin message | Use it to warn about restarts, prospect changes or mod updates. |
Step 8: keep it healthy with updates, backups, restarts and mod discipline
RocketWerkz patches Icarus most weeks, and version matching is strict: a server on an older build cannot be joined by updated clients. That makes a simple update routine essential. Stop the server first so files are not in use, update the dedicated server app, then start it again. Point SteamCMD at the same folder you installed to, or it will download a second copy somewhere else.
taskkill /im IcarusServer.exe "C:\steamcmd\steamcmd.exe" +force_install_dir C:\IcarusServer +login anonymous +app_update 2089300 validate +quit
Before every game update, take a manual backup of the server’s save data. Save formats can change across patches, so the safe habit is to read how to back up a game server once, then keep a copy before each update and before any save migration.
A scheduled restart at a quiet hour is a sensible housekeeping step, especially on an always-on server. With ResumeProspect=True, the same prospect comes back after the reboot, so the cost to players is just a short interruption. If the save is large, the first boot can take a few minutes because the server has more world to load before it is ready for joins.
Mods are simple but strict. Icarus uses .pak files placed in Icarus/Content/Paks/mods/, and every connecting player needs the same mod set. That is less about raw performance than data compatibility: if the server and client disagree about content, loads fail or clients cannot join cleanly. There is no Steam Workshop layer here to synchronise that for you automatically.
Symptom, likely cause, first fix
If a friend cannot get in, work down this chart before changing anything. It checks the causes in the order they usually turn up.
| Symptom | Likely cause | First fix |
|---|---|---|
| Server is not in the browser | The UDP query port is not reachable, or you have just restarted the server | Check the forwarded or assigned QueryPort, make sure the server is allowed through the firewall, then wait up to 5 to 10 minutes for the listing to refresh. |
| Server shows in the browser but nobody can join | The game port is blocked, the join password is wrong, or the server is still finishing its first load | Check the game port, re-enter the JoinPassword, and wait until the server log indicates it is ready before trying again. |
| The server shuts itself down after about five minutes | ShutdownIfNotJoinedFor or ShutdownIfEmptyFor is still on the default 300 | Set both timers negative for an always-on Open World, or use a longer positive value if you only want a larger grace period. |
| Players land in the lobby, not the world they expected | No prospect is loaded, or the shutdown timers returned the server to the lobby | Create or load a prospect from the lobby, then keep ResumeProspect=True and adjust the timers if the lobby fallback is unwanted. |
| Anyone can kick players or claim admin | AdminPassword is empty | Set an admin password in ServerSettings.ini and restart the server. |
| Version mismatch after a patch | Server and clients are on different builds | Update the server with SteamCMD, then make sure every player updates or verifies their game files before rejoining. |
| Join times out on the loading screen | A large Open World save is still loading and streaming in | Wait longer after a restart before the first joins, especially on a large prospect, then try again once the server has settled. |
| Console friends cannot find the server | Icarus dedicated servers are PC only | Do not treat this as a port problem. The limitation is platform support, not server discovery. |
| The browser shows the wrong server name | You changed SessionName instead of -SteamServerName, or you changed the launch name without restarting | Edit the launch line, not the INI, and restart so the new Steam server name is registered. |
| The listing is missing right after a restart | The Steam master server list has not refreshed yet | Give it 5 to 10 minutes before you start changing ports again. A healthy server can still take time to reappear. |
Self-host or rent: which route fits this server best?
An Icarus dedicated server is not hard to run, but it does expect you to handle Windows upkeep, updates and prospect files properly. If you are deciding between home hosting and renting, think less about raw “power” and more about who will look after ports, uptime and weekly patching. If you want the background on the home route first, read self-hosting a game server.
| Factor | Self-host on a Windows PC | Rented server |
|---|---|---|
| Best fit | You want full file access and do not mind router and Windows admin work | You want the simpler path to an always-online server for friends |
| Ports and firewall | You must forward the game and query ports and allow the server through Windows Firewall | The host normally assigns and opens the ports for you |
| Browser visibility | You control the name and ports directly, but one bad forwarding rule stops discovery | Usually easier, because the network side is already prepared |
| Always-on Open World | Works well if the PC stays on and the idle timers are configured for persistence | Usually the easier fit if your group joins at mixed times |
| Weekly updates | You run SteamCMD updates yourself and should keep backups before patches | Usually an update button or automatic updates in the panel; still check the build after each patch |
| Prospect files and migrations | Direct access makes local save migration straightforward | Still possible, but you work through the host’s file manager or remote access tools |
| When to pick it | Good for a technically comfortable group and a server that lives close to the owner | Good when reliability and convenience matter more than hands-on control |
If you would rather skip router forwarding and most of the Windows housekeeping, our Icarus server hosting comparison is the faster way to choose a setup that is ready to list in the browser and stay online for a persistent Open World.
Compare the best Icarus server hostsIcarus server FAQ
Do I need to own Icarus to run a dedicated server?
No. The dedicated server installs through SteamCMD with anonymous login, using app ID 2089300. That means you can install and update the server on a Windows machine without tying it to a personal game licence.
What ports does an Icarus dedicated server use?
By default it uses UDP 17777 for the game and UDP 27015 for the query traffic. The query port is what gets the server into the browser, while the game port is what players use after they click Join. You can change both with -PORT= and -QueryPort=.
Why does my Icarus server shut down after five minutes?
The two shutdown timers default to 300 seconds. One returns the server to the lobby if nobody joins after startup, and the other does the same after the prospect becomes empty. For a persistent Open World, set them to a negative value so they run indefinitely.
Why can’t my friends see my Icarus server in the browser?
The usual reason is that the query port is not reachable, so the server never registers properly for discovery. Less often, the server has just restarted and the master list has not refreshed yet. Also check that the name is being set with -SteamServerName, because changing SessionName will not fix a bad browser entry.
Can I move my single-player Icarus prospect to a dedicated server?
Yes, by copying the local prospect JSON into the dedicated server prospects folder. Make a backup first, then copy the file without renaming it or editing the JSON. Renaming or editing that file can corrupt the save unrecoverably.
More Icarus server help
Check how much RAM your Open World needs, what crossplay supports, or compare hosts if you would rather rent.
Icarus updates frequently, and host panels do change. If a host’s current panel labels a step differently from this guide, follow the host’s live panel wording while keeping the same core rules on ports, naming, prospects, timers and build matching.