Source-checkedTechnology & automation

IZCode

by Hoppy ∴ · for Stationeers

IZCode - Structured Programming for Stationeers IZCode replaces IC10 with IZ: a structured language with types, real functions and recursion, on its own virtual machine inside the Programmable Chip.…

121Downloads
41d agoLast updated
Steam WorkshopSource

About IZCode

From Steam Workshop

IZCode - Structured Programming for Stationeers IZCode replaces IC10 with IZ: a structured language with types, real functions and recursion, on its own virtual machine inside the Programmable Chip.…

IZCode - Structured Programming for Stationeers

IZCode replaces IC10 with IZ: a structured language with types, real functions and recursion, on its own virtual machine inside the Programmable Chip.

Write #iz on the first line of a chip and IZCode takes over. Chips without the marker keep running as IC10, so existing builds are unaffected.

WHY IT EXISTS

[table] [tr][th]IC10[/th][th]IZ[/th][/tr] [tr][td]128 lines, 4096 bytes[/td][td]2000 lines, 16000 bytes[/td][/tr] [tr][td]16 registers[/td][td]Named variables managed by the compiler[/td][/tr] [tr][td]jal/ra, limited calls[/td][td]Functions, parameters, returns and recursion[/td][/tr] [tr][td]Restarts every tick[/td][td]Freezes and resumes execution[/td][/tr] [tr][td]Infinite loop hangs the chip[/td][td]VM preempts execution automatically[/td][/tr] [tr][td]Typos found at runtime[/td][td]Compile errors with suggestions[/td][/tr] [tr][td]Everything is a double[/td][td]num, bool, str and dev are type-checked[/td][/tr] [tr][td]HASH("text")[/td][td]Real strings with concatenation and comparison[/td][/tr] [tr][td]Loose registers[/td][td]Arrays, structs and lists[/td][/tr] [/table]

A COMPLETE PROGRAM


#iz
device sensor = d0;
device inlet = d1;

const TARGET = 101.325;

fn main() {
  loop {
    var p = sensor.Pressure;
    inlet.On = p < TARGET - 5.0;
    yield;
  }
}

Execution starts at fn main(). When it returns, the chip stops until restarted.

THE LANGUAGE

Types

  • num - 64-bit floating-point number
  • bool - Boolean value
  • str - Immutable ASCII string
  • dev - Device pin d0-d5, or db
  • T[N] - Fixed-size arrays
  • list - Typed collections
  • struct - User-defined structures

num and bool are not interchangeable: if x needs a bool; write if x != 0 for a number.


var counter = 0;
var active: bool = false;
const MAX = 101.325;

Globals keep their values across ticks.

Arrays and Structs

Arrays and structs live in the VM heap, laid out at compile time. No allocator, no GC.


var samples: num[8];

struct Gauge {
  total: num;
  cursor: num;
  samples: num[8];
}

Array length is part of the type; len(a) is compile-time. Aggregates pass by reference.

Lists and Queries

Fixed-size arrays with a count, and LINQ-style queries:


var rooms: list Room[8];

var r: Room;
r.temp = 40;
rooms.add(r);

var mean  = rooms.avg(x => x.temp);
var hot   = rooms.where(x => x.temp > 30);
var worst = rooms.orderByDesc(x => x.temp).first();

Queries:

  • where, select, take, skip
  • takeWhile, skipWhile
  • orderBy, orderByDesc, reverse
  • distinct, sum, avg, min, max
  • count, any, all
  • first, last, firstOr, lastOr
  • contains, indexOf, into

A query chain becomes a single loop, with the lambdas inlined: no intermediate lists, no per-element calls.

Devices

Device properties are checked against the game's LogicType table:


var p = sensor.Pressure;
pump.On = true;

Invalid properties are compile errors: Presure answers did you mean Pressure?

db is the device the chip is installed in, and the only way to reach it: nothing can be wired to it. In a circuit housing it is the housing; in a hardsuit it is the suit, so a program can read its own PressureExternal and drive its AC. On a suit the pins are the wearer's slots: d0 helmet, d1 backpack, d2 toolbelt, d3 glasses, d4 and d5 hands.


device self = db;
self.Setting = 1;

isset(dev) tells whether a pin has a device on it right now, so a program drives whatever is there instead of stopping on an empty pin. IC10's sdse.


device helmet = d0;

if isset(helmet) { helmet.On = true; }

Game Constants

The game's named values, spelled as IC10 spells them:


light.Color = Color.Green;
cooler.Mode = AirCon.Cold;

All 30 groups come from the game itself: Color, GasType, SlotClass, Sound, AirCon, PowerMode, EntityState, LogicType and the rest. Each value folds to its number at compile time, and a typo is a compile error with the nearest name.

Batch Operations

Every matching device on the network:


all(StructureWallLight).On = true;
named("Corridor Light").On = false;
named(StructureVolumePump, "north").On = true;

var avg   = all(StructureGasSensor).Pressure;
var total = all(StructureSolarPanel).PowerGeneration.sum();

A bare read averages; sum(), min(), max() and count() collapse it another way.

A selector can be named and then used like a device on a pin:


device led = named(StructureDiode, #"led-dev");
led.On = true;

Prefab names, #"hash" literals and constants cost nothing at runtime.

Text

Strings are real runtime values: variables, parameters, returns, arrays and structs.


var label = "vent-" + side;
all("Structure" + kind).On = true;

Functions: len, hash, char, chr, sub, find, text, fixed, parse.

Numbers become text only through text(x).

Control Flow

  • if / else if / else
  • while / loop
  • for
  • break / continue

Ranges support 0..10 and 0..=10. There is no goto or labels. Braces are mandatory.

Functions and Recursion

Functions have typed parameters, return values and recursion.


fn gcd(a: num, b: num) -> num {
  if b == 0 {
    return a;
  }
  return gcd(b, a % b);
}

A call-depth limit turns runaway recursion into a clean error.

Operators and Math

Operators follow C precedence. Prefix: -x, !x and ~x. c ? a : b picks one of two values, IC10's select.

Division by zero follows IEEE-754. Assignment is a statement, so if (a = b) does not compile.

Read the full description on Steam Workshop →

Highlights

From source data

Footprint

Rated a light load on a server.

Last update

Its author last shipped an update 41d ago.

IZCode on Nxeon

From our catalogue
One-click install
Not available. One-click install isn't available for this game's mods yet. Download it and upload it to your server in Files.
Server load
light
Smallest plan we suggest
Stationeers — 4 GB (4 GB RAM). This follows our own load rating above, not a benchmark.
Latest build
2026-09-05, released 2026-09-05

Game versions by loader

LoaderGame versionsNewest
Workshop

From 1 recorded build of IZCode.

Run IZCode on a Stationeers server

Deploy a server above, then upload the file in Files.

What kind of mod it is

From the catalog
Listed on Steam Workshop as “Workshop”

Technology & automation

Machines, power, logistics and automation.

Compatibility

Game
Stationeers

Verified at the source

  • ✓Steam WorkshopOfficial listing, checked 2026-10-16Open ↗
  • ✓AuthorHoppy ∴, as published on Steam Workshop
  • ✓LicenseNot published by the sourceFree

IZCode, answered

Generated from the mod’s own source data.

Is it free?

Yes. IZCode is free to download from Steam Workshop.

How do I add it to my Nxeon server?

One-click install isn't available for this game's mods yet. Download IZCode from Steam Workshop and upload it to your Nxeon Stationeers server in Files.

NxLabs

Run IZCode on a Stationeers server.

Deploy in about a minute from $8.99 a month, then upload IZCode in Files.