Getting started
Prerequisites: Go 1.24+ with $(go env GOPATH)/bin on your PATH, and
VS Code for the editor experience.
1. Install the CLI
Section titled “1. Install the CLI”go install github.com/joyautomation/nautilus/cmd/nautilus@latestThis gives you nautilus new (scaffold a project), nautilus check
(headless Structured Text compile for CI), and nautilus lsp (the language
server the VS Code extension uses).
2. Scaffold a project
Section titled “2. Scaffold a project”nautilus new my-plant --no-go # manifest project: IEC logic + nautilus.yaml, no Gonautilus new my-plant # or the Go library form (simulated plant, Go tests)A --no-go project is just your logic and a manifest — run and ship it
with the CLI alone:
cd my-plantnautilus run # scan loop + dashboard + tag API on http://localhost:8080nautilus build # emit ./my-plant — a self-contained controller binarynautilus.yaml declares the tasks (one program file each, any language,
own scan rates), the tags by role, the server, and the field driver.
nautilus build emits one deployable binary — no Go toolchain anywhere.
Go is the extension tier: custom field buses, simulation physics, and Go acceptance tests live in the library form, which is the same runtime with the manifest written as code:
cd my-plantgo mod tidy # resolves github.com/joyautomation/nautilus from the proxygo run . # scan loop + tag API on http://localhost:8080go test ./... # the program's acceptance testsOpen http://localhost:8080 for the built-in live dashboard, or
GET /api/state for the raw tag snapshot.
3. Develop in VS Code
Section titled “3. Develop in VS Code”Install nautilus IEC 61131-3 from the VS Code Marketplace or Open VSX — currently on the pre-release channel, so use Install Pre-Release Version. With your project open and the controller running you get compile diagnostics as you type, go-to-definition, hover, completion, and live tag values next to identifiers in your program.
4. Make it yours
Section titled “4. Make it yours”- Write control logic in
program.st— or.ld/.fbd; the graphical languages open in full diagram editors in VS Code. - Swap the simulated plant for a real
io.Driver— EtherNet/IP, Modbus, your bus — when you have hardware. The control logic doesn’t change. - Add an HMI with the SvelteKit component kit: faceplates, trends, and an SSE realtime client.
- Ship it like any Go binary. The scaffolded CI gates on
go testandnautilus check.
- The tag model — how tags come to exist, which role fits which job, and the one rule that bites.
- Language reference — evaluation semantics and every built-in operator, function, and function block.