Full IDE support for the IC10 programming language used in Stationeers. Write, lint, debug, and visually design your IC10 programs directly in VS Code.
- Create a file — create a file with
.ic10or.icextension in your project - Write code — the extension automatically highlights syntax and shows errors
alias Sensor d0
alias Light d1
main:
l r0 Sensor Temperature
s Light Setting r0
yield
j main
- Generate environment — use the IC10: Generate Environment command from the context menu or command palette (
Ctrl+Shift+P). This creates a.ic.jsonfile with device configuration - Debug — press
F5and select IC10: Launch
Instructions, registers, devices, constants, aliases, labels — all highlighted with distinct colors.
Language-server-driven token colors for instructions, registers, devices, aliases, labels, properties, and constants.
Errors and warnings appear in real time. Checks argument counts, types, undefined symbols. Powered by @stationeers-ic/ic10 sandbox validation with i18n support.
Context-aware argument hints. After s — devices, after s d0 — properties (Setting, On...). Completions for instructions, registers (r0-r17, sp, ra), devices (d0-d5, db), and all game constants.
Hover over any element to see detailed information:
| Element | Shows |
|---|---|
Instructions (add, l, s...) |
Description, arguments, example |
Aliases (Sensor) |
Definition (e.g. alias Sensor d0), type (device/register) |
Properties (Temperature) |
Type, description, value range |
Constants (HASH("...")) |
Numeric value (decimal + hex) |
Registers (r0..r17) |
Associated alias if defined, otherwise "Register N" |
Defines (MAX_TEMP) |
Defined value (e.g. define MAX_TEMP 100) |
Labels (main) |
Line number where the label is defined |
Full Debug Adapter Protocol (DAP) implementation with breakpoints, step-through execution, and variable inspection using real context.
| Feature | Description |
|---|---|
| Breakpoints | Click on line number. Conditional: right-click → "Edit Condition" |
| Scopes | Registers (r0-r17), Devices (d0-d5, db), Aliases |
| Debug Console | Type r0, d0, Sensor to inspect values |
| Step/Continue | F10 (step over), F11 (step into), F5 (continue) |
| Feature | Shortcut | Description |
|---|---|---|
| Go to Definition | Ctrl+Click | Jump to alias or label definition |
| Find All References | Shift+F12 | Show all usages of alias/label |
| Rename Symbol | F2 | Rename alias/label across the entire file |
| Document Symbols | Outline panel | Shows all aliases, defines, and labels |
| Formatting | Shift+Alt+F | Normalizes indentation, removes trailing whitespace |
| Code Actions | Ctrl+. | Light bulb suggests fixes: "Did you mean?", "Create alias" |
Visual node-based editor for .ic.json environment files. Drag-and-drop devices, connect ports, configure networks.
- Node Canvas — drag devices on the canvas. MiniMap for navigation, zoom controls, snap-to-grid positioning
- Port Connections — drag from one port to another to create network connections. Incompatible ports are greyed out during drag
- Device Catalog — browse all Stationeers devices with images, search by name, filter by tags (Logic, Power, Pipe, etc.)
- Property Editor — select a device to edit its Ports (network mapping), Properties (logic values), and Slots (equipment)
- Auto-Save — changes are saved automatically to the
.ic.jsonfile with a short delay
Side Panel Tabs:
| Tab | Description |
|---|---|
| Chips | Manage chips linked to .ic10 code files |
| Devices | Add devices from the catalog, view and edit device properties |
| Networks | View and manage networks (Data, Power, Pipe, Chute, Landing) |
Network Types:
| Type | Color | Purpose |
|---|---|---|
data |
Green | Data transfer |
power |
Red | Power supply |
pipe |
Yellow | Pipes (gas) |
chute |
White | Conveyor belts |
landing |
Pink | Landing pads |
Switch between visual editor and raw JSON: right-click tab → Open Visual Editor or Open as JSON.
When an IC10 file is active, the status bar shows $(code) IC10 with real-time error and warning counts.
Errors without a precise code location (e.g. environment or runtime errors) are shown in a dedicated IC10 Warnings output channel instead of highlighting code. Open it via View → Output and select IC10 Warnings from the dropdown.
The .ic.json file describes the physical connection of the chip to devices:
{
"version": 1,
"chips": [{ "id": 1, "file": "main.ic10" }],
"devices": [
{
"id": 1,
"PrefabName": "StructureCircuitHousingCompact",
"chip": 1,
"ports": [{ "port": "default", "network": "base" }]
}
],
"networks": [{ "id": "base", "type": "data" }]
}Generate: right-click on .ic10 file → Generate IC10 Environment.
- Create a
.ic.jsonenvironment (see above) - Open the
.ic10file - Press
F5→ IC10: Launch - Use
F10(step over) andF11(step into) for step-by-step execution
Add to .vscode/launch.json:
{
"type": "ic10",
"request": "launch",
"program": "${file}",
"environment": "${fileDirname}/${fileBasenameNoExtension}.ic.json",
"name": "Debug IC10"
}Open Ctrl+, and search for "IC10":
| Setting | Default | Description |
|---|---|---|
ic10.linting.enabled |
true |
Enable linting |
ic10.linting.severity |
warning |
Diagnostic severity level |
ic10.formatting.indentStyle |
tab |
Indent style (tab/space) |
ic10.formatting.indentSize |
4 |
Indent size |
ic10.completion.contextAware |
true |
Context-aware hints |
ic10.debug.stopOnEntry |
true |
Stop on first line |
ic10.editor.autoOpen |
false |
Auto-open visual editor for .ic.json files |
Open the command palette with Ctrl+Shift+P:
| Command | Description |
|---|---|
| IC10: Generate Environment | Create .ic.json from .ic10 file |
| IC10: Validate File | Validate the current IC10 file |
| IC10: Validate All Files | Validate every IC10 file in the workspace |
| IC10: Toggle Linting | Quickly enable or disable linting |
| IC10: Show Guide | Open the built-in guide |
| IC10: Open Visual Editor | Open .ic.json in the visual editor |
| IC10: Save Environment | Save from the visual editor |
| IC10: Open With Built-In Editor | Switch to raw JSON editor |
Type the prefix and press Tab:
| Prefix | Description |
|---|---|
loop |
Main loop with yield |
ifeq |
Conditional branch if equal |
ifne |
Conditional branch if not equal |
device |
Load device property |
set |
Set device property |
math |
Math operation (add, sub, mul, div) |
compare |
Compare and store result |
hash |
Hash a string value |
const |
Define a constant |
alias |
Create register alias |
sleep |
Sleep for N seconds |
batch |
Batch load by device hash |
# Install dependencies
bun install
# Compile TypeScript
npm run compile
# Watch mode (recompile on save)
npm run watch
# Run tests
bun test
# Lint
bun run lint
# Format check
bun run format:check
# Fix lint + format issues
bun run fix
# Regenerate TextMate grammar
npm run generate:grammar
# Regenerate JSON schema
npm run generate:schema
# Package extension (.vsix)
npm run package
# Launch extension host for testing
npm run open- VS Code ^1.125.0 or newer
- Bun (for development and testing)
- Node.js 18+ (for compilation)
@stationeers-ic/ic10— IC10 emulator and game data library powering this extension
GNU General Public License v3.0 — commercial use allowed, modifications must be published under the same license.