Skip to content
/ aro Public

ARO is a declarative language for specifying business features in a human-readable format that can be compiled and executed. Features are expressed as Action-Result-Object statements.

License

Notifications You must be signed in to change notification settings

arolang/aro

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

ARO Logo

Business Logic as Language
A declarative language where code reads like documentation

Website · Documentation · Language Guide (PDF) · Discussions · Mastodon


What is ARO?

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.

Features

Contract First APIs

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>.
}

Event Driven Architecture

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>.
}

Native Compilation

Compile to standalone binaries. No runtime installation required on target systems.

aro build ./MyApp
./MyApp

Built in Services

HTTP 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>.
}

Extensible Actions

When the 51 built in actions are not enough, write custom actions in Swift or distribute them as plugins through Swift Package Manager.

Happy Path Philosophy

Write only the success case. Errors are reported automatically in business terms. When a user cannot be retrieved, the message says exactly that.

Quick Start

(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 ./HelloWorld

Documentation

The 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.

Installation

macOS (Homebrew)

The easiest way to install ARO on macOS:

brew tap arolang/aro
brew install aro

Verify installation:

aro --version

Binary Releases

Pre-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.

Build from Source

See the Building from Source section below for detailed instructions.

Building from Source

ARO is written in Swift 6.2 and uses Swift Package Manager.

macOS

Xcode 16.3 or later includes Swift 6.2.

git clone https://github.com/arolang/aro.git
cd aro
swift build -c release

The binary is at .build/release/aro.

Linux

Install Swift 6.2 from swift.org.

git clone https://github.com/arolang/aro.git
cd aro
swift build -c release

The binary is at .build/release/aro.

Windows

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 release

The binary is at .build\release\aro.exe.

Running Tests

Unit Tests

Run Swift unit tests for the parser, runtime, and compiler:

swift test

Integration Tests

Run 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=HTTP

The 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.

Examples

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/HTTPServer

Contributing

ARO is in active development. Contributions are welcome.

Code Reviews

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

Troubleshooting

macOS Gatekeeper Warning

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 aro

Homebrew automatically handles security attributes.

Option 2: Remove quarantine attribute

xattr -d com.apple.quarantine /usr/local/bin/aro

Option 3: Right-click method

  1. Right-click the aro binary in Finder
  2. Select "Open"
  3. Click "Open" in the security dialog

License

MIT License


ARO: Making business features executable

About

ARO is a declarative language for specifying business features in a human-readable format that can be compiled and executed. Features are expressed as Action-Result-Object statements.

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Packages

No packages published

Contributors 5