About the Game
You don't manage a datacenter from a spreadsheet. You walk it.
Uptime puts you on the floor of your own cloud provider, first person, hands on the hardware. You buy the servers and carry them to the rack. You seat them with a click. You run the cable off the spool yourself, find the port, watch it lay across the floor, and power the thing on. Then you sign your first customer and find out whether any of it holds.
Underneath the floor is a real simulation. Every server, switch, cable and port is a live entity in a deterministic engine, and the network genuinely switches and routes traffic across it. Power and cooling are budgets you can blow. Capacity is hardware that fills up. When something breaks, it breaks because the model says it should, and the fix is usually the one a real engineer would reach for. That was the whole goal: a build-it-with-your-hands tycoon sim that still holds up if you do this for a living.
Get it running, then keep it running. The moment traffic arrives, the simulation starts pushing back.
You're running the cloud, not a server room.
You own the full stack. The metal, the network, the services you sell, and the customers whose product lives on your kit. You're the thing they build on, so everything running on you is yours to keep alive, from the single box in the garage to a floor other companies depend on.
Your customers bet their business on you.
The tenants have names, and they hand you their product expecting it to stay up. Reputation is the currency underneath all of it. You earn it slowly and you can lose it in one bad night, and the bigger the customer, the harder that fall lands. Sign a deal you can't carry, pack one host too tight, sleep through an SLA breach at 2am, and the cost isn't only the money. It's the trust that was about to send you the next customer.
So every yes is a wager on whether you can carry the new weight without dropping what you already hold. Turning business away is sometimes the correct call. The tenants you keep won't sit quietly either. They surge, they haggle, they show up with deadlines. Keep them happy and they say so out loud, and they bring friends.
What you sell is infrastructure you actually run.
Customers don't rent "a server." They spin up the things a real cloud sells: virtual machines, object storage, managed databases, Kubernetes, load balancers, serverless functions. Each one is a service you operate. Behind every service is a control plane you have to keep alive and an agent on each host that does the work, and all of it competes for the same compute your customers are paying for.
That's where the network grows teeth. Cut a service off from its control plane and it starts to fail. Lean on one too hard and it buckles. Capacity runs out, the network can partition the very services you're selling, and the way you lay it all out is what separates a provider that holds from one that tips over.
The simulation is the game.
This is where the word "simulation" gets earned. Every device on your floor is a real entity in a deterministic engine, and every LED you see is reading its live state. A link saturates because the math saturated it. A rack goes dark because a fault domain you never thought about turned out to be a single point of failure.
Ports, cables, power draw, fault domains, oversubscription, link aggregation, spanning tree, BGP, mean-time-between-failures. These are the model, not labels stuck on a progress bar. Cable a redundant link the wrong way and spanning tree either saves you or, if you got it backwards, the whole floor drowns in a broadcast storm. You can ignore the depth and still win. You can also lean all the way into it.
The customers talk to you.
They live in a chat channel that reads like the ops Slack you've spent years in. They onboard, ask for more capacity, complain when latency spikes, and tell you in their own words when the change you made three minutes ago just took their service down.
Incidents don't ship with severity tags attached. Severity comes out of how many customers you're hurting and how badly. A flapping link nobody depends on is a shrug. That same link under your biggest tenant is a page in the middle of the night.
Two ways to read the same machine.
Never touched a rack? NPC mentors walk you in, and one key toggles jargon mode, flipping the whole interface between plain language and the real terminology over the exact same systems. "Spread these across separate failure zones" and "fix this single-AZ SPOF" are the same instruction. You pick up the real words by playing instead of reading a manual. Already know what oversubscription costs you? The depth was there the whole time. Turn the training wheels off.
Set the difficulty. The hard runs won't let you off.
One difficulty setting, Easy, Standard or Hard, re-tunes the entire simulation from a single neutral baseline, and you can move it mid-run. Push it up and the reputation ledger turns crueller: slower to earn, quicker to lose, less willing to forgive an incident. The authored hard scenarios set their own floor, so the slider can make them tougher but never softer.
Garage-to-Glory is one story, not the only one.
The campaign takes you from a single server in the garage to your own data center floor, growing through a basement build-out and into a room you fill and defend. That's one scenario. Run the hard-mode variant. Survive Data-Loss Day. Hold the line through Under Attack. Or drop into open sandbox and build with no rails at all. Scenarios are plain, readable files, so the community can write their own starts, disasters and constraints and drop them straight in.
This is Early Access. The data center floor is built to grow: add rows and cages to expand it, spread your customers across separate zones, and build real multi-region resilience by hand. More hardware, bigger scenarios and hyperscale scale are on the road ahead.
For the engineers.
You already know whether we mean it. Here's what's under the hood:
Typed ports and cables, with real LAG / link-aggregation across member links
Managed L2 and L3 switches forming an actual switching fabric, not one abstract "network" stat
RSTP that converges, elects a root bridge and blocks redundant ports; loop the network and it storms
Oversubscription that bites when you cheap out on uplinks
Fault domains and single points of failure that are computed, not painted on
Reachability chains from host to switch to demarc to uplink, gating every allocation
Every service split into a control plane and per-host data-plane agents; partition them and it goes headless
Power draw and wear modelling, so hardware ages and degrades instead of tripping a random death timer
Capacity modelled as workload shapes fitting host shapes rather than a scalar bar
Reputation as an asymmetric ledger, with a capacity-fit check before you ever sign
A deterministic engine: same seed, same run, every time, headless-testable and replay-stable
Built honestly.
A deterministic Rust engine runs the simulation, and the renderer only ever shows you what the engine already decided. Nothing gets faked for the camera. Scenarios and mods are human-readable files. Windows, macOS and Linux from day one.
Uptime is in Early Access. The full loop is here and playable now: campaign, sandbox, hard modes, and the customer and service simulation underneath them. Early Access is where the breadth grows on top of that, more places to build, more hardware, more scenarios, and steady polish across art, audio and onboarding, with the direction shaped by what players push on, the infra crowd most of all.
Features
First-person, hands-on - walk the floor, carry the hardware, run the cable. You're in the room, not hovering above it.
Cabling as a hero mechanic - run every link by hand, with typed connectors, enforced reach and bend radius, and a live edge that carries traffic. Pull it and something goes dark. The way Factorio makes belts feel good.
Customers as commitments - reputation earned slowly and lost in an instant, every signup a bet against the capacity you can see.
A real cloud to run - VMs, storage, databases, Kubernetes, load balancers and functions, each with a control plane and data-plane agents on your hosts.
A simulation that pushes back - ports, power, fault domains, spanning tree, oversubscription and BGP are the actual model.
Emergent incidents - severity comes from real customer impact, not scripted labels.
Readable for anyone, honest for the pros - one-key jargon toggle over the same systems, no manual required.
Difficulty you control - live Easy/Standard/Hard that re-tunes everything, and hard scenarios that won't soften.
Breadth of play - campaign, scenario variants, open sandbox, and drop-in community scenarios.
Deterministic and mod-friendly - same seed, same run, plain-text scenario files.
Screenshots
10 imagesVersion Information
Steam Patch Notes
Official update history
Fixed
Controls
- Moving around inside a rack works on a controller now. Stepping to the rack left or right of you, and panning up and down the one you are in, both only ever answered a keyboard. On a Steam Deck the stick did nothing at all once you were in a rack. Both now take the stick and the d-pad as well as the keys.
- Panning up and down a rack had never worked on any controller, on any platform, not only the Deck. It read the keyboard directly instead of going through your control bindings, so even a plugged-in gamepad with everything bound correctly could not move it.
- Holding the stick walks along the aisle instead of stepping once and stopping, and a stick that rests slightly off centre no longer creeps sideways through your racks on its own.
Cabling
- The cable tidy-up from v0.1.29b is more careful about what it touches. That release straightened direct runs a bug had sent down the rack's cable manager, including ones already saved in your world, and that worked. Telling those apart from a run the game had legitimately rerouted for you relies on a piece of supporting evidence, and there is a narrow case where that evidence is not available. It used to guess in favour of straightening; it now leaves the cable alone unless it is certain. The practical effect is that a few direct patches may keep their detour rather than being tidied up, which is the safer way round.
Networking
- A switch port no longer shows a live link into a machine with no power. Pull a machine's power and its own network port went dark correctly, but the switch port at the other end of the cable stayed lit, as though the link were fine. Real hardware loses the link at both ends. This also means the link-drop counter can finally record the one thing it was written for, a partner going away, which it could never do before.
- A cable between two switches at the same level in your fabric now carries traffic. If you cabled two switches together that both sit under the same switch above them, that cable read zero forever, on both ends, even though it was plugged in, powered and working. Traffic between machines on those two switches now crosses it and both ports report it.
- Machines with no network path between them stopped inventing traffic. In a datacentre split into parts with no route between them, the game credited machines in one part with traffic to machines in the other. It could not actually go anywhere, but it loaded the switches at both ends and could set off a fabric overload alert on a fabric that was doing nothing.
Attacks
- Attack traffic now splits between your routers by how much each one actually carries. Two routers fronting the same carrier device were handed an equal share of an incoming attack, no matter how much of it each one really terminated. A router carrying three quarters of the connection took the same battering as one carrying a quarter, so the small one drowned while the big one coasted. The split now follows what each router is genuinely exposed to.
- A router fronting no live line takes no attack, and the surviving router feels it. This part was already right and is unchanged; it is called out because the numbers move with the fix above. When a carrier line goes dark nothing arrives on it to filter, so the other router picks up the whole attack, absorbs what its firewall is rated for and lets the rest through. If your edge only just coped before, losing a line is when it will not.
Notes
Save compatible in both directions. A save from v0.1.29b opens here and a save from here opens on v0.1.29b, and nothing in this update changes what is stored in your world.
Attack outcomes will differ from v0.1.29b on any site where two routers front the same carrier device. Nothing else about attacks changed, no numbers were retuned, and the total attack a site receives is the same as before. Only the share each router carries is different, and it is now proportional rather than even.
Your network figures should not move otherwise. Traffic between your own machines still accounts for a bit over a third of what your datacentre carries, the same as v0.1.29b.
Multiplayer sessions need every player on the same version, as with v0.1.29b.
Added
- Your machines now talk to each other, and it shows up on the network. Until now practically all traffic in your datacentre was headed out to the internet, which is not how a real one behaves: most of what a datacentre carries never leaves the building. An app talking to its database, a database keeping its copies in step, an object store rebalancing, a content cache filling, a load balancer checking its backends and the machinery that runs your services all generate traffic between your own machines, and all of it now flows across your fabric on the real path between them.
- Where you put things now matters. Two machines on the same switch talk to each other without touching anything above it. Two on opposite sides of the room push their conversation up through the switches in between. So a chatty tenant whose database sits far from its app costs you fabric that a tightly packed one does not, and the links between your switches can now fill up on internal traffic alone.
- Different tenants are chatty in different amounts. A tenant running an app with a replicated database adds about a third again on top of its own traffic, because the app is talking to the database and the database is keeping its copies in step. A tenant running plain virtual machines barely moves. Expect the customers running real services to be the ones filling your fabric, and the ones just renting machines to be almost invisible on it.
Fixed
Cabling
- A cable from one port straight to another runs straight again. If you clicked a port and then clicked another port without clipping the run to anything, v0.1.29 sent it down into the rack's vertical cable manager and back out, rather than across. It happened to every direct patch, in the same rack or between racks, and there was no way to ask for the straight run you actually wanted.
- This was a side effect of the cable routing fix in v0.1.29, and only that. That release taught the game to recover a run whose manager lane was full, which was the right fix and is untouched here. The mistake was that a run you never routed looked identical to one the game had rerouted for you, so both got sent down the manager. Runs you clip yourself, to a finger pin, a roof hole or a rail passthrough, were never affected and still route exactly as you placed them.
Notes
Save compatible in both directions. Nothing about your world changed, only how existing cables are drawn, so a save from v0.1.29 opens here and a save from here opens on v0.1.29.
Load your save once and the direct runs already in it straighten out with it. You do not need to relay anything, and nothing else has to be done. Nothing is moved, nothing is unplugged and nothing goes down: the only change you will see is that those runs are drawn straight across instead of dipping into the manager and back out. Runs you clipped yourself are left exactly as you placed them, and so is a run the game had to reroute for you because a manager lane was full.
One small thing in your favour: a direct patch no longer takes up a slot in the rack's manager lane, because it is not using the manager, and the ones already in your save give their slot back on that same load. Those lanes fill only from runs you actually routed through them, so if you were close to filling one you now have more room than you did.
Expect your network numbers to go up, and your fabric to look busier than it did. Traffic between your own machines now accounts for a bit over a third of everything your datacentre carries, where before it was close to nothing. Nothing has been taken away from you and no hardware got worse: traffic that was always implied is now actually being carried and counted. A fabric that looked comfortably oversized may now look merely adequate, and links between switches that sat idle will show load. If a switch-to-switch link starts running hot, that is the game telling you something true about how your tenants are laid out.
That is well below a real datacentre, which runs nearer three quarters. That is deliberate for this release: your world was built when none of this traffic existed and your fabric was sized for that, so it starts low.
None of this is billed. Your customers pay for traffic leaving the building exactly as before, and internal chatter costs them nothing, so your revenue is unchanged.
Multiplayer sessions need every player on the same version, as with v0.1.29.
Added
- A Compatibility rendering option, in graphics settings on every platform. Some graphics drivers cannot run the renderer the game normally uses, and when that happens the game crashes or freezes on startup rather than falling back. A fallback did exist, but it only ever applied to a short list of older Macs, and the setting that could have reached it was only shown on Windows. It is now available everywhere. If the game will not start reliably for you, this is the first thing to try. Changing it restarts the game.
Fixed
Traffic and the network map
- Traffic travels one path now instead of being counted on all of them. When more than one core switch could carry a flow, every one of them was credited the whole flow rather than its share. With four core switches, all four claimed the same traffic, the firewall added them together, and the number arriving at your router was four times what your machines were actually sending. Two core switches gave you double. This is why every switch, router and firewall in the room seemed to mirror the same figure, and why powering a core switch on or off moved numbers in directions that made no sense.
- Redundant paths now behave like redundant paths. A flow picks one route and stays on it, so a switch shows the traffic that genuinely passes through it and nothing that does not. Different machines take different routes, which is what spreads the load. Turn a core switch off and its traffic moves to the others, and the total stays the same instead of jumping.
- A busy path stays busy. Redundant routing does not shuffle traffic away from a link just because that link is full, and neither does the game now. If one route is carrying more than its share you will see it sitting there, which is the point: it is something to notice and fix rather than something the game quietly hides from you.
- Uneven links now carry uneven shares. A 100G uplink and a 25G uplink in the same group were splitting traffic evenly, which is not how any of it works. Capacity now decides. This mostly shows up when you have upgraded part of a fabric and not the rest.
- Every port's throughput is measured rather than divided. A port used to show the whole device's total shared out across however many ports were plugged in. Four cables to two different appliances showed byte for byte identical traffic, and unplugging one of two links instantly doubled what the survivor claimed to be carrying, because the division changed and the traffic did not. A 25G port could report 47 Gbps this way. Ports now report their own link, and a device's total is the sum of its ports.
- The uplink figure on a router port matches the line it is plugged into. Those two numbers were worked out separately and only agreed by luck.
- A whole half of a datacentre could read zero while the machines under it were plainly busy. If you put a firewall in front of your router and another router behind it, the game lost track of where that half of the fabric was sending its traffic, so every switch above the machines reported nothing at all. The machines themselves showed traffic, which made it look like the switches were broken. They were not, and this affected the entire branch, not one switch.
- A redundant link now tells you why it is quiet. A second link between the same two switches is either a genuine alternate route that shares the load, or a backup that spanning tree parks so the network does not loop. Both cases used to look identical: a plugged-in, lit, working port carrying nothing, with no way to tell which it was. A parked link now says so, and a shared one carries its share. Which you get depends on how the link is configured, the same as it would in real life.
Internet and the edge
- The connectivity panel now shows what your edge can actually push, not just what you are paying for. It showed the total of your circuits. That is a real number, but it is not the number your traffic is limited by, and the two can be far apart. The panel now shows both and names whichever one is holding you back: your lines, your routers, or a firewall in the path.
- Every readout of your internet capacity now agrees. Six places in the game printed that number and only one of them knew about the limit, so you could read "200 Gbps, plenty spare" on one screen and "8 of 200, capped" on another. The worst was the capacity view telling you how much internet headroom you had left based on circuits you had bought rather than throughput you could actually push, which made buying another line look like the fix when it would have changed nothing.
- Two routers without BGP present one router's capacity, and the game now tells you so. This has always been the rule and it is the reason to run BGP, but nothing on screen said it. Adding a second cheap router appeared to do nothing, because it was doing nothing. If your routers are not advertising, the panel now says the edge is limited to a single router rather than leaving you to work it out.
- A router with nothing plugged into it was receiving internet traffic. Background noise from the internet was being shared out across every router in the building, including ones cabled to nothing at all. The check that stops an unconnected box picking up traffic existed for firewalls and had simply never been applied to routers.
- Background internet noise is no longer split evenly across zones. Every zone received the same amount regardless of how much internet capacity it actually had, which is why two zones of very different sizes reported identical traffic. It now follows the lines each zone really fronts.
- Ports on unpowered hardware were reporting themselves as up. A machine or switch with no power kept showing live links, and worse, the simulation itself believed them and credited them with throughput. Existing saves are corrected when you load them.
Cabling
- The price quoted while you run a cable is the price you are charged. The quote used the exact length and the bill rounded up to whole metres, so a short patch between a machine and a switch quoted one to three dollars and charged five. The affordability warning used the quoted figure too, which meant it would happily let you start a run you could not pay for.
- A cable between a QSFP port and an SFP port was drawing the larger module at both ends. The smaller port got a module that does not fit it, sticking out of the chassis. The port's own socket type is now what decides the connector.
- Cables follow the vertical manager instead of cutting across the top. Past roughly thirty copper cables in one band the game quietly moved a cable to the whole strip, and the renderer then dropped that instruction entirely and drew a straight sagging line from port to port. Fibre was unaffected, which is why this looked like a copper problem.
- Clipping a passthrough on both racks now works like clipping one. Doing it on one side routed neatly down the manager. Doing it on both skipped the manager on both racks and left the cable hanging in the air.
- The cable types on offer no longer depend on which end you started from. Starting a run from a 200G switch offered fibre that starting from the 400G side did not, for the same pair of ports and a run that was legal either way. Both ends are now considered.
- 200G and 400G runs were being offered optics capped at 100G. You could buy fibre for a 200G port that could never carry 200G, and nothing said so. Those speeds now offer optics rated for the port. See the note below, because the correct parts cost more.
Building and moving around
- J-hooks mount flush to the wall. Placing one above a rack while looking at the wall from an angle put it rotated ninety degrees and buried in the wall. The position was worked out from where you were looking and the rotation from your feet, so when a rack stood between you and the wall the hook took the rack's facing instead of the wall's.
- Walls are much less sticky. The player's collision shape was padded roughly sixty times more than it needed to be, so brushing a wall could snag you and sometimes wedge you badly enough to need the Unstuck button. One barrier in the data centre was also thinner than the padding itself, which made it impossible to push back out of.
Placement
- Service control planes stop landing on machines you have set aside. A machine dedicated to a network segment was not just allowed as a host for them, it was the most attractive one, because it is the emptiest box in your fleet and the game was ranking on free capacity. Putting it in maintenance moved them off and taking it back out brought them straight back. They also spread better across machines of different sizes, and memory is now considered alongside processors. Existing saves are corrected when you load them.
Saves
- Saves that refused to open now open. If your world had ever run an internet line at full capacity, loading it failed and put you back at the title screen with an error about a missing field. The way a full line is recorded changed in v0.1.26, from a single flag that meant "your internet is full" to one that names the individual line, and a save written before that change still described it the old way. Nothing could read it afterwards. Your save file was never damaged and was never written to, it just could not be opened.
- It did not need to be happening when you saved. The game keeps a short history of recently resolved alerts and a log of recent events, and a full line sitting in either of those was enough on its own. That is why this could strike a world with nothing wrong with it.
- The old record is cleared rather than guessed at. The old form never stored which line was full, so there is nothing to recover it from and inventing one would point you at a line that may be fine. If a line is still over capacity the alert comes straight back on the first update after loading.
Performance
- The simulation now uses about a fifth of the time it has between updates. It was three quarters two releases ago and about a quarter after v0.1.28c. Three more pieces of bookkeeping were doing far more work than the answer needed: the running latency figures behind every tenant's response times, the lookups that find a machine or a customer by name, and the pass that gathers each service's machines. The last of those was gathering the whole fleet once per service type, six times an update, and the answer cannot change unless a machine actually moves. It is now worked out once and reused until one does.
- Driving the delivery robot no longer makes everything stutter. While it was moving it reported where it was twice a second, and every report made the game rebuild and resend a complete picture of your world on the next update. That took the full rebuild from once every two seconds to once every half second, so the busiest thing the game does was happening four times as often for as long as you were driving. The robot's position is ordinary information that already travels with every update, so it no longer triggers a rebuild. This is why an empty robot slowed things down just as much as a loaded one.
- None of this changes what the simulation decides, only how long it takes. Machines land where they would have landed and the numbers read the same.
Comms
- The message panel stops rebuilding every conversation in your list. With a thousand tenants the sidebar holds around seven hundred conversations, and any change to any one of them threw away every row and built them all again, roughly once every two seconds. It now updates only the rows that actually changed. Opening the panel on a big save was the worst case.
- Answered messages stop being re-sent forever. Each conversation kept up to five hundred messages and sent all of them, every couple of seconds, whether or not you had that conversation open. Conversations now carry their most recent fifty.
- Every message was carrying an empty attachment. Replies from the runbook assistant have a structured payload: a topic, grounded figures, follow-up buttons. That payload was attached to every message in the game, including thousands of ordinary tenant messages that had nothing in it. It was almost a fifth of everything the comms panel was sending.
Requests
- Growth requests you have already answered stop being sent. The queue holds up to a thousand answered requests so the counts have something to count, and every one of them was sent with every full update. On a large save that was over nine hundred answered requests travelling alongside the fifteen that were actually waiting for you. Only the open ones are sent now, and the counts come across as numbers.
Multiplayer
- Joining a friend's game no longer drops you seconds after you connect. The host passes the world to each joining player through Steam. Whenever that connection was momentarily full, the host read it as a player who had vanished and ended their session. It is routinely full at exactly the wrong moment: the first thing a joining player receives is a complete copy of the world, the largest thing the game ever sends, and it arrives while the connection is still settling. The host now waits for it to drain, which is what it did before this part was rewritten.
- The same fault could also drop a player mid-session on a slow connection, any time the host got far enough ahead of them. Being briefly behind is now treated as being behind rather than being gone.
- A failed join now says which side gave up, and why. Every way a join could fail reached the joining player as the same bare disconnection, including the ones the host could have explained: a version mismatch, a session already full, or a host that had left and taken the world with it. The host was writing that explanation and then discarding it as it closed the connection. It is now delivered, and the reasons the host gives for ending a session are distinguishable from one another instead of all reading the same.
Graphics
- The quality setting the game picks for you now takes your screen resolution into account. It looked only at your graphics chip, so a laptop chip driving a 4K screen was handed the same settings as the same chip driving a 1080p one. Resolution is the single biggest cost for integrated graphics, and it was not being considered at all. Integrated chips now drop a step above 1080p and a further step at 4K.
- Intel integrated graphics were not being recognised at all. The check that decides whether an integrated chip can manage the middle quality setting compares against names like "Intel(R) Iris(R) Xe Graphics", and the trademark marks sitting in the middle of the name meant it never matched. Any chip reporting itself that way, which on Windows is all of them, fell through to the lowest setting. Recent ones now get the setting they should. This never made anything unstable, it just meant the game was quietly more cautious than it needed to be.
Notes
The save format has changed. Saves from v0.1.28 and its follow-ups load as normal and are upgraded as they load. A save written on v0.1.29 will not open on an earlier version, so do not roll back with a save you want to keep.
If a save has been refusing to open for you, load it on this version and it will open. You may find one stale alert missing and a short gap in your event history where the unreadable entries were.
Two visible trims come with this. A conversation now shows its most recent fifty messages rather than up to five hundred, so scrollback is shorter. And the requests list in the ops console no longer lists requests you have already answered; the tile that counts them is unchanged and still counts them all.
Expect your traffic figures to change, and in most cases to go down. If you run redundant core switches they were inflated by roughly the number of them, so a fabric that read four times too high now reads correctly. Nothing about your world has changed and no capacity has been lost; the numbers were wrong and are now right. Billing was never affected by this, and is unchanged.
One port goes quiet on purpose. A switch port cabled to an appliance that sits off to the side rather than in the path of your traffic, a hardware security module or a log collector, now reads zero rather than an invented average. The link is fine and the light is still green, it simply never carried customer traffic and used to claim it did.
Control planes and port states are both repaired as your save loads. Nothing moves, nothing goes down, and you may see a control plane relocate off a dedicated machine on the first update.
High speed fibre costs more than it did, because it is now the right part. A 200G or 400G run used to be sold optics rated for 100G, which were cheaper and could never have carried the port's speed. OM5 multi-mode is $60 per metre against OM4's $40, and long range single mode is $140. They also draw more power at each end, so check your power headroom before laying a lot of new fibre. Runs you have already laid are untouched and keep working exactly as before; only new ones are priced this way.
The quality setting the game picks for you is only chosen on your first launch. If you have ever set a quality level yourself, that choice is still respected and the two graphics changes above will not move it.
The join fix is on the hosting side, so it is the host who needs to be on this version for it to help. Single player is untouched by it; nothing in that change is reachable outside a hosted session.
Multiplayer sessions need every player on the same version, as with v0.1.28.
Fixed
Performance
- A world with a thousand customers keeps up again. The simulation was spending roughly three quarters of the time it has between updates on two pieces of bookkeeping, and on a busy site it went over that budget entirely. It now uses about a quarter. The same save that stuttered constantly runs clean.
- Tracking your busiest machines and customers no longer gets slower the more customers you have. The game keeps a running shortlist of the top two hundred talkers by traffic. Every time it credited traffic to someone outside that shortlist it re-read the entire shortlist to find who to drop, and once you had more than two hundred customers that was very nearly every single update, thousands of times per second of game time. It now tracks the smallest entry as it goes.
- Serverless requests stop re-checking your whole fleet, one request at a time. Working out which machines are allowed to run a given customer's code depends on your pools, your dedicated hardware and which machines are cabled and out of maintenance. All three were already remembered between requests, but the combination of them was worked out again from scratch for every single request that arrived. On a large site that was the single most expensive thing the simulation did. It is now worked out once and reused until something actually changes.
- Neither change alters what the simulation decides, only how long it takes to decide it. Your busiest-talker lists rank the same, and requests land on the same machines they would have before.
Databases
- A database left broken by a growth request is now repaired even when the growth request resized its copies too. v0.1.28 could put these back, but only by recognising copies that still matched the shape your contract asked for. Approving a growth request resized everything it touched, the spare copies included, so on the saves that most needed repairing there was nothing left matching to recognise, and the repair quietly found nothing to do.
- Those copies are now identified by counting instead. If you are holding more machines than your own contract accounts for, the surplus is what the database lost, and it is handed back. The disk comes back with it.
The local API (experimental)
- A page that asks for `localhost` can now reach the API. Fetching `http://localhost:9875` from your own dashboard failed to connect, and browsers report that failure as a cross-origin permissions error, so it looked like the API was refusing you rather than not answering. The name `localhost` can stand for two different addresses and the game was only listening on one of them. It now listens on both, so `localhost` and `127.0.0.1` both work.
- Asking for a diagnosis during a large outage no longer returns an enormous reply. Every open incident came back in full, and each one carries its causes, its timeline and its evidence, so a site with hundreds of them produced several megabytes at exactly the moment you want a quick answer. It now returns the first fifty and tells you how many there really are.
Notes
Saves from v0.1.28 and v0.1.28b load as normal. No save-format changes.
If you have a database that stayed broken after loading on v0.1.28, load your save once on this version and it will be put back. Nothing is moved and there is no downtime. If it was already repaired, nothing happens.
Loading a very large save still pauses for around a second across the first couple of updates while the game re-spreads machines that older versions had stacked onto one host. That is unchanged, it is deliberately limited so it cannot run away, and it settles by itself.
The local API remains experimental, on by default, read-only, and reachable only from your own machine. If you built anything against it on v0.1.28b, nothing has been renamed or removed; a very large diagnosis is now capped, and that response says so.
Multiplayer sessions need every player on the same version, as with v0.1.28.
Fixed
Services
- A service that came up short is topped up once there is room. A Kubernetes cluster missing a worker, a database missing a copy, a content delivery service missing a location: these were checked with the same question used to decide whether your customer is being served, and that question is answered "yes" before the contract is fully built. A cluster serves on two thirds of its nodes, and a database serves on one copy. So anything short but still serving read as finished and was never looked at again. Buying the hardware it needed changed nothing, for the rest of the run.
- The check now asks whether you have what you are paying for, which is a different question from whether the customer is currently being served, and both are asked in their own right. The one that decides whether to keep trying is now the same for every service, rather than each having grown its own answer.
- A service with nowhere to go is left alone. Topping up looks first at whether it would actually seat more than is already running, so a full fleet does not shuffle live machines between hosts once an hour achieving nothing.
Added
The local API (experimental)
- One endpoint that answers "why is this going wrong". `/api/v1/diagnostics` returns the whole health picture in a single read: open incidents and what recently resolved, machines the game could not place, control planes running degraded, requests you have not answered yet, capacity and cooling headroom, attacks in progress, where the money is going, and the engine's own log tail.
- v0.1.28 shipped the inventory but not the diagnosis. You could list every host, customer and incident, which is enough to see that a customer is unhappy and not enough to see why. The parts that carry the reason were not exposed at all: an unanswered growth request, a segment with no room left, a degraded control plane. They are now.
- A dashboard in your browser can now read it. v0.1.28 sent no cross-origin headers, which blocked a page you wrote yourself from fetching anything. Since the API is read-only and cannot be told to do anything, there was nothing for that to protect, so it now allows any origin and exposes the "how old is this data" headers along with it.
- It is one call rather than a dozen, deliberately. Working out why something is wrong means comparing facts against each other: this incident, that customer, that pending request, that capacity number. Fetched separately those can come from moments either side of an update and quietly disagree, so a tool could reach a conclusion about a state your game was never actually in. One call is one consistent picture.
Notes
Saves from v0.1.28 load as normal. No save-format changes.
If a service in an existing save has been sitting short of what you contracted, it will fill itself in within the hour, provided the capacity is there. Nothing is moved to make room, and a service that is already whole is not touched.
The API remains experimental, on by default, read-only, and reachable only from your own machine. It is still the one part of the game we may change without warning.
Multiplayer sessions need every player on the same version, as with v0.1.28.
Added
The local API (experimental)
This is a first pass and it is experimental. It works and it is safe to leave running, but the shape of it is not settled: names, fields and addresses may change in any release, and things may be added or dropped based on what people actually use. Treat it as something to play with rather than something to build on, and expect to adjust anything you write against it. If you do build something, tell us what you needed, because that is what will decide where this goes.
- Your running game now serves a read-only API on your own machine. Open `http://127.0.0.1:9875/docs` in a browser while the game is running and you get a live index of everything the simulation knows, with a button on each entry to fetch it there and then. It is the observability stack you spend the campaign building, pointed back at your own datacentre.
- A Prometheus endpoint, at `/metrics`. Point Prometheus or Grafana at it and graph your own cloud: cash and revenue, customers, hosts, uplink throughput, heat and cooling, open incidents, packet drops. The scrape target is a fixed address, so a dashboard you build once keeps working run after run.
- Everything is there, not a curated subset. Hosts, racks, availability zones, the whole network (switches, gateways, appliances, patch panels, cables, segments, subnets), customers, prospects, staff, quests, incidents, work orders and services. Every list is paged, and single entries are addressable by id.
- The event feed and the metric history are readable too. `/api/v1/events` walks recent events in order and tells you honestly when it has fallen far enough behind that some are gone, rather than quietly returning fewer. `/api/v1/metrics` exposes the same sparkline histories the in-game panels draw from, already converted into real units.
- It reads in plain English. Names, quest text, incident descriptions and event messages come through as sentences, not internal identifiers.
- It cannot change your game and it cannot leave your machine. There is no way to buy, move, or break anything through it, and it only ever listens on your own computer. Nothing is sent anywhere, and no setup or account is involved. If you want it reachable from another machine, that is yours to arrange deliberately.
- It cannot slow the simulation down. The API reads from a snapshot the engine publishes once a second rather than interrupting it, so a dashboard refreshing constantly costs the game nothing. Every response says how old its data is, so nothing pretends to be live that is not.
Fixed
Databases
- A database broken by approving a growth request is repaired when you load. v0.1.27c stopped growth requests from breaking databases, and repaired the saves it could recognise. It could only recognise copies that still looked like the database it started as, and approving growth resizes them, so the saves most likely to be damaged were the ones the repair could not see. It now identifies them by what a customer is holding beyond what they are paying for, which survives a resize.
- A repaired database gets its own disk back, not the one it was left holding. A copy that had been turned into an ordinary machine kept that machine's disk, so a database could come back running on the wrong size without saying so.
- The machines those broken copies were sitting on are handed back. Same release of unbilled hardware as v0.1.27c, now reaching the copies that release could not identify.
Deliveries
- The delivery robot carries what fits on its deck. It was refusing boxes onto a deck that was visibly two thirds empty, because it was counting abstract "slots" rather than looking at the load. It now stacks the real cartons and only refuses a box when there is genuinely nowhere for it to go. In practice the robot takes ten servers where it used to take six, and thirty switches where it used to take twelve. The trolley gained the same way.
- Mixed loads work the way they look. Two layers of servers, then a few switches, then more servers is a normal thing to want, and the old slot count had no way to answer it — a short box cost the same as a tall one, so a stack of small cartons hit the wall with a third of the deck unused. Box sizes now decide, so a 4U server takes more room than a 1U one and the deck fills the way the picture says it does.
- A full deck tells you which machine is full, and by how much. Loading the delivery robot used to report that the trolley was full, and quote a slot number that matched nothing on screen. It now names the machine you are standing at and says how far over the top the box would put it.
- The robot's console shows how loaded it is, and stops hiding boxes. The manifest listed six and silently dropped the rest, so a loaded robot's console showed less than the robot was carrying.
- The prompt stops offering a load that cannot succeed. When nothing more will fit, it says so instead of inviting you to press E and be refused.
- Everyone sees the load stacked the same way. Each machine used to work out its own arrangement, so the same boxes could sit differently on two screens.
- A rack-mounted security appliance takes a server's space on the deck. It is a server chassis and was drawn as one, but it was charged as a small box, so the deck's idea of how full it was drifted from what you could see on it.
Pause
- Pausing stops the world. The delivery robot used to carry on driving, flashing and beeping across the room behind the pause menu, then snap back into place when you resumed. Time is now held in one place, so anything that moves, stops.
- Opening a menu in multiplayer no longer freezes your view of a live world. The pause menu has always said the world keeps running for everyone else, and that was true — but your own client quietly stopped keeping up, so you came back to a world that had moved on without you. A shared world cannot be paused, and now nothing pretends otherwise.
- The pause button never claims a pause that did not happen. It reports the state of the game rather than the button you pressed.
Notes
Saves from v0.1.27 load as normal. No save-format changes.
If a customer's database still reads as down for no visible reason, load your save once on this version and it will be put back. Nothing is moved and no database is rebuilt, so there is no downtime, and a healthy save is untouched. Freed hardware may show up as a jump in available capacity, and affected customers' bills correct themselves.
Multiplayer sessions need every player on the same version. This release changes what clients and the server say to each other, so a v0.1.28 client cannot join an older host or the reverse.
The local API is experimental, on by default, and needs nothing switched on, but it only exists while the game is running. It listens on `127.0.0.1:9875`; if something else on your machine already has that port, the game quietly picks another one rather than failing to start. In multiplayer it runs on the host's machine and describes the shared world, so a guest querying their own machine will not find one. Being experimental, it is the one part of this release we may change without warning, including removing it; nothing in the game itself depends on it, so that would cost you nothing but whatever you pointed at it.
If you have a hauler loaded in an existing save, its boxes may be arranged differently the next time you look at it. Nothing is lost — the same boxes are aboard, in the same order, stacked to the deck's real dimensions.
If a customer's database reads as down for no visible reason, load your save once and it will be put back.
Fixed
Databases
- Approving a growth request no longer destroys the customer's database. When a customer asked for bigger VMs, approving it released everything they were running — their database included — and then rebuilt only the VMs. This needed no reserved hosts and no old save; it happened on a fresh game the moment you said yes.
- Reducing a customer's VM count no longer destroys their database. Scaling a customer down released their oldest machines first, and a database's machines are the oldest ones they have. The database went before a single VM did.
- A database that fails over keeps its disk. Only the primary copy held the storage, and promoting the replica did not carry it across, so a database that survived a host failure came back running on nothing with its data stranded on the dead machine. The storage now belongs to the database rather than to whichever copy is currently in charge.
- Saves repair themselves on load. Databases are put back together, missing storage is reattached, and abandoned copies are released. Nothing is moved and no database is rebuilt, so there is no downtime. Healthy saves are untouched.
- Abandoned copies stop costing you. When a database broke, the game quietly built a replacement and left the old copies running on your hardware — unbilled, invisible, and holding memory and cores. One customer in testing was sitting on six. Loading your save releases them and hands that hardware back.
Growth requests
- A request for bigger machines says so. It read "+0 VMs" — a customer asking for nothing — because only the "more machines" half of the request ever reached the interface. It now names what is actually being asked for, on all four screens that show it.
Multiplayer
- A box or crate someone else is carrying no longer sits on the floor for you. You could walk up to a delivery box a teammate was already holding and get a flat refusal about something your screen said was right there. The same went for rack crates, and because the crate pile is packed in order, two people carrying crates saw two different piles.
- You can see what other players are carrying. A shipping box or a rack crate now shows in their hands. Previously only unboxed equipment did, so the two longest walks in the game were made empty-handed.
- You can watch another player run a cable. They used to stand still and a finished cable appeared out of nowhere. The run they are dragging is now visible as they thread it.
- Two players cannot pull a cable from the same port. The second is told at the moment they try, instead of threading a route across the room and losing at the last step.
- The delivery robot and the trolley are shared. Both players see the same machine in the same place, carrying the same load in the same order. Each client used to run its own copy, so one player could drive it down the aisle while it stood still on the other's screen, with the load drawn somewhere nobody had put it.
- Anyone can send the robot somewhere, or stop it. Telling it where to go is a command, not something you hold on to, so a machine parked in your way is one you can move. Towing the trolley is still one pair of hands at a time.
- Leaving a session lets go of whatever you were holding. Boxes, crates, the hauler and a half-run cable all return to everyone else rather than staying locked to a player who has gone.
Cabling
- A tray run is placed all at once, or not at all. It went out one segment at a time and stopped at the first refusal, so running out of money partway through left half a route built and charged for, with nothing to say which half.
Deliveries
- Boxes put down in a second colo cage belong to that cage. Everything dropped anywhere in the room was filed to the first zone, so once you bought a second cage its deliveries and loose equipment were recorded in the wrong place.
Racks
- Stepping between racks with A and D takes you with it. Only the camera moved, so leaving the inspector put you back at the rack you started from, and in co-op your character never left it.
Notes
Saves from v0.1.27 and v0.1.27b load as normal. No save-format changes.
Multiplayer sessions need every player on the same version. This release changes what clients and the server say to each other, so a v0.1.27c client cannot join an older host or the reverse.
Freed hardware may show up as a jump in available capacity, and affected customers' bills correct themselves on load.
Fixed
Databases
- Dedicating hosts to a customer no longer destroys their managed database. The database kept running, but the game stopped recognising it: "0 of 2 running", billed as plain compute, no failover replica, and "add compute" on hosts that were nearly empty.
- Affected saves repair themselves on load. The copies are reattached in place. Nothing moves, nothing is rebuilt.
- A confined customer is told to add a host to its segment, not to add compute. Open hosts never take a confined customer's work, so buying an unreserved server changed nothing.
Deliveries
- The delivery robot no longer parks where rack crates are delivered. Its spot in the shipping zone sat directly in the lane crates drop into, so a crate could land on top of it.
Notes
Saves from v0.1.27 load as normal. No save-format or balance changes.
Affected customers' bills will rise slightly on load, to the correct database rate.
Deliveries
- New: a delivery robot at the Data Center. Load it up in the shipping zone, press E on the control panel on its pole, and pick a rack row. It drives itself down the aisle and waits there while you unload, then you send it back.
- Its deck takes two server boxes side by side, and only stacks upward once the deck is full, so a mixed load of servers and switches makes the trip in one go.
- Boxes come off in the order they went on, last on first off.
- The panel lists what is on the deck, and has a Stop button to halt the robot where it stands if you want it somewhere else. It closes on its own once you walk away from the robot.
- The robot takes the place of the hand trolley at the Data Center. The garage and basement are unchanged.
Servers
- The processor breakdown no longer reports functions that are not there. It was working the figure out by subtraction, so a load balancer's work landed under "Functions" on a server with no serverless workloads on it.
- Load balancers, Kubernetes and content delivery have their own line in that breakdown. They never had one, which is why their work had nowhere to go.
- Live load can no longer exceed what the machine physically has. A load balancer's full traffic demand went into the total uncapped, so an eight-processor machine read 264%.
- That figure was marking machines contended and cutting every other tenant on them to about a third. Servers with a busy load balancer should feel much less crowded.
- The platform line no longer counts other workloads. It was total allocation minus virtual machines, so a load balancer got counted twice.
Racks
- A rack with several problems shows one status strip, not one per problem. They were stacking, so the light got brighter and wider with every extra incident.
- The strip sits on the rack's top edge again instead of floating above it. It was being sized from everything mounted in the rack, cables included, rather than the rack itself.
Databases
- A database that came up while your servers were full now gets its replica once you make room. It kept the primary and owed the replica you were being billed for, and because something was there it was never looked at again, so buying another server changed nothing.
- The retry places only the copies that are missing. It will not move a live database off the server it is already running on.
- Start repair on a shortfall now retries the placement there and then, rather than waiting on the next sweep. When it still cannot place, it names the thing blocking it instead of saying to fix it directly.
Object storage
- You can designate machines for object storage again. Pick them in Segments, leave the customer as Any, and set the job to Object storage. It was being refused by a rule that stopped applying when reservations were split into who they are for and what they run, and the rule was never taken back out.
- Once any machine is designated for it, the ones you have not designated stop taking shards. Object storage no longer lands on whatever happened to have free disk.
- The designation survives loading. It was being wiped every time a save opened, so even where it did take, it did not last.
- Reserving object storage for a particular customer or tier is still refused, and now says why: a shard has no network identity to match against, so leave the customer as Any and it will home.
- As with any reservation, if the machines you are designating are running other work, that work needs somewhere to go and the change is refused if there is nowhere. The message names what is in the way.
Control planes
- Service control planes spread across your servers instead of all landing on the same one. Each class was ranking a fleet that looked untouched, so they all picked the same winner, and cordoning that server moved the whole pile to the next one. They now see what the others have taken, and count what is already running on a server when they rank it.
Networking
- Breakout legs now run at what the trunk's lanes actually carry. A 40G QSFP+ port is four 10G lanes, so a 25G server port on one of them connects at 10G and all four lanes fill. Each leg used to claim the far port's full rate, so two 25G legs wanted 50G out of a 40G port and the second was turned away.
- The fan-out limit counts lanes instead of legs, so a leg wide enough to need more than one lane costs what it actually uses.
- Breakouts saved before this are re-rated when you load, so a trunk that was recorded as carrying more than it physically can stops refusing legs that fit.
- Bonding ports now tells you it worked and names the bundle. It was sending the command and saying nothing, on the switch, gateway and appliance consoles alike.
- Ports fed by a breakout leg can be bonded. They were offered as bondable and then dropped while the bond was assembled, so the key did nothing at all.
- The switch console's unbond, mode and minimum-links controls are back. They looked for the bundle on a field that ports do not carry, so they never appeared.
Performance
- Large sites no longer stutter. A dozen routines were walking every workload on the site once per customer, once per server, once per rack, so the cost grew with the square of how much you had built. Object storage moving into the same store in v0.1.26 is what tipped it over. A save with a thousand tenants spent 110ms preparing each update and now spends under 20ms.
- Loading a save no longer freezes for minutes afterwards. The workload rebalance that runs on load capped how many machines it would move but not how many it would consider, so on a save with nothing left to improve it checked every virtual machine against every server, every tick, forever. It now works to a budget and stops after a set number of ticks, leaving anything it could not place better where it was.
- Racks open on a large site again instead of reporting no data.
- Servers in maintenance no longer drain continuously and log the same thing repeatedly. The drain re-ran every tick whether or not there was anything left to move.
- Walking in and out of racks, and moving around a full site, holds its frame rate.
Controls
- New: invert mouse look. It sits next to the sensitivity slider, in the Camera section of the Controls tab in Settings, and takes effect the moment you flip it. It covers the photo mode camera too. The right stick keeps its own orientation.
Fixes
- Quitting to the title from a loaded save works again.
- Long headings wrap onto a second line instead of running off the edge. An incident's title was the visible case; the setting is shared by every heading on the laptop, so the rest follow.
- Article names in the knowledgebase list wrap too. A long one used to shove its tag and category off the row.
Fixed
Performance
- Cut the biggest cause of stutter on large saves. v0.1.26 moved object storage and managed-database backups into the shared workload store, but several lookups still walked the whole store to answer a question about one tenant. Invisible on a small world, millions of wasted comparisons per tick on a big one. They now do one pass instead of one per tenant. There is more to do here.
- A host left in maintenance no longer costs you every tick. If its workloads had nowhere to go, the game re-planned your entire fleet's evacuation for every cordoned host, every tick, and discarded the result each time. It now plans once, looks only at cordoned hosts, and stops redoing the work while nothing has moved.
- Contested relocations are deterministic. When several cordoned hosts wanted the same replacement, the winner could vary between runs.
Hardware
- A rack gateway can no longer be installed on top of something else. Every other rack-mounted device checked its slots were free first. Gateways did not, so one could be racked through a server already there.
Cables
- The cable you pay for is the cable you get. Choosing an active direct-attach cable could silently commit a passive one, which has a shorter usable reach, and still report success. An unrecognised jacket colour fell back to a default the same way. Both now refuse the order and say why.
Workloads
- Migrating a workload can no longer move somebody else's. Each service type numbers its units separately, so the same number is valid in several of them. Naming the wrong type with a real number could move a different tenant's workload. The request is now checked against the type, tenant and host you named.
Multiplayer
- Nameplates can no longer show a stranger's Steam account. A Steam ID was too large to carry exactly, so it arrived rounded, and a rounded ID is usually still somebody else's real account. It is now carried as text.
Stability
- A timed-out command no longer invites you to repeat it. The game said the server was busy and suggested retrying while the request was still running and usually still took effect, so repeating it could apply a purchase twice. It now says the outcome is unknown.
- Notifications and graphs no longer come up empty in silence. On the compact wire format, a malformed batch of story events or graph samples was accepted as an empty one, so incident cards never appeared and sparklines sat flat at zero. It is now an error.
- An unrecognised connection format is rejected, not silently downgraded to the slowest one, which showed up as unexplained hitching on large updates.
Notes
Saves from v0.1.26 load as normal. No save-format or balance changes.
Alerts
- Saturation alerts now name the thing that is actually full. Every chokepoint between your racks and the carrier was being collapsed into one number, so a struggling firewall reported itself as "uplinks saturated, facility-wide" while the internet page showed your lines at a fifth of capacity. Lines, routers and security boxes now each report against their own capacity and name themselves, and security boxes distinguish between forwarding limits and inspection limits. One alert per bottleneck, so it no longer flaps when a different one takes over.
- Individual cables can now report saturation. A link can be pegged while the switch and router at either end have headroom to spare, because the cable, or the slower of the two ports, is the limit. A 100G port on a cable that negotiated down to 10G is doing 10G. The alert names the cable and the network map highlights it.
- Saturation alerts no longer blame customers whose traffic never touched the bottleneck. The affected list was built from "who is slow right now", so a customer short on CPU two rooms away counted as a victim. That also inflated severity: one unrelated customer on a redundant contract pushed a minor link alert to critical. The list is now traced through your actual wiring, and severity follows it.
Racks
- Unracking a router or an internet box frees the U it was sitting in. The slot stayed claimed, and nothing, including the router itself, would go back into it. Servers, switches and patch panels were never affected, which is what made it look like one bad model. Existing saves repair the stuck slots on load.
The network map
- Switch port counts no longer include the power inlets on the back. A 32-port switch read as 34, a 48-port as 53.
- Switch and server speeds read from the links you have actually run, not from whatever happened to be in port one. Two identical switches now report the same speed. Mixed speeds get a "+" after the number, and an unpatched switch says so instead of inventing a figure. The fabric figure beside it was always correct and is unchanged.
Load and performance
- A traffic spike on a server with spare capacity is no longer punished. Load was measured against what a customer had bought rather than what the machine had free, so a spike drew errors and near-two-second response times on a host running at 5% with a hundred idle cores, and buying more changed nothing. Worse, the burst grant was calculated as exactly the shortfall, so a served customer was still recorded at precisely 100% and charged the full penalty. Load is now measured against the CPU genuinely available on the host.
- Spikes grow into whatever the server is not using. The old ceiling of twice contract had no reasoning behind it and customers routinely spike three to eight times. The only limit now is physical.
- Response times scale with how bad the overload is, capped at the request timeout. Every level of overload used to report the same figure, so the number could not tell you whether the hardware you just bought had helped. When the cause is other customers crowding the same machine, the delay is attributed to that and the alert names the machine.
- Burst capacity above contract is now billed at the normal rate. It had been free since the feature shipped, and it was invisible because the invoice matched the contract exactly.
- Scale-up requests now trigger on a customer consistently needing more than they bought. They used to trigger on the customer failing to keep up, which stopped happening once spikes were absorbed properly.
- Existing saves adopt the new load model on load. If you changed either setting yourself, your choice is left alone.
Kubernetes
- When a cluster cannot place all its worker nodes, the game now tells you what actually stopped it. The refusal reported a fixed story about processor and memory no matter what the real cause was, so a cluster blocked on needing separate failure domains told you it was short of compute while most of the pool sat idle. Buying more servers then changed nothing, because servers were never what it was short of. The message now names the constraint the placer actually hit. This does not by itself place a node that could not be placed before; it stops the game sending you after the wrong hardware.
- A cluster no longer takes its owner's other clusters down with it. Re-laying one cluster released every cluster the customer held and rebuilt only one.
Load balancers
- Load balancers are real machines now. A proxy was charged to your fleet as a small management overhead rather than as software running on a server, so a load balancer cost roughly nothing to host no matter how much traffic it carried. Proxies are now sized from the request rate they serve, reserve processor and memory on the machine they sit on like any other workload, and are packed against the rest of your fleet accordingly. A busy load balancer is a real tenant on a real box. Expect load-balancer customers to take up more room than they used to.
Storage
- How many copies of a customer's data you keep is now decided by what that customer bought, and nothing else. There was a fleet-wide replication setting that could raise a tenant above their tier, so a customer who paid for one copy could silently be given three, at triple the storage, without anything on their contract saying so. It only ever affected your cheapest tenants, since anyone on a higher tier was already above it. The setting is gone.
- The storage row on a customer's page states copies, not liveness. A bucket contracted for three copies and running on one reported "1 of 1 live, healthy" while the alert about the same bucket said one of three. Both numbers were real; they were answering different questions and only one of them was the question you were asking. The page and the alert now quote the same pair.
- A content delivery network short of its points of presence says so. One live location out of four reported as one of one.
Databases
- A database that lost its primary machine no longer reads as failing over forever. The failover clock started on any primary loss, but only stopped on the path that requires a live replica and automatic failover switched on. Every other case left the database marked as mid-failover permanently, including after the machine came back, and it was billed as degraded for as long as that lasted.
- A database signed while its service was still locked now gets its automatic backup. The backup schedule was only ever started by the signing path, behind a gate that such a customer never passed, so the database ran without one indefinitely.
- The repair that moves work off machines with the wrong accelerator now sees managed databases. It only looked at plain virtual machines, so a database pinned to a particular accelerator was skipped.
Diagnose
- The fault-isolation row says which workload it means. It is computed from your virtual machines and its fix is to rebalance them, but it said "copies", which is the word the database rows use. A customer whose database was short a replica saw "database has no live replica" and "copies are stacked, migrate them apart" side by side, which reads as a contradiction and sends you to perform a move that cannot exist when only one copy is there.
- Kubernetes, content delivery and load balancers can report a compromised spread at all. Only virtual machines and databases were ever measured, so a cluster with every worker stacked on one machine reported itself perfectly healthy. A single machine failure would have taken the whole cluster and nothing said so.
- Where a service is allowed to spread is now visible on the customer page, and you can set it. It existed as a contract term the game held you to and never showed you. Choosing one tells you immediately what it will cost in copies you cannot separate, rather than leaving you to discover it later.
- The serverless row counts containers that are resident, not requests in flight. It blinked in and out between requests while the container held its memory the whole time.
- A customer failing none of its requests is no longer flagged as failing some. The check warned on any rate above zero while printing it to one decimal place, producing "0.0% of requests are failing". The rate is a rolling average on purpose, so a customer recovers in minutes instead of being pinned to a lifetime figure, but it decays towards zero without arriving: one bad moment kept a customer flagged for half an hour, and a customer whose traffic stopped stayed flagged forever. It now settles to zero below anything the display can show.
- That is also why your site checklist could claim "40 of 70 tenants need attention" while every tenant looked fine. Warnings count toward that tally, so each decaying average added a tenant. The incident evidence panel had the same line and is fixed alongside it.
New
Security
- The border security gateway is back on sale, and it is all hundred-gig now. The biggest inline firewall you can buy was pulled from the shop a while back because it had no model to render, so the best box actually available to you was the twenty-five-gig one — eight of them to cover a full colo. Its model is finished, so it is back, and it has been rebuilt as four hundred-gig ports rather than a mix of hundred-gig on the internet side and ten-gig on the fabric side. Both sides now bond to two hundred gig, so nothing is throttled by the slow half of the box; deep inspection runs at one hundred and sixty gig, and that is the number to size against. It unlocks with the Data Center in both the campaign and The ARM Race.
Fixed
Graphics
- Fixed a hard freeze on AMD graphics cards at Ultra. The game already knew that this family of card can lock up under the highest global-illumination setting, and already had a guard to step it down a notch. The guard only recognised the open-source Linux driver by name, so on Windows it never once fired: the same card, running the ordinary driver, was handed the exact setting the guard exists to prevent. It now recognises the card by its maker instead of by one driver's name. If you were picking Ultra and the game stopped responding until you restarted it, that was this. The same setting is the most likely cause of the flickering some of you saw on loading a save or turning the lights off, so that should improve too.
Cables
- A cable you pick is now the cable you get when splitting a fast port into slower ones. Running from a 100G port to a 25G one splits the fast port into lanes, and that path threw away your choice of cable and quietly picked its own cheapest option. Choose an optical cable and you would watch it commit as direct-attach copper, in the colour you asked for, with the description changed underneath you. Your colour survived because only the cable type was being discarded. If the cable you have picked cannot carry the speed or reach the distance, you are now told so rather than handed a different one without a word.
Internet handoffs
- A handoff port with no circuit no longer shows as live. You can patch the first handoff before you subscribe to anything, and once patched it lit up and reported traffic as though it were carrying your internet, because the indicator only ever asked whether the far end was powered. Buying a line is what makes a handoff live, and that is now what the port shows. The same applies across a whole box: subscribing one circuit no longer lights every port on it, which is what you would see in a second zone part-way through being built.
The ARM Race
- GPU customers no longer turn up in a run that cannot buy a GPU machine. The ARM-only rule filters customers by the processor they need, and a customer wanting a graphics card usually does not mind which processor it sits beside, so those enquiries sailed straight through. Every GPU machine in the catalogue is hidden by that same rule, so the run was generating work it also forbade you from ever taking on. Loading an existing save clears any such enquiry still waiting in your list, and lets go of any GPU customer you had already signed, free of charge: no termination fee and no hit to your reputation, since the run offered you a contract it was never going to let you fulfil.
Servers and racks
- PSU status lights now follow the cord you actually plugged. Each power supply has its own light, but they were driven by a count of how many cords were connected rather than by which inlets those cords were in. So one cord always lit the first light no matter which supply you plugged, and cording the second one lit the first anyway. Each light now reads its own inlet.
Storage
- A customer who buys object storage and a managed database no longer loses their storage every time you load. A managed database keeps its own automatic backup, and the object storage you sell is a separate product. Older saves kept the two in the same place, so loading a save runs a step that pulls them apart. That step was running on every save rather than only on the old ones that still needed it. On a current save there was nothing left to separate, so it took the customer's real object storage and filed it as the database's backup, overwriting the backup already sitting there, and the game then built them replacement storage from nothing. Only customers holding both services at once were affected. If a tenant's object storage looked like it kept resetting itself, or the machines listed as holding their data never matched what you had set up, that was this. The step now runs only on saves old enough to need it.
The ops console
- Clicking inside the console no longer throws your cursor to the middle of the screen. Clicking a concept in the codex, or a network in Isolation, could snatch the pointer back into mouselook and drop it dead centre, in the middle of whatever you were doing. Two separate bits of code recapture the mouse when you click back into the world, and only one of them was checking whether a panel was open first. A click that landed on a live button was fine; one that landed a few pixels off it, on the padding or the row behind it, fell through to the other one. Both now check.
Where your services run
This one is a rebuild rather than a fix. Deciding which machine a workload runs on was done seven different ways depending on the service, and each one had drifted from the others. Everything now goes through a single path, which is what makes the rest of this list possible.
- When something will not fit, the game now tells you what is actually blocking it. If a customer needs their copies on separate machines and you do not have enough separate machines, it says so, with the numbers: "needs 7 separate machines, only 4 available". Previously it reported free memory or disk instead, so you would look at a fleet with plenty of room, conclude the game was broken, and buy hardware that did not help. This was the single most common complaint and it was the same underlying bug in five different places.
- "No room" now distinguishes no room anywhere from no room in that customer's segment. If a tenant is confined to three machines and all three are full, it says so and names the rest of the fleet as unavailable to them, instead of telling you the roomiest server has 2 GB while a 200 GB box sits idle two racks over. Those are different problems with different fixes.
- Copies stay spread out when you move things. Anti-affinity was only ever applied when a workload was first placed. Migrating one by hand, draining a machine, or losing one to a failure could quietly pile a customer's copies back onto a single box, with nothing said. It is now honoured everywhere. It still never blocks you: if the only place left is beside a sibling, the move happens and the customer is flagged as no longer fully spread, rather than the workload being stranded.
- Fault domains follow your actual cabling. "Separate racks" was a guess that two machines in different racks did not share a failure. Your own cabling makes that untrue: a host can be wired to a switch in another rack. Spread is now worked out from the real network path and the real power feed, so two copies that would die together are treated as together no matter which racks they sit in. The wording changed with it, from rack jargon to what actually survives: separate machines, separate switches, separate power, separate zones.
- Losing a machine now moves everything on it, not just the virtual machines. Object storage shards, CDN points of presence, Kubernetes workers and load balancers used to stay attached to a dead server, still counted against its capacity, until an unrelated sweep noticed up to an hour later.
- Machines can no longer be quietly overfilled. Every service needs a small agent on each machine it runs on, and that agent was added after the placement decision rather than counted as part of it, so a server could end up committed past its own capacity with nothing said. Control-plane placement had no capacity check at all and could be put on a completely full machine.
- Serverless now shows up in a machine's usage. Warm function containers consume real memory and CPU but were counted against a fleet-wide total rather than the machine they were on. A host fully occupied by them read as empty in the usage bars, in the contention warnings, and to the placer about to put something else there. It also meant they drew no power.
- Load balancers spread across your fleet. They were ranked by free disk space, which they do not use, so one machine won every time and sat pegged while the rest idled.
- Maintenance mode now actually stops new work arriving. Cordoning a machine was respected for virtual machines and Kubernetes, but object storage, CDN, load balancers and serverless carried on being placed onto it while the drain you had just started was moving that same work off.
- Moving storage no longer leaves the old machine claiming the customer, and a CDN point of presence can no longer be moved on top of another one in the same region.
- The reserved headroom setting moved to the Capacity page, where it belongs, and is now a property of each machine rather than a virtual-machine setting that happened to govern the whole fleet. Your existing setting is carried over.
- Serverless work is placed like everything else. Containers were put on machines by their own separate rule that counted how many containers a machine was already running rather than how full it actually was, and checked room against the whole fleet instead of against the machine it was about to use. So a box could be pushed past its own memory while the fleet looked fine. Selling a machine could also silently change where later containers landed.
- A machine reserved for one service no longer quietly takes another's data. If you set machines aside to run a particular service, object storage was the one thing that ignored you and put shards there anyway.
Deciding whether to take a customer
- "Can you serve it?" now actually works it out. The enquiry card showed "After accepting: vCPU 0%, Memory 0%" and told you nothing was in the way, for any customer who was not buying plain virtual machines. It only ever sized virtual machines; a database, Kubernetes, object storage, CDN, serverless or load balancer customer was measured as needing nothing at all, so the card said yes to everyone. It now sizes every service in the bundle.
- The card counts the copies you are actually promising. A customer asking for replicated service needs two of everything, and the card was quoting you the price of one.
- There is a disk meter. A customer asking for 821 GB was shown two meters, neither of which was disk, and the verdict never changed no matter how full your storage was.
- Memory and processor headroom are measured the same way. The processor reading counted only machines that were actually up and usable; the memory reading counted every machine you owned, including ones that were switched off or not cabled up. So memory always looked healthier than it was.
- "Comfortable" is no longer printed in red. The words and the colour were worked out from two different things, so they could disagree. They now come from one answer, and both are the engine's, not the screen's own guess.
Moving a workload
- The list of machines you can move to is now the engine's answer, not the screen's guess. The picker worked out eligibility itself and checked about three of the thirteen things the engine checks, so it offered machines that were then refused, and it hid machines that would have been fine. It now asks the engine about every candidate and shows you what it said.
- A machine that cannot take the workload tells you why, in the same words the customer page uses, instead of being silently missing from the list.
- A move that would put two copies on one machine is offered in amber rather than hidden. You named the target, so you are told what it costs rather than refused.
Diagnose and customer pages
- Diagnose and the customer page no longer disagree about how much of a service is running. Diagnose read a figure that only refreshed for virtual machines and databases, so for object storage, CDN, load balancers and Kubernetes it could be hours out of date while the customer page two clicks away showed the live one.
- A service short of capacity no longer describes itself as fine. The counts on a service row were read live but the wording beside them came from that stale figure, so a row could read "3 short" and "Ok" at the same time.
- Diagnose no longer reports a customer as all clear while one of its own checks is failing. All clear was decided by whether Diagnose had managed to name a single most-likely cause, not by whether anything was wrong, so a customer with a red failing-requests line could still be counted as healthy.
- Migrating a workload no longer breaks the picker. Opening the migrate list crashed outright for any machine without an accelerator.
- The customer page now shows what is wrong with the numbers attached. Problems were written out as finished sentences by the engine, so the page could only repeat them. It now receives the facts (what is needed, what there is) and writes the line itself, which is also what lets it be translated.
- A security breach is no longer reported as an uptime failure. The two share nothing: a compromised customer can be perfectly available, and an unavailable one need not have been broken into. Diagnose was reading the intrusion flag and calling it an SLA breach.
Customers and contracts
- Customers who need more storage than one copy are sized correctly before you sign them. A customer wanting triple-redundant storage was checked against the space for a single copy, so they read as comfortable, signed, and immediately raised an under-replication alert.
- A customer who requires multiple zones now actually gets placed across them. The requirement was checked when you signed them and then never used again, so the contract line stayed red with nothing you could do about it.
- Archetype redundancy preferences are now real. They were authored throughout the game's content and never read by anything. They are a preference, not a rule: you can knowingly run a customer below their preferred redundancy and be told, rather than being blocked.
Incidents
- Contention and MAC-flapping alerts can now clear after a reload. Both were tracked in memory that is rebuilt on load, so an alert saved while one was active could never resolve and sat in the alarm strip permanently.
- A failed component now clears when the component is repaired, rather than when the whole machine goes down, which for a disk or a fan it never does.
- Incidents no longer overwrite each other after loading an older save. The incident numbering restarted from zero on load and silently replaced open incidents that already held those numbers.
- Alerts stop flapping at the capacity line. A load sitting exactly at capacity opened and closed the same incident on alternating ticks, each cycle posting to the channel and writing a codex entry.
- Tearing down a facility now closes its incidents properly instead of discarding them, so the post-mortem and history survive.
Current Release
Build 24622776
Uploaded Aug 08, 2026
Update already requested
Uploaders have been notified
A newer version is available but not yet uploaded
Help keep this updated
Login Required
You need to be logged in to request game updates. Would you like to go to the login page?
Request Update
Request an update for Uptime: A Cloud Provider Sim? This will notify uploaders that this game has an available update.
Request Submitted
Your update request has been submitted successfully! Uploaders will be notified.
Request Failed
Failed to submit update request:
System Requirements
How to Install
Uptime.exe to play
Troubleshooting tips
• Run Redist/_CommonRedist installers if game won't start
• Add folder to Windows Defender exclusions
• Run as administrator
Download
Direct link available
Needed when extracting (WinRAR / 7-Zip) — not a site login.
You May Also Like
View AllDownload Uptime: A Cloud Provider Sim for PC with a direct link or via torrent. Get the full version of Uptime: A Cloud Provider Sim for free. Uptime: A Cloud Provider Sim is a Indie released by RubyRack Games.