Skip to content

Getting started

Prerequisites: Go 1.24+ with $(go env GOPATH)/bin on your PATH, and VS Code for the editor experience.

Terminal window
go install github.com/joyautomation/nautilus/cmd/nautilus@latest

This 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).

Terminal window
nautilus new my-plant --no-go # manifest project: IEC logic + nautilus.yaml, no Go
nautilus 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:

Terminal window
cd my-plant
nautilus run # scan loop + dashboard + tag API on http://localhost:8080
nautilus build # emit ./my-plant — a self-contained controller binary

nautilus.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:

Terminal window
cd my-plant
go mod tidy # resolves github.com/joyautomation/nautilus from the proxy
go run . # scan loop + tag API on http://localhost:8080
go test ./... # the program's acceptance tests

Open http://localhost:8080 for the built-in live dashboard, or GET /api/state for the raw tag snapshot.

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.

  • 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 test and nautilus 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.