The Integrated Circuit (IC10) is the brain of any automated Stationeers base. It is a programmable chip that runs a MIPS-like assembly language, and it is how you make heaters cycle, doors interlock, batteries balance, and atmospheres stay breathable without you babysitting every machine. This guide walks through the IC10 model from the ground up: the hardware it lives in, the registers and device pins you work with, the core instructions in the verified operand order, the limits that trip up almost everyone, and a complete working thermostat you can paste in and adapt.
Stationeers is a deeply simulated space-station construction and survival game from RocketWerkz, the New Zealand studio founded by Dean Hall (of DayZ fame). It launched into Steam Early Access on December 12, 2017, and remains in active Early Access. Its atmospheric, electrical, manufacturing, agriculture, and gravity systems are all simulated in detail, and the intended way to manage them at scale is to write IC10 scripts that read and react to those systems automatically.
What the IC10 actually is
The IC10 chip cannot do anything on its own. It must be inserted into an IC Housing, a kit-built structure that supplies power and the physical connection points to other machines. Once housed and powered, the chip reads and writes the logic variables (called LogicTypes) that every networked Stationeers device exposes. A gas sensor exposes a Temperature LogicType; a heater exposes an On state; a light exposes a Setting. Your script’s whole job is to read some of those values, do arithmetic on them, and write results back.
One mental model to internalize early: in IC10, everything is a number. There are no strings or booleans as separate types. An “on” state is just 1, “off” is 0, and a temperature is a floating-point number of kelvin. That uniformity is what makes the language compact.
The hardware: IC Housing, the chip, and the data network
- The IC Housing has six device I/O connection screws, mapped to device pins d0 through d5. You link a physical machine to a pin by aiming a screwdriver at the housing’s screw and connecting the device to it.
- The housing connects to the station’s DATA network (the green data cable). Devices must be on the same data network to be addressable from the chip.
dbrefers to the chip’s own socket — the device the IC is housed in, sometimes called the “device base” or self connector.
Note that the 6-pin model (d0–d5) is specifically the IC Housing. Some other socketed devices that accept a chip expose fewer pins (d0–d1). When in doubt, the IC Housing is the full six-pin device you will use for most automation.
Writing and loading code: Edit, Confirm, Export
You don’t type code directly onto the chip. You program it through a Computer (or a Laptop, which has a built-in housing). The workflow has three deliberate steps:
- Click Edit to open the in-game IC editor. Write your program, or load one from the Library / paste it in.
- Click Confirm. The program now lives on the Computer, but not yet on the chip.
- Click Export to copy the program onto the Integrated Circuit chip itself.
If the IC Housing is powered, the program runs immediately after export. A Laptop edits only the single chip inside it, not chips already deployed on the network. If you are setting up a fresh server and want the full hardware-side walkthrough alongside the panel basics, our Stationeers server documentation covers getting a station running so you can practice these scripts in a live world.
Registers and device pins
The IC10 model has two kinds of “places” you reference: registers (which hold numbers) and device pins (which point at machines).
| Name | What it is |
|---|---|
r0–r15 | 16 general-purpose registers for temporary values and variables |
ra (register 16) | Return address, auto-managed by jal; don’t normally write it by hand |
sp (register 17) | Stack pointer for the LIFO stack (stack capacity 512 values) |
d0–d5 | The six devices linked to the housing’s screws |
db | The housing / self device |
You almost never touch ra or sp directly until you start writing subroutines with jal or pushing values onto the stack. For most thermostat-and-airlock automation, r0 through a handful of registers plus a couple of device pins is all you need.
Core instructions (verified operand order)
Operand order is the single most common source of confusion in IC10. Memorize this: load is l register device LogicType and store is s device LogicType register. They are not mirror images of each other — the register comes first on a load and last on a store.
Load and store
| Instruction | Syntax | Meaning |
|---|---|---|
l (load) | l r? d? LogicType | Read a device’s logic variable into a register. Ex: l r0 d0 Temperature |
s (store) | s d? LogicType r? | Write a register value to a device’s logic variable. Ex: s d0 On r1 |
ls (load slot) | ls r? d? slotIndex LogicSlotType | Read a slot variable. Ex: ls r0 d0 0 Occupied |
lb (load batch) | lb r? typeHash LogicType batchMode | Read from all devices of a type hash at once, combined by batch mode |
sb (store batch) | sb typeHash LogicType r? | Write to all devices of a type hash |
lbn / lbs | (named / batched-slot variants) | Batch read by type+name hash, or batch slot read |
Batch instructions let one chip command an entire fleet of identical machines without wiring each one to a pin. The batch modes for lb/lbn/lbs are Average (0), Sum (1), Minimum (2), and Maximum (3) — usable by word or by number. Type hashes are produced with the HASH("StructureName") function:
lb r0 HASH("StructureBattery") Ratio Average # average charge ratio across all batteries
Move and arithmetic
move r? value— copy a value or register into a register.add r? a b,sub r? a b,mul r? a b,div r? a b— arithmetic written into a destination register.
The wiki’s instruction index also lists a modulo operation, but its exact name and operand form are not fully confirmed by a primary source here, so confirm the precise syntax in-game before relying on it.
Branching, jumps, and conditionals
j label— unconditional jump.jal label— jump and link (stores the return address inra).- Conditional branches:
beq,bne,bgt,blt,bge,ble. Example:beq r0 9 DoEqualsNinejumps to the labelDoEqualsNineifr0 == 9. - Zero-compare branches:
beqz,bgtz,bltz. - Device branches:
bdse(branch if device set/connected) andbdns(branch if not set). - Set/compare instructions store a 1 or 0 into a register instead of jumping:
slt,sgt,sgtzand similar. Example:slt r0 temp target.
The set/compare family is what keeps simple scripts short. Instead of an if/jump branch to turn something on, you can compute a 1-or-0 with slt and write it straight to a device’s On variable, as the thermostat below demonstrates.
Control flow and housekeeping
yield— halt execution until the next simulation tick (one tick is 0.5 seconds). Essential in every loop.alias name d?/alias name r?— give a device pin or register a readable name. Example:alias sensor d0.define name value— define a named constant. Example:define targetTemp 293.
Reading and writing device logic variables
Every networked device exposes a set of LogicTypes. You read them with l and write them with s. Common ones include Temperature, Pressure, On, Power, Setting, Ratio, Activate, Open, and the slot variable Occupied.
l r0 d0 Temperature # read sensor temperature into r0
s d1 On 1 # turn the device on pin d1 on
s d0 Setting r1 # write r1 into a device's Setting
The authoritative per-device reference is the in-game Stationpedia. It shows exactly which LogicTypes each device supports and whether each one is readable, writable, or both. Always check Stationpedia rather than assuming a device has a given LogicType — heaters, sensors, and consoles differ, and the same word doesn’t exist on every machine.
The limits that trip everyone up
- 128 lines of code maximum per script.
- 128 instructions executed per tick maximum. The chip runs up to 128 instructions per world tick or until it hits a
yield, whichever comes first. - The stack holds 512 values.
- Devices and logic update at most once per tick (twice per second), so looping faster gains nothing.
- The maximum line length is reported as roughly 90 characters, but the exact cap is unconfirmed by a primary source here — treat it as approximate.
The 128-instructions-per-tick rule is the one that bites beginners hardest. A loop with no yield burns the entire 128-instruction budget on a single tick and throws a “too many operations” error — by far the most common IC10 mistake. The fix is simple: put exactly one yield in every loop. Since devices only update once per tick anyway, yielding loses you nothing and keeps the chip running indefinitely.
Worked example: a simple thermostat
This script reads a temperature sensor on d0, turns a heater on d1 on whenever the room is below the target temperature, and yields once per tick. The target is 293 K (about 20 °C).
alias sensor d0 # name the sensor pin
alias heater d1 # name the heater pin
define targetTemp 293 # 293 K target
start:
l r0 sensor Temperature # r0 = current temperature
slt r1 r0 targetTemp # r1 = 1 if r0 < targetTemp, else 0
s heater On r1 # heater On = r1 (on when too cold)
yield # wait one tick (0.5s)
j start # loop forever
How it works: l reads Temperature into r0. slt sets r1 to 1 when the temperature is below targetTemp and 0 otherwise. s writes that 0/1 straight into the heater's On variable, so the heater runs only when the room is too cold. yield pauses until the next tick, and j start loops forever. That single yield is what keeps the script safely inside the 128-instruction-per-tick budget.
The register choices and LogicType names above are illustrative — confirm your specific heater's exact LogicType in Stationpedia before deploying, since not every heater exposes On the same way. From this template you can build hysteresis (separate on/off thresholds to stop rapid toggling), multi-room control, or battery-aware load shedding by adding more reads, comparisons, and stores.
Where to run and practice IC10
IC10 scripting shines most on a persistent multiplayer station where your automation keeps the base alive between sessions. If you want a 24/7 world to build and iterate on with friends, a managed dedicated Stationeers hosting plan gives you an always-on station so your thermostats, airlocks, and power management keep running even when you log off. That persistence is exactly what makes investing time in IC10 worthwhile.
Frequently asked questions
Why does my IC10 chip throw a "too many operations" error?
Almost always because a loop has no yield. The chip executes up to 128 instructions per tick; a loop that never yields keeps running instructions until it exhausts that budget and errors out. Add exactly one yield inside every loop. Because devices update only once per tick, yielding costs you nothing.
What is the correct operand order for load and store?
Load is l register device LogicType (for example l r0 d0 Temperature) and store is s device LogicType register (for example s d0 On r1). The register comes first on a load and last on a store — they are not symmetric, which is a frequent source of bugs.
How do I get a program onto the chip?
Use a Computer or Laptop: click Edit to write the code, Confirm to save it to the Computer, then Export to copy it onto the Integrated Circuit chip. If the IC Housing is powered, the program runs immediately. A Laptop only edits the single chip inside it.
How many devices can one IC Housing control?
An IC Housing has six device pins, d0 through d5, each linked to one machine via its connection screws. Beyond those six, batch instructions like lb and sb let a single chip read from and write to every device of a given type on the data network at once, using a HASH("StructureName") type hash.
What does db mean, and how is it different from d0–d5?
db refers to the chip's own housing — the device the IC is sitting in (the "device base" or self connector). The pins d0–d5 point at the six external machines you wired to the housing's screws. Use db when you need the chip to read or write its own housing's logic variables.
How long is one IC10 tick?
One simulation tick is 0.5 seconds, so the chip processes twice per second. Since networked devices update at most once per tick, there is no benefit to looping faster than one cycle per yield — yield once per loop and let the simulation pace your script.
Ready to play?
Run your own Stationeers server with XGamingServer
Spin up an always-on Stationeers server your friends can join in minutes — no port-forwarding, no tech headaches.







