ICARUS FIELD GUIDE

Changelog

Every Uplink release, newest first.

Rather be told than check? Every release is published to the release feed, which any feed reader can follow. Uplink also checks for its own updates and tells you in the portal.

v1.0.0-beta.12

BetaCurrentSeptember 9, 2026
  • The dashboard shows the address your players connect to. The game's join address, public and LAN, alongside the portal's own — each one copies with a click
  • The dashboard shows free disk space and the next scheduled restart. Free space is flagged when it falls below your minimum
  • You can delete a saved world. The server must be stopped, a backup is taken first, and the world set to load next is refused
  • A diagnostics bundle for bug reports, under the account menu → Administration. Uplink's version, its status and its settings with the secrets removed, plus recent logs unless you untick them. Your game passwords are not in it
  • The live console has a filter, and the log search that reaches back 31 days is no longer hidden below it
  • The activity log has its own entry in the account menu. "Manage Users" is now Administration
  • Creating a backup shows progress instead of looking like nothing happened
  • Steam sign-in is gone; Uplink downloads the server anonymously, which fetches it in full. Any stored Steam password or Guard secret is erased on first run. POST /api/steam/login, /guard and /logout are removed
  • Turning off two-factor authentication now asks for your password, as does replacing your secret. Scripted callers must send {"password":"…"}
  • Server Behavior on the Worlds tab is one line per group, with the labels and boxes lined up
  • The portal and the installer are usable on a phone. Typing no longer zooms the page, the long-term history calendars stack one per row, and controls that sat off the edge of the screen are reachable
  • The setup wizard authorizes its own requests. Any page open in your browser could previously drive the install
  • Backup archives are no longer readable by other accounts on the machine. They hold your join and admin passwords in plain text
  • The self-signed certificate covers the machine's own address, so reaching the portal over the LAN no longer always warns. Delete certs/self.crt and certs/self.key to regenerate
  • Fixed: password reset emails were never sent if your email alerts use the Gmail or Outlook preset
  • Fixed: renaming your account stopped every API token it owned from working. They follow the new name now

v1.0.0-beta.11

BetaSeptember 2, 2026
  • Backups are now named after the world they hold. A folder of prospects-20260901-143000.zip said nothing about which save was in which archive; a backup of a world called Olympus Homestead now reads Olympus-Homestead-20260901-143000.zip. Existing backups keep their names and still list and restore
  • Searching the log history no longer runs a disk search on every keystroke. It waits for a pause, drops the search you just replaced, and says when nothing matched instead of going blank. It covers the 31 most recent saved log files
  • The portal now gives up on a request that never answers. A call that hangs for 20 seconds — Uplink stopped, or the connection gone — now fails with an explanation instead of leaving a button spinning indefinitely
  • Fixed: a world whose name Uplink would not accept could not be edited at all. Worlds created in-game can carry names the rename rules refuse, a space being enough, and the dialog sends the current name back — so changing only the difficulty or hardcore flag was rejected
  • Fixed: an expired session made the update check look broken. Checking for a new Uplink version after the session had gone reported "authentication required" with advice about the update source; it now drops to the login screen

v1.0.0-beta.10

