CLI Reference
Every aro subcommand, what it is for, and the flags worth knowing.
Every command
| Command | What it does |
|---|---|
aro run <path> | Run an application in the interpreter |
aro debug <path> | Step-debug: pause at every statement, inspect, continue |
aro build <path> | Compile to a native binary through LLVM |
aro compile <path> | Compile and report diagnostics, without linking |
aro check <path> | Check sources for errors and warnings |
aro diff <range> | Compare feature-set graphs between two revisions |
aro test <path> | Run the colocated tests — add --compiled to run them through a native binary |
aro repl | Interactive read-eval-print loop |
aro kernel | The native Jupyter kernel, and its installer |
aro new plugin | Scaffold a plugin in Swift, Rust, C, C++, Python or ARO |
aro add <source> | Install a plugin from a Git repository |
aro remove <name> | Uninstall a plugin |
aro plugins | List installed plugins |
aro actions | List every registered action, and optionally every qualifier |
aro lsp | Start the Language Server over stdio |
aro mcp | Start ARO as an MCP server for LLM tooling |
aro ask | Local-model coding assistant that can read, write and test ARO |
aro ui | Open Solaro, the ARO desktop UI, at a project path |
Piping works too — source on stdin is evaluated directly:
echo 'Log "Hi" to the <console>.' | aro
Running and checking
aro run ./MyApp # interpret
aro run ./MyApp -- --port 8080 # arguments after -- reach the application
aro check ./MyApp # errors, warnings, and per-route body analysis
aro check ./MyApp --no-warnings # errors only
aro test ./MyApp --filter pricing # run the tests whose name matches
aro test ./MyApp --compiled # run the same tests through a native binary
Arguments the application reads
Application-Start declares the positionals it reads with the same
takes clause user-defined actions use (ARO-0047), so a tool does not
have to be invoked entirely in flags:
(Application-Start: Crawler takes <url> <depth>) {
Extract the <site> from the <parameter: url>.
Extract the <args> from the <parameter: arguments>. # the whole list
Return an <OK: status> for the <startup>.
}
./crawler https://example.com 3 # positional
./crawler --url https://example.com # a flag of the same name wins
One trap, and it predates positionals
--key value consumes the token after it, so
--verbose https://x binds verbose to the URL. Write
--verbose=true, or put -- before the positionals, to
mean two things.
Building a binary
aro build ./MyApp # native binary, static Swift runtime
aro build ./MyApp --release # optimize + size + strip
aro build ./MyApp --emit-llvm # LLVM IR text instead of a binary
aro build ./MyApp --dynamic # ship libswift*.so beside the binary (rpath=$ORIGIN)
aro build ./MyApp --sign '-' --hardened-runtime
--static is the default and produces one self-contained file. On
Linux, Foundation still links dynamically.
Comparing two revisions
aro diff compares the feature graph — nodes are feature
sets, wires are events, Application.<Name> calls and
repository observers — rather than lines of text. It is derived with the
runtime's own matching rules, so what it shows is what the event bus will
actually wire up:
aro diff --graph main..my-branch
aro diff --graph main..my-branch --html report.html
Plugins
aro new plugin my-csv --lang rust --actions --qualifiers
aro new plugin my-workflows --lang aro
aro add github:org/repo
aro plugins
aro remove my-csv
--lang is required: swift, rust, c, cpp, python or aro.
Interactive and notebook
aro repl # terminal REPL
aro repl --json # line-delimited JSON on stdio, for front-ends
aro kernel install # register the native Jupyter kernel (ZMQ, no Python)
Editor and assistant integration
aro lsp # Language Server over stdio
aro mcp # MCP server for LLM tooling
aro ask "add a rate limit to createOrder"
aro ui ./MyApp # open Solaro at this project
aro lsp, aro mcp, aro ask and
aro kernel are available on macOS and Linux; they are not built
for Windows.
Discovering the language from the CLI
aro actions # all 71 built-in actions, with roles and prepositions
aro actions --qualifiers # and every registered Compute qualifier
aro actions Retrieve # one action in detail
aro actions --format json # machine-readable, for tooling
Learn More
Each command's own --help is authoritative and always current.
For the step debugger see
The
ARO Debugging Guide; for notebooks see
Jupyter Notebooks.