Documentation
The short version for getting your server under control.
Quick start
From a downloaded app to a managed Icarus server, as fast as possible.
- Download — take the latest Windows build from the download page. Linux builds exist because Uplink is written in Go, but they are unofficial and use-at-your-own-risk.
- Run it on the Windows machine that hosts your Icarus
dedicated server, then open
http://localhost:18000, set the admin password and point Uplink at your server folder. - Work through the setup wizard — server path, Steam update preference, ports, and the automation you want.
- Turn on the automation you actually want. Crash recovery, backups, metrics, log retention, auto-update and alerts are all off or conservative until you choose otherwise.
# Windows uplink.exe
The wizard covers the path to your Icarus dedicated server, whether Steam
updates are manual or automatic, the three ports, your restart and backup
schedule, alert channels, and the in-browser editor for
ServerSettings.ini, Game.ini, Engine.ini
and the admin list.
Everything is saved in a human-readable config.json next to the
executable. Edit it directly if you prefer.
Alerts
Uplink can tell you when your server crashes, hangs, runs out of disk, restarts or finishes a backup, without you watching the dashboard. Discord is the quickest to set up.
Discord in four steps
- In Discord, open the channel you want the alerts in, then Edit Channel → Integrations → Webhooks.
- Click New Webhook, name it (Uplink, say), and press Copy Webhook URL.
- In Uplink, go to Settings → Alerts, press Add channel, paste the URL and press Test — a message should appear in that channel within a second.
- Tick the events you want and press Save.
Creating a webhook needs the Manage Webhooks permission on that channel. The URL is a credential: anyone holding it can post to your channel, so treat it like a password and keep it out of bug reports and screenshots.
If the test fails, Uplink shows you Discord's own answer rather than a generic error — a revoked or mistyped webhook comes back as 401 or 404. The test sends the same embed a real incident sends, through the same code, so a channel that reports success is a channel that will work when it matters.
Getting pinged for the things that matter
A Discord embed never notifies anybody on its own, which is exactly wrong
for a crash at 3am. Each Discord channel has an optional Mention on
critical alerts box — put @here or a role mention such as
<@&123456789> in it, and Uplink pings for the alerts
worth waking up for: crash, unresponsive, low disk, backup failed, a ban that
is not being enforced, and another copy of Uplink already owning your server.
Everything else arrives quietly.
This is deliberately not applied to every alert. A channel that pings on each player join gets muted, and a muted channel costs you the alerts you set it up for. The Test button does ping, so you can prove the mention works without waiting for a real incident.
More than one destination
Add as many channels as you like and choose which events reach each:
- Discord — a second webhook, so crashes go to a staff channel while player joins go to a public one
- Email — Gmail and Email — Outlook.com — presets that ask only for an address and an app password
- Email — other (SMTP) — any other mail server: host, port, credentials, sender and recipient
- Webhook (JSON) — any HTTPS endpoint. Uplink POSTs
{"trigger":…,"message":…,"title":…,"description":…}for your own tooling, a status page, or a bridge to another chat service
Each channel has its own Test button and is checked when you save — a webhook with no URL, or an email with no recipient, is refused rather than stored looking configured. Each also shows its own delivery record since Uplink started, so a channel that has been quietly failing is visible without pressing Test on it.
Email alerts
Email goes out over SMTP. Gmail and Outlook.com have presets, so you do not have to look up a server name and a port.
Gmail. Turn on 2-Step Verification at
myaccount.google.com/security — Google does not offer app
passwords without it. Create one named Uplink at
myaccount.google.com/apppasswords and copy the 16 characters. In
Uplink, Add channel → Email — Gmail, then enter your address, that app
password, and where alerts should go. Use the app password, not your account
password; Google rejects the latter outright. Alerts arrive from your own
Gmail address, because Gmail refuses to send as anybody else.
Outlook.com. Turn on two-step verification at
account.microsoft.com/security, create an app password under
Advanced security options, and enter it the same way. Microsoft has
been steadily retiring password-based mail access for personal accounts — if
the test returns an authentication error, that account most likely no longer
permits it, and Gmail is the easier route. The Test button tells you either
way, rather than leaving you to find out during an incident.
Any other server. Enter the host and port yourself. Uplink will not send a password over an unencrypted connection: if the server offers no TLS at all, delivery fails and says so rather than putting your password on the wire in the clear. A server needing no credentials works too — leave the username blank.
Alerts are sent as plain UTF-8 text with a proper date and message id, so a player name in any alphabet arrives intact and the mail is not scored as spam for missing headers.
What can be sent
Each carries a hint in the portal saying exactly what fires it. Events added in a later release arrive unticked, so an upgrade never starts sending you something you did not ask for.
A failed delivery is retried twice before it is given up on, and a rate-limited one waits as long as the server asks. Repeats of the same event are held for five minutes so one incident cannot flood a channel — but joins and leaves are counted per player, so a group arriving together is reported in full.
Upgrading from an older Uplink
Earlier versions had a single Discord webhook box that received every event regardless of your trigger settings. On first start it becomes an ordinary channel with every event ticked, so nothing you relied on stops arriving, and you can narrow it down like any other channel. Nothing to do by hand.
Stopping and restarting
Icarus cannot be told to save on demand, and it autosaves every ten minutes by default — so a stop at the wrong moment discards everything since the last one. Whenever players are online, Restart, Stop, Update and Stop Uplink ask when to take the server down:
- Now — the countdown runs, then the server goes down
- After the next save — Uplink watches the world files and stops once an autosave has landed and finished writing, within the budget set by Settings → Automation → Wait for a save
- When everyone has left — waits for the roster to empty and the world to be written. This one has no time limit, because bounding it with a timer would mean stopping a populated server. Cancel it whenever you like
If nobody is playing, or the server is sitting in the lobby, there is nothing to hold for and you get a plain confirm instead. The dashboard shows which wait is running, so a stop that takes minutes does not read as a hang. Automated restarts — scheduled, watchdog and update-driven — always wait for the save, since those are the ones that fire at four in the morning.
Players cannot be warned in-game; Icarus exposes no way to say anything to them. The countdown warnings go to your alert channels, and how far ahead they start is Settings → Automation → Warn at.
The server is asked to exit before it is forced, and force-killed only if it has not gone within the timeout. If Uplink finds the game already running when it starts — after a power cut, or a kill from Task Manager — it adopts that process instead of launching a second one. Only the console output is lost, so player names and the loaded world stay unknown until the next restart.
Bans and in-game admins
Uplink edits the two lists Icarus itself reads, on the Players tab:
- Bans go into
Icarus/Saved/PlayerBanList.txt— the same file/BanPlayerwrites, so bans made in-game appear in the portal and can be lifted there. A ban needs the player's 17-digit Steam ID, because that is what the server matches on; a name alone enforces nothing - Server admins go into the auto-admin list, so anyone on it gets
admin as they join without typing
/AdminLogin. Because an entry grants full in-game admin, editing it needs the Uplink admin role
Icarus reads the ban list only at startup, so a ban does not take effect until the next restart. Banning someone who is online says so, and if a banned player connects before that restart it reaches the console, the Activity log and your alert channels.
There is no kick button and no allowlist, and there never usefully was one: Icarus takes no commands from outside the game, so anything Uplink sent it was discarded. To close a server off, set a join password under Settings.
Keeping Uplink updated
Uplink checks GitHub for a newer release at startup and, if you tick Check for Uplink updates under Settings → Updates, once a day. The download is verified against its published SHA-256 before anything is swapped in, and installing is always confirmed by an admin — applying an update restarts Uplink and takes the game server with it.
Game updates are separate: Uplink checks Steam for a new build on a schedule whether or not auto-update is on, so you are told about a patch even if you install it by hand. Set the check interval to zero to stop it contacting Steam at all. Your config, users, backups, logs and certificates survive an upgrade untouched.
Command line
# Run in the foreground (default) ./uplink # Show the native game console window (Windows) ./uplink --console # Run under the service manager ./uplink --service # Register the Windows service (run as Administrator) ./uplink --install # Uninstall, start, stop the service ./uplink --uninstall ./uplink --start ./uplink --stop # Stop every Uplink process (emergency stop) ./uplink --stop-uplink # Offline password reset (lockout recovery) ./uplink --reset-password admin
Production deployment
For an always-on server, run uplink.exe --install as
Administrator to register the Windows service. It starts before any user logs
in. Linux hosting is not officially supported — use it only if you are
comfortable troubleshooting it yourself.
TLS is off until you enable it. Keep the dashboard on your LAN, a VPN or a trusted network unless you have secured it properly.
Bug report diagnostics
Good reports are much faster to fix. Before filing one, collect:
- The Uplink version and your host operating system
- Whether Uplink is running by hand or as a Windows service
- The last 50–100 lines of the Uplink log around the failure
- Steps that reproduce it, or what changed right before it happened
- Screenshots, if the problem is visual or about displayed status
Check the release notes first, then open a report. Linux reports are welcome as community feedback, but Linux is not an officially supported target.