BetaAugust 25, 2026
  • Icarus Server Manager is now Icarus Field Guide: Uplink. The binary is uplink.exe, the Windows service is FieldGuideUplink, and the firewall rules, shortcuts, Add/Remove entry and release repo all move with it. Your config, users, backups, logs and certificates are untouched, and an existing install keeps its paths
  • Upgrading from an older version keeps working. Your machine key and update settings are carried across automatically, the old API route, header and command-line flags still work, and uninstalling cleans up both old and new names. Older installs can still self-update to this release
  • Linux self-update is fixed. It asked for the Windows binary, so it downloaded a .exe
  • Fixed: a server folder whose name contained PowerShell syntax could run commands while uninstalling. The path was pasted into the cleanup script as a double-quoted string, where $(...) is executed rather than compared. Paths are now inert literals
  • The portal wears the Icarus Field Guide's design language, and is now dark-only. The light theme, the toggle and the per-account preference are gone: POST /api/auth/theme no longer exists and theme has been dropped from the auth status response and the user list, so a scripted caller reading either needs updating
  • Color now marks the action only where it matters. Start, Restart, Stop and Update keep green, amber, red and blue, because confusing Stop with Restart costs a live session. Elsewhere the accent is reserved for the one action a view is about, instead of every button being filled
  • The portal is now usable on a phone. It was a fixed desktop canvas that silently discarded anything past the window edge — at 900x600, four of the six tabs could not be reached at all. Pages scroll, cards size to their content, and touch targets are at least 44px
  • The portal can be installed as an app, from Account menu → Install as App. Over plain HTTP it explains why installing is unavailable instead of silently missing. Its service worker deliberately caches nothing; it only replaces the browser error page when the manager is down
  • The portal now meets WCAG 2.1 AA for contrast. The muted text, the amber deltas, the status pill, the accent and Sign out were all short. The scrolling lists are keyboard-reachable and the unlabeled controls have labels
  • A running server is now adopted instead of launched over. Kill Uplink outright and the game server keeps running; a fresh start used to report "stopped" and launch a second one on top of it. Only the console output is lost, so player names and the loaded world stay unknown until the next restart
  • Only one manager may own a server. A second copy pointed at the same folder says who has it and leaves the game alone, rather than running a second scheduler, watchdog and restart engine against it. The claim covers installs upgrading from the old name too
  • Restart, Stop, Update and Stop Uplink now ask when to take the server down. Icarus cannot be told to save on demand, so stopping at a bad moment discards everything since its last autosave. With players online you can go now, wait for the next autosave, or wait until everyone logs off — cancelable at any point
  • The restart countdown is now a setting, under Settings → Automation → Warn at. It was only editable by hand in config.json
  • Fixed: Settings → Automation refused the restart times its own example showed. It wanted cron expressions. Times now work, and cron still does
  • Restoring a backup that is no longer there now fails in the dialog. The list goes stale whenever a backup is pruned; restoring a pruned archive used to start an operation that then failed, which reads like the restore went wrong rather than never began
  • Every alert now says what set it off — which operator and from where, or which automation, down to the schedule that fired it
  • Everything that takes the server away now says so before it happens. Automated restarts, updates, backup restores, self-updates and crashes were all silent or indistinguishable from each other. A restart now says it is coming back, a crash says whether recovery will retry, and a canceled restart is withdrawn
  • Changes to the manager itself are announced too — accounts, roles, API tokens, password resets, Steam credentials and failed sign-ins. Failed sign-ins are grouped per address, not per attempt
  • A channel that has stopped delivering is reported through the ones that still work. A revoked webhook or expired app password looks exactly like a quiet week. Free disk space is now watched continuously rather than only before a game update
  • Fixed: the warning that auto-recovery had given up never arrived. Everything crash-related shared one debounce key, so the crash-storm message was dropped as a repeat of the crash that caused it. Crashes on a server with recovery switched off are now reported one by one too
  • Alerts can report a manual restart as a single message rather than a separate stop and start, sent once it has actually happened. New events are off until you tick them
  • The dashboard knows which world is loaded. It read a field Icarus never fills in, so a server running a world showed "In lobby" all session. It also says when it last checked for a game update and whether one is waiting, and Recovery now reads Armed, Off or Halted rather than always claiming Armed
  • The update check runs whether or not auto-update is on, so you are told about new builds even when you install them by hand. Set the interval to zero to stop it reaching for Steam entirely
  • Settings was reorganized. Updates and Portal & Startup are their own boxes; HTTPS and Start game on boot were previously only editable in config.json. Passwords & Login duplicated two other screens and is gone
  • Manage Users shows Last seen as well as Last login, so an account used daily through a remembered device or an API token no longer looks dormant
  • The portal explains itself. Hover hints on the dashboard facts, the state chip, the charts and every alert event, and clipped text can be read in full by hovering
  • You can rename a world and change its difficulty and hardcore flag after creation. Icarus offers no way to revisit any of the three. The server must be stopped first, and a backup is taken automatically. Renaming makes Icarus treat it as a new prospect, so anyone with workshop items in transit must rejoin
  • The Worlds tab shows what each world actually is — its map, difficulty and hardcore flag, not just a name and a date. Creating one now offers the 95 documented prospects by their in-game names instead of asking you to type an internal key

