Business Logic as Language
A declarative language where code reads like documentation
Website · Documentation · Language Guide (PDF) · Discussions · Mastodon
ARO is a programming language designed to express business features in a form that both developers and domain experts can read. Every statement follows a consistent grammatical pattern:
<Action> the <Result> preposition the <Object>.
This constraint is intentional. When there is only one way to express an operation, code review becomes trivial and onboarding becomes fast. ARO code reads like a description of what happens, not instructions for how to make it happen.
(createUser: User API) {
<Extract> the <data> from the <request: body>.
<Validate> the <data> against the <user: schema>.
<Create> the <user> with <data>.
<Store> the <user> into the <user-repository>.
<Emit> a <UserCreated: event> with <user>.
<Return> a <Created: status> with <user>.
}
A compliance officer can audit this. A new developer can understand it in seconds. The code is the documentation.
HTTP routes are defined in an OpenAPI specification. Feature sets are named after operation identifiers. No routing configuration in code.
# openapi.yaml
paths:
/users:
get:
operationId: listUsers(listUsers: User API) {
<Retrieve> the <users> from the <user-repository>.
<Return> an <OK: status> with <users>.
}
Feature sets respond to events rather than being called directly. Emit an event and handlers execute automatically. Add new behaviors by adding handlers without modifying existing code.
(Send Welcome Email: UserCreated Handler) {
<Extract> the <user> from the <event: user>.
<Send> the <welcome-email> to the <user: email>.
<Return> an <OK: status> for the <notification>.
}
Compile to standalone binaries. No runtime installation required on target systems.
aro build ./MyApp
./MyAppHTTP server and client, file system operations with directory watching, and TCP sockets are available without external dependencies.
(Application-Start: File Watcher) {
<Watch> the <file-monitor> for the <directory> with "./data".
<Keepalive> the <application> for the <events>.
<Return> an <OK: status> for the <startup>.
}
When the 51 built in actions are not enough, write custom actions in Swift or distribute them as plugins through Swift Package Manager.
Write only the success case. Errors are reported automatically in business terms. When a user cannot be retrieved, the message says exactly that.
(Application-Start: Hello World) {
<Log> "Hello from ARO!" to the <console>.
<Return> an <OK: status> for the <startup>.
}
Save as main.aro in a directory called HelloWorld, then:
aro run ./HelloWorldThe complete language guide is available as a PDF in the Releases page, or download the latest version directly. It covers:
- The ARO mental model and philosophy
- Statement anatomy and feature sets
- Data flow and the event bus
- OpenAPI integration
- Built in services (HTTP, files, sockets)
- Custom actions and plugins
- Native compilation
- Patterns and practices
For a detailed look at the implementation, see OVERVIEW.md.
The easiest way to install ARO on macOS:
brew tap arolang/aro
brew install aroVerify installation:
aro --versionPre-built binaries are available for all platforms:
macOS (ARM64):
curl -L https://github.com/arolang/aro/releases/latest/download/aro-macos-arm64.tar.gz | tar xz
sudo mv aro /usr/local/bin/Linux (x86_64):
curl -L https://github.com/arolang/aro/releases/latest/download/aro-linux-amd64.tar.gz | tar xz
sudo mv aro /usr/local/bin/Windows (x86_64): Download the latest release from GitHub Releases and add to PATH.
See the Building from Source section below for detailed instructions.
ARO is written in Swift 6.2 and uses Swift Package Manager.
Xcode 16.3 or later includes Swift 6.2.
git clone https://github.com/arolang/aro.git
cd aro
swift build -c releaseThe binary is at .build/release/aro.
Install Swift 6.2 from swift.org.
git clone https://github.com/arolang/aro.git
cd aro
swift build -c releaseThe binary is at .build/release/aro.
Install Swift 6.2 from swift.org. Ensure the Swift toolchain is in your PATH.
git clone https://github.com/arolang/aro.git
cd aro
swift build -c releaseThe binary is at .build\release\aro.exe.
Run Swift unit tests for the parser, runtime, and compiler:
swift testRun integration tests for all examples (two-phase: interpreter + native binary):
# Run all examples
./test-examples.pl
# Run specific examples
./test-examples.pl HelloWorld Calculator HTTPServer
# Verbose output
./test-examples.pl --verbose
# Filter by pattern
./test-examples.pl --filter=HTTPThe integration test framework is modular and located in Tests/AROIntegrationTests/:
- 17 modules organized by responsibility
- Two-phase testing (run + build)
- Automatic type detection (console, HTTP, socket, file)
- Pattern matching with placeholders
- 109 unit tests validating framework behavior
See Tests/AROIntegrationTests/README.md for complete documentation.
The Examples/ directory contains working applications:
| Example | Description |
|---|---|
| Calculator | Test framework demonstration |
| Computations | Arithmetic and data transformations |
| Conditionals | Conditional logic and branching |
| ContextAware | Context-aware feature sets |
| CustomPlugin | Custom action plugin example |
| DataPipeline | Data pipeline processing |
| DirectoryLister | Directory listing operations |
| EchoSocket | TCP server echoing messages |
| Expressions | Expression evaluation |
| ExternalService | External service integration |
| FileOperations | File system operations |
| FileWatcher | Directory monitoring with event handlers |
| HTTPClient | HTTP client requests |
| HTTPServer | Web server with OpenAPI routing |
| HelloWorld | Minimal single file application |
| HelloWorldAPI | Simple HTTP API example |
| Iteration | Loop and iteration patterns |
| ModulesExample | Application composition with imports |
| OrderService | Order management service |
| RepositoryObserver | Repository change observers |
| Scoping | Variable scoping demonstration |
| SimpleChat | Simple chat application |
| Split | String splitting operations |
| SystemMonitor | System monitoring example |
| UserService | Multi file application with events |
| ZipService | ZIP file operations |
Run any example with:
aro run ./Examples/HTTPServerARO is in active development. Contributions are welcome.
- Open an issue for bugs or feature requests
- Join the discussion for questions and ideas
- Follow on Mastodon for daily language tips and updates
- Read the Evolution Proposals to understand the language design
You can request an AI-powered code review on any pull request by commenting:
@claude review
Claude will analyze the PR for bugs, security issues, performance problems, and code quality. It will create suggested fixes as actual code changes in a new branch and submit them as a review PR.
The review will:
- ✅ Check for bugs and logical errors
- ✅ Identify security vulnerabilities
- ✅ Suggest performance improvements
- ✅ Ensure code follows project guidelines (CLAUDE.md)
- ✅ Verify test coverage
Official releases (from GitHub Releases) are code-signed and notarized by Apple, so you should not see any warnings.
If you build from source or use a development build and see a security warning:
"Apple could not verify 'aro' is free of malware that may harm your Mac or compromise your privacy."
You have several options:
Option 1: Use Homebrew (Recommended)
brew tap arolang/aro
brew install aroHomebrew automatically handles security attributes.
Option 2: Remove quarantine attribute
xattr -d com.apple.quarantine /usr/local/bin/aroOption 3: Right-click method
- Right-click the
arobinary in Finder - Select "Open"
- Click "Open" in the security dialog
MIT License
ARO: Making business features executable
