IC10 Language Support for VS Code

Full IDE support for the IC10 programming language used in Stationeers. Write, lint, debug, and visually design your IC10 programs directly in VS Code.
Quick Start
- Create a file — create a file with
.ic10 or .ic extension 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.json file with device configuration
- Debug — press
F5 and select IC10: Launch
Features
Syntax Highlighting
Instructions, registers, devices, constants, aliases, labels — all highlighted with distinct colors.
Semantic Highlighting
Language-server-driven token colors for instructions, registers, devices, aliases, labels, properties, and constants.
Linting
Errors and warnings appear in real time. Checks argument counts, types, undefined symbols. Powered by @stationeers-ic/ic10 sandbox validation with i18n support.
Autocompletion
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 Documentation
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 |
Debugger
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) |
Navigation & Refactoring
| 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 Environment Editor
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.json file 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.
Status Bar
When an IC10 file is active, the status bar shows $(code) IC10 with real-time error and warning counts.
IC10 Warnings Output Channel
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.
Environment Configuration (.ic.json)
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.
Debugging
- Create a
.ic.json environment (see above)
- Open the
.ic10 file
- Press
F5 → IC10: Launch
- Use
F10 (step over) and F11 (step into) for step-by-step execution
Launch Configuration
Add to .vscode/launch.json:
{
"type": "ic10",
"request": "launch",
"program": "${file}",
"environment": "${fileDirname}/${fileBasenameNoExtension}.ic.json",
"name": "Debug IC10"
}
Settings
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 |
Commands
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 |
Snippets
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 |
Development
# 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
Requirements
- VS Code ^1.125.0 or newer
- Bun (for development and testing)
- Node.js 18+ (for compilation)
License
GNU General Public License v3.0 — commercial use allowed, modifications must be published under the same license.