⚡ Quick Links
Learn ARO
Start here if you're new to the language
Getting Started
Build your first ARO application in 5 minutes. Learn the basics of features, feature sets, and contract-first development.
Start tutorial →The FDD Story
Discover the history of Feature-Driven Development—the forgotten methodology that inspired ARO.
Read the story →Tutorial
A hands-on tutorial building a complete ARO application step by step. Learn by doing.
Start tutorial →Solaro IDE
The ARO IDE: a canvas that lights up as your program runs, a debugger that steps by statement, notebooks, and a local AI assistant.
Take the tour →Core Concepts
Deep dives into ARO's architecture
The Basics
Understand the Action-Result-Object pattern, prepositions, and how ARO statements work.
Learn basics →Computations
The Compute action and its qualifiers: text, collections, hashing, encoding and escaping — plus what happens when you invent one.
Read more →Feature Sets
How to organize your code into feature sets and manage business capabilities.
Learn feature sets →Actions
The complete guide to ARO actions—Extract, Create, Validate, Store, Return, and more.
Explore actions →Application Lifecycle
Application-Start, Application-End, and how to manage your app's lifecycle.
Learn lifecycle →User-Defined Actions
Reusable logic written in ARO itself. A feature set any other feature set can call as Application.<Name>, recursion included.
Packages
Extend ARO with community packages. Install plugins, manage dependencies, and add new capabilities.
Learn packages →Powerful Features
What makes ARO remarkable
Event-Driven Architecture
Simple event dispatch between feature sets. Emit events by name, no subscriptions or complex pub/sub needed.
Learn events →State Transitions
Manage state machines with OpenAPI enums and a simple Accept action. Runtime validates all transitions.
Learn states →Data Pipelines
Filter, transform, and aggregate collections with map/reduce style operations. All results typed via OpenAPI.
Learn pipelines →Native Compilation
Compile ARO to LLVM IR and native binaries. Fast startup, lower memory, single binary deployment.
Learn compilation →Working with Dates
Date and time handling with timezone support, relative offsets, ranges, and recurrence patterns.
Learn dates →HTML Parsing
Turn a fetched page into links, text, Markdown or any CSS
selection — including attributes, with a@href.
Set Operations
Compute intersections, differences, and unions on lists, strings, and objects with polymorphic operations.
Learn set ops →Runtime Metrics
Built-in execution metrics with action counts, timing, and Prometheus-compatible export. Zero configuration.
Learn metrics →Streaming Execution
Process arbitrarily large datasets with constant memory. Same syntax, streaming under the hood.
Learn streaming →Concurrency
What runs at the same time as what. Statement overlap, ordered effects, and parallel for each.
Testing
Tests colocated with the code they exercise. Given, When, Then — and stripped out of native binaries.
Write tests →Git
Status, staging, commits, branches and tags as ordinary statements, backed by libgit2 — with an event for every change.
Learn Git →Interactive REPL
Explore ARO interactively. Execute statements, inspect results, and prototype features in real time.
Try the REPL →Jupyter Notebooks
Run ARO in notebooks — in Solaro's .repl editor or any Jupyter front-end via the native kernel. Prose, live cells, and outputs in one document.
Open a notebook →Building APIs
Create powerful HTTP services with ARO
Contract-First Development
How OpenAPI contracts drive your ARO applications. Define your API first, then implement.
Learn contract-first →HTTP Client
Fetch data from external APIs with the Request action. GET, POST, PUT, DELETE and more.
Make HTTP requests →File Operations
Read, write, copy, move, and manage files and directories with cross-platform actions.
Learn file ops →Format-Aware File I/O
Automatic format detection and serialization for JSON, CSV, YAML, XML, TOML, and 8 more formats. Zero boilerplate.
Learn formats →Request Bodies
Bodies that stream through a route cost nothing; bodies you read become values, and values have a limit. x-aro-max-body per route.
TCP Sockets
Real-time communication with TCP sockets and bidirectional data flow for backend services.
Learn sockets →WebSockets
Real-time bidirectional communication for web apps. Push updates to browsers instantly.
Learn WebSockets →Template Engine
Dynamic HTML generation with variable interpolation, conditionals, loops, and includes.
Learn templates →Terminal UI
Build interactive terminal applications with colors, styling, live updates, and reactive Watch patterns.
Learn Terminal UI →Repositories
In-memory data storage with querying, updates, and change observers for reactive patterns.
Learn repositories →Reference
Detailed specifications and proposals
Language Proposals
60+ evolution proposals documenting every aspect of the ARO language design.
Browse proposals →CLI Reference
Every aro subcommand — run, build, check, diff, test, repl, kernel, lsp, mcp, ask — and the flags worth knowing.
AI Development Guide
Writing ARO with a language model in the loop: what to put in context, and the mistakes models make.
Read the guide →External Services
Integrate with external APIs and libraries using the Call action. Create custom service plugins.
Learn services →Creating Custom Actions
Extend ARO with your own actions. Learn the ActionImplementation protocol and registration.
Create actions →Events Guide
How to use events in ARO applications. Emit, handle, and compose event-driven systems.
Learn events →Writing Extensions
Create your own ARO packages with custom actions and feature sets. Share with the community.
Write extensions →