v1.0.0-beta.9

BetaAugust 19, 2026
  • Setting up Discord alerts is now explained where you do it. Settings → Alerts opens with the four steps — open the channel's Edit Channel → Integrations → Webhooks, create one, copy the URL, paste it into a new channel and press Test — so you no longer have to go and find out what a webhook URL is or where Discord hides it
  • The rest of the alert system finally has a UI. ISM has always been able to send alerts to several destinations at once — several Discord webhooks, a plain JSON webhook for your own tooling, and email over SMTP — but nothing in the portal could set them up, so it was a config-file-only feature that nobody knew was there. Settings → Alerts now edits the whole thing: add and remove channels, tick which events go to them, and test each one individually. Which events reach which channel is now your choice rather than all-or-nothing
  • Email alerts to Gmail or Outlook without looking anything up. Add channel now offers Gmail and Outlook.com alongside a plain SMTP option: pick one and you are asked for your address, an app password, and where the alerts should go — ISM knows the server and the port. The setup steps are printed in the form itself, including the part that catches everybody out, which is that both services reject your ordinary account password and want an app password generated after two-step verification is switched on. Personal Outlook.com, Hotmail and Live addresses are covered; a Microsoft 365 work or school account uses a different server, so it goes through the plain SMTP option
  • Fixed: port 465 never worked for email. It was offered in the form and named in the documentation, but the underlying send always opened the connection in plaintext and only upgraded if the server asked — which a 465 server never does, because it expects encryption from the first byte. Anyone who configured it got a channel that saved cleanly, passed validation, and then timed out on every alert. Implicit TLS is now handled properly, so 465 works as documented. Email also gained a connection timeout: a mail server that accepted the connection and then went quiet used to hold a delivery open indefinitely
  • Your mail password is now protected by what actually happened, not by a guess. ISM used to refuse to authenticate on anything other than ports 587 and 465, on the assumption that other ports are unencrypted — which blocked working setups on unusual ports while proving nothing about the ones it allowed. It now checks whether the connection it got is genuinely encrypted, and if it is not, the delivery fails with a plain explanation instead of quietly sending unauthenticated
  • Email alerts now carry the headers a mail server expects — a date, a message id, and a declared UTF-8 character set. Without the last of those a player name that is not plain English arrived as gibberish, and a message missing the first two is scored as spam by most filters, which fails in the same way as never sending it
  • Alerts can ping you. A Discord embed notifies nobody on its own, which is exactly wrong for a crash at four in the morning. Each Discord channel takes an optional mention — @here, or a role — and ISM adds it to the alerts worth waking up for: crash, unresponsive, low disk, failed backup, and a ban that is not being enforced. Everything else still arrives quietly, because a channel that pings on every player join is a channel you mute, and a muted channel costs you the alerts you set it up for. The Test button pings too, so you can prove it works without waiting for a real incident
  • Player joins and leaves are no longer swallowed. Repeat alerts are held for five minutes so one incident cannot flood a channel, but that window was applied per *kind* of event rather than per player — so when three people logged on together you were told about the first and never heard about the other two. Joins and leaves are now counted per player. Emptying the roster when the server stops still reports as one event rather than one message per player
  • A failed alert is retried instead of lost. A single network blip, a moment of Discord rate-limiting, or a mail server that was briefly busy used to discard the notification entirely — usually the crash alert the whole feature exists for. Deliveries are now attempted three times with a short back-off, and a rate-limited one waits exactly as long as the server asks. A revoked or mistyped webhook still fails immediately and says so: repeating a 404 only delays the report you need
  • Every channel shows whether it is actually working. Delivery failures were reported to the console, where they scroll away — so a webhook revoked last Tuesday looked exactly like a healthy one until somebody pressed Test. Each channel now carries its own record: when it last delivered, how many alerts it has sent, and the last error if there was one
  • The Test button now sends what a real alert sends. It posted a plain text message while almost every genuine alert posts a formatted embed, so a passing test proved less than it appeared to. Both go through one code path now
  • The old single-webhook setting is gone, folded into the channel list on first start with every event ticked so nothing you relied on stops arriving. It was a second delivery path with different rules — it ignored your event choices entirely — which had to be explained everywhere alerts were described. Nothing to do by hand
  • A channel that could never deliver — a webhook with no URL, an email with no recipient, credentials on a port where they would be sent in the clear, a mention on a channel type that cannot render one — is refused when you save it instead of being stored and looking configured. Saving no longer wipes a stored SMTP password: the form is never shown the password, so it can no longer hand back the blank as though you had cleared it
  • Adding your first channel ticks every event, and a channel list with no events ticked says so plainly rather than sitting there sending nothing
  • Fixed: a color given without its leading # silently fell back to the default instead of being used
  • Installing the server and restoring a backup now show progress instead of a popup. Both start work that runs for minutes and both used to answer with a message that vanished after six seconds — "Install started — watch the Terminal" — leaving you to guess whether it was still going. They now open the same progress dialog that Start, Stop, Restart and Update use: the current step, the download bar, a tail of the console output and, at the end, a plain statement of what happened. The initial install also draws the real dashboard behind the dialog once it finishes, instead of leaving the setup screen up until you reload
  • The download progress panel is in the middle of the window, not tucked into the bottom-right corner where it was easy to miss entirely. It also stays out of the way while the progress dialog is open, since that dialog now shows the same download in its own bar rather than repeating it — as do the "Server Started" and "Server Stopped" popups, which used to land on top of the dialog that was already reporting them
  • A download that cannot report a percentage says it is in progress rather than showing 0%. SteamCMD reports no ratio at all until it has worked out what it is fetching, and a bar pinned to the left edge for that stretch is indistinguishable from one that has stalled. Both the portal and the first-run installer now sweep the bar and say "in progress, please wait" until a real percentage arrives
  • The settings dialogs were wasting most of their width. Every setting used to get a box half the dialog wide whether it held a file path or the number 8, so a handful of controls filled a tall column of mostly empty space. Values are now sized to what they hold with the unit beside them, and settings that belong together share a line: Automation is grouped into Restarts, Watchdogs and Updates and is about half its former height, the three ports sit on one line under Server & Network, Backups & Storage reads "Backup every 30 min, keep 10", and the Server Access passwords, the SMTP host and port, and the Game Settings file picker are packed the same way
  • CPU and memory now say what they are measuring. Host Monitoring drew whole-machine CPU beside a RAM line that quietly switched to the game's own memory the moment the server started — two charts under one heading, measuring two different things, with no way to tell which was which. Both charts now draw both: a solid line for the machine and a faded dashed one for the dedicated server, with the two words in each chart's label acting as the key, and the current figures reading 22% · srv 8% and 17.0 / 32 GB · srv 5.0. The server's line appears only while it is running, so a stopped server leaves no flat line along the floor pretending to be a measurement
  • The memory watchdog now judges the server's memory in every case. It always meant to, but when the game's process could not be read for a moment it silently fell back to the whole machine's usage — which on a busy box could reach a hard ceiling the game was nowhere near. A reading it could not take is now treated as exactly that, and no threshold matches it
  • The long-term calendars record host and server separately. Each day now stores the machine's CPU and memory and the server's own, and the server figures average only the time the server was actually up — an evening outage used to be folded in as hours of near-zero memory use, which read as a quiet day rather than a missing one. The CPU calendar is labeled *host* and the RAM calendar *server*, which is what each has always recorded; history written before this change is stamped as pre-split and read as it always was, so nothing re-shades and nothing goes blank. Days the server never ran no longer count as its quietest day either — an unmeasured day used to drag the shading scale down and flatten every real one into the same color. Hovering a day now reports all four figures, and says plainly when the server did not run that day
  • The Worlds tab shows more of your saved prospects. Server Behavior sat above the list as a tall stack of settings, each with a column-wide box holding a player cap of 8 or a delay of -1, and a restart note and Save button on a strip of their own below. Labels now sit beside boxes sized to the number they hold, the six settings are grouped as Players and World lifecycle side by side, and the note and Save ride in the panel's title row — the panel is around a third of its former height at any window width, and every pixel it gave back is a row of the world list. Operators, who see the same settings read-only, get the same layout instead of a table. Every setting on the tab also carries the same ⓘ hint the Settings dialogs use, written out properly: what the setting does, what Icarus calls it, what it defaults to, and what -1 means — including the read-only panel, which had no hints at all, and the New world dialog

v1.0.0-beta.8

BetaAugust 18, 2026
  • The long-term history shows all three metrics at once. Players, CPU and RAM sat behind tabs, so you could only ever look at one of them — while the calendar filled barely half the card, because six months of days is only about 26 columns wide. All three now sit side by side, sharing one weekday column and sized to the width the card actually has, each in the color that metric already uses elsewhere in the portal

v1.0.0-beta.7

BetaAugust 18, 2026
  • A redesigned portal. The dashboard's four full-width action bars and eight stat cards have been replaced by a server hero: your server's name, world and build with a status light, the live facts (uptime, players, recovery), compact color-coded controls that disable when they don't apply (Start while running, Stop while stopped), and a quiet utility row with the portal addresses and last backup. The CPU/RAM charts grew proper axes, gridlines, a time range selector and auto-scaling instead of a bare line in a 0–100 box; the player panel shows avatars, join times and a slot-occupancy bar; the activity feed color-codes events by severity. The Players tab now fits the window — its four lists scroll inside their cards (with the header row pinned) instead of growing the page. Portal-wide: bundled Inter and JetBrains Mono fonts (numbers, addresses and timestamps are monospaced everywhere), a consistent set of drawn icons replacing the old mixed text glyphs, and a subtle refresh of the header, cards and both themes. Same colors, same layout logic — everything is where it was
  • Automatic restarts no longer throw away your progress. Every stop used to kill the server outright, losing everything since the last autosave — up to ten minutes of play, and a risk of a half-written save. Icarus has no save command and takes no instructions from outside the game, so ISM now watches the save files instead: a scheduled, watchdog or update-driven restart waits for the game's own autosave to land and finish writing, then stops immediately afterward. The dashboard shows "saving…" while it waits. Skipped when nobody is online; adjustable or disable-able under Settings → Automation
  • The Stop and Restart buttons deliberately do not wait for a save. Icarus autosaves every 10 minutes by default and cannot be asked to save on demand, so waiting would leave those buttons apparently hung for minutes; if you press one, you are told what will be lost and it happens immediately. The unattended restarts — the ones that fire at four in the morning — are the ones that wait. For the same reason, a countdown that will be followed by a save wait now says "restarting in N minutes, then as soon as the world has been saved" rather than naming a time it will not keep
  • The server is now asked to shut down before it is forced. ISM sends a real shutdown request first and only force-stops if the server has not exited within 45 seconds. The console says which happened, so you can see for yourself whether your Icarus build honors it — RocketWerkz document no shutdown mechanism, so the force-stop remains the guaranteed path and nothing is worse off than before
  • The server is watched for hangs. A dedicated server that is still running but has stopped answering Steam queries — the classic freeze — was invisible: the memory watchdog cannot see it and crash recovery never fires because the process never exits, so the server stayed down until somebody noticed. ISM now alerts and restarts after 10 minutes of silence (configurable, 0 turns it off). The restart is immediate, without the usual countdown or save wait: a frozen server can't show players a warning and writes no autosave worth waiting for. It only fires when players were online as the server went quiet — a real freeze takes its players down with it, while an empty server that stops answering has most likely just unloaded the world and dropped to the lobby (Icarus does this 5 minutes after it empties, by default), and restarting it for that would loop forever. A quiet skipped case is noted in the console instead
  • A memory ceiling that works on a busy server. The RAM watchdog only ever acted on an empty server, so a server that never empties could leak until Windows killed it. You can now set a hard ceiling that restarts regardless of who is online, with the usual countdown first
  • New Worlds tab. See every saved prospect, which one the server will load next, and switch between them without hand-editing an .ini file. You can also queue a brand-new world (type, difficulty, hardcore, save name) for the next start; once it has been generated, ISM points the server back at it automatically, so later restarts load the new world instead of re-running the creation or dropping to the lobby. Switching worlds needs a restart — Icarus only reads this at startup — and the portal says so rather than pretending otherwise
  • Server behavior settings you could previously only reach by hand. Max players, whether players may launch or delete worlds, and the two lobby-return timers. Those timers matter more than they look: Icarus ships with ShutdownIfEmptyFor=300, so five minutes after your server empties the world unloads and drops to the lobby. Set it to -1 for a 24/7 server
  • Backups now include your server configuration, not just your worlds. ServerSettings.ini, Game.ini, Engine.ini, the ban list and the auto-admin list travel with each archive, so a rebuilt machine can be brought back as it was. Restoring them is a separate tick-box, off by default — restoring yesterday's world should not silently restore yesterday's passwords and un-ban everyone banned since. Because the archive now carries the in-game admin password and the admin list, downloading a backup and restoring its configuration are admin-only; operators can still create, delete and restore worlds
  • ISM can now check for its own updates on a schedule. A "Check for ISM updates" tick-box under Settings → Automation makes ISM look for a new release once a day and download it in the background, verified against its published checksum, so it is ready the moment you want it. Installing is never automatic: an admin still confirms it, because applying an update restarts ISM and the game server with it. ISM continues to check once at startup whether or not this is on, and the release it checks is fixed in the program — the tick-box cannot be used to point ISM's updater at some other download
  • Alert channels can be tested. A Send test button next to the Discord webhook delivers a real message and shows the real error if it fails. Previously a mistyped or revoked webhook was indistinguishable from a working one until the crash you needed it for; failed alert deliveries are also now reported in the console instead of being discarded
  • Removed the Console command box's backing endpoint and the fake restart broadcasts. Neither ever did anything. ISM wrote both to the server's standard input, which Icarus does not read — so commands typed into the portal were discarded while the UI echoed them back, and the countdown logged "broadcast: restarting in 10 minutes" to players who never saw it. The Console is now honestly a read-only log view; countdown warnings still reach Discord and your other alert channels, which do work
  • Hardened the portal against cross-site requests: state-changing calls now also verify the browser's stated origin, which matters for portals published to the internet with a domain certificate. Every action endpoint additionally accepts only its intended HTTP method, so a plain link, image tag or typed URL can never trigger a restore, a restart or a stop. Portals published behind a reverse proxy that rewrites the Host header are now recognized via X-Forwarded-Host instead of rejecting every write from older browsers
  • Bans now actually work. They are written straight into Icarus's own ban list (Icarus/Saved/PlayerBanList.txt), which the dedicated server enforces by itself. Bans an admin issues in-game with /BanPlayer show up in the portal too, and can be lifted from there. Any bans you had in the old ISM ban list are moved across automatically on first start
  • Server Admins section on the Players tab: manage the game's auto-admin list as a list of Steam IDs instead of hand-editing a text file. Anyone on it gets admin the moment they join, without typing /AdminLogin in chat. "Make admin" is available straight from the roster and player history. Because an entry grants full in-game admin, changing this list needs the ISM admin role — operators can see it but not edit it. Comments and unrecognized lines in the file survive ISM's edits
  • Removed the Kick button and the Allowlist. Neither ever worked. ISM sent them as console commands on the server's stdin, but Icarus reads no commands there — its admin commands only exist as in-game chat commands — so nobody was ever kicked and no allowlist was ever enforced. Icarus has no whitelist mechanism to replace it with: to make a server private, set a Join password under Settings. A leftover allowlist.json is no longer read and can be deleted
  • A ban now requires the player's 17-digit Steam ID, because that is what Icarus matches on. Name-only bans are refused rather than accepted and quietly ignored
  • Icarus only reads its ban list when the server starts, so until the next restart a banned player can still connect. ISM now says so loudly: banning someone who is online warns you they can keep playing, and if a banned player joins before that restart it lands in the console, the Activity log, and your alert channels
  • Config files saved by a Windows editor as "UTF-8 with BOM" (Notepad's default suggestion) are now read and written correctly. Previously the invisible marker made ISM show default settings instead of your real ones and refuse every edit to the file with a baffling "line 1" error

v1.0.0-beta.6

BetaAugust 15, 2026
  • Allowlist: turn your server private with one switch. While it is on, only players you have listed may play — anyone else is kicked the moment they connect, and turning the switch on clears out anyone already online who is not on the list (the portal tells you who went). Entries match on Steam ID or name, a ban always beats an allowlist entry, and the whole thing survives restarts. Removing someone from the list kicks them right away if they are playing
  • Player History: ISM now remembers who has played on your server. Every visit is recorded when a player leaves, building a per-player total playtime, visit count, and first/last seen — so you can see who your regulars are long after they log off. Players online right now show their current session in the total, and you can ban, allow, or forget any of them from the same table
  • Fixed: the player roster kept showing everyone who was online when the server restarted or crashed, until they next joined. The roster is now cleared whenever the server process ends
  • New Players tab: see who is online with live playtime, kick a player, and keep a ban list. Icarus has no ban list of its own, so ISM keeps one and kicks a banned player every time they connect — bans survive ISM restarts, can record the player's Steam ID so a rename doesn't defeat them, and show how often they have turned someone away. Banning someone who is online removes them immediately; lifting a ban lets them straight back in. Every ban, unban, kick and blocked join is recorded in the admin Activity log, and blocked joins raise an alert

v1.0.0-beta.5

BetaJuly 8, 2026
  • ISM can now update itself: it checks GitHub Releases on startup and periodically, prompts admins in the portal when a new version is out, and a one-click Apply downloads the new binary, verifies its SHA-256 checksum, swaps it into place, and restarts ISM (both as a Windows service and in foreground mode) — a running game server is stopped gracefully first and brought back up afterward. Individual releases can be skipped; the prompt stays quiet until something newer appears
  • Steam account sign-in is temporarily disabled while account-login issues are sorted out: all downloads/updates run anonymously (base dedicated server, no add-on content), and the Steam account sections in Settings and the installer are hidden
  • Steam update checks are more trustworthy: SteamCMD's metadata cache is cleared before every check and the installed build is compared against Steam's live published build id, with a retry on mismatch — a stale "already up to date" can no longer skip a real update
  • Double-clicking Start can no longer launch the server while the first click's pre-launch update check is still rewriting game files
  • A failed Steam update during a scheduled restart or the Update button no longer leaves a previously-running server offline — the relaunch proceeds on the currently-installed build
  • Settings tab: set the server Join password (gate who can connect) and the in-game Admin password directly, without hand-editing ServerSettings.ini
  • Restoring a backup now snapshots the current saves first (a -pre-restore backup), so a mistaken restore can itself be undone
  • Fixed: restoring a backup while the server was running left it stopped — the relaunch fired while the process was still shutting down and was silently rejected; the restore now waits for a full stop and reliably brings the server back up
  • Backups are integrity-checked (per-file CRC) at creation and again before a restore; a corrupt archive aborts the restore with the server untouched
  • Scheduled-restart countdown warnings (10/5/1 min) are now sent to Discord/alert channels
  • Settings saves now send only the changed fields, so two admins editing different settings no longer overwrite each other (also fixes hide_native_terminal being silently reset to true on every save)
  • The ACME HTTP-01 challenge listener on port 80 now shuts down cleanly with ISM

v1.0.0-beta.4

BetaJune 25, 2026
  • Fixed Steam Login
  • Start server now checks for updates before launching (Validates, not from cache - more accurate but slower)

v1.0.0-beta.3

BetaJune 25, 2026
  • Many Linux install issues
  • Enabled Steam Accounts
  • Formatting in Settings adjusted

v1.0.0-beta.2

BetaJune 13, 2026
  • Re-release of v1.0.0-beta.1 after its download assets failed to publish. ISM itself is unchanged

v1.0.0-beta.1

BetaJune 10, 2026
  • Initial public beta release — active development, not all features are stable or complete
  • Browser dashboard for starting, stopping, and watching an Icarus dedicated server
  • Default web dashboard port updated in docs: 18000
  • Default Icarus ports called out clearly: game 17777, query 27015
  • Crash auto-recovery for the server process
  • RAM and disk guards with thresholds you configure
  • Scheduled local backups with a rolling history
  • Metrics history and configurable log retention
  • In-browser game config editor for ServerSettings.ini, Game.ini, Engine.ini, and the admin list
  • Optional SteamCMD updates, alerts via Discord, email, or webhook, TLS, and service mode
  • Admin account setup with operator/viewer roles available for trusted players
  • Offline password reset for lockout recovery
  • Windows support, with unofficial Linux builds available at your own risk