ARO (Action-Result-Object) is a declarative programming language where business logic reads like a requirements document. Every statement follows one pattern:
Action the <Result> from/to/with the <Object>.
No classes. No callbacks. No boilerplate. Just what the system should do.
Define your contract in OpenAPI, then write the handlers:
(createUser: User API) {
Extract the <user-data> from the <request: body>.
Create the <user> with <user-data>.
Store the <user> into the <user-repository>.
Emit a <UserCreated: event> with <user>.
Return a <Created: status> with <user>.
}
That's a complete endpoint. The runtime handles validation, error responses, and HTTP plumbing.
Feature sets are triggered by events, not called directly:
(* HTTP route handlers match OpenAPI operationIds *)
(listUsers: User API) {
Retrieve the <users> from the <user-repository>.
Return an <OK: status> with <users>.
}
(* Domain events trigger side effects *)
(Send Welcome Email: UserCreated Handler) {
Extract the <email> from the <event: email>.
Send the <welcome-email> to the <email>.
Return an <OK: status> for the <notification>.
}
(* Repository observers react to data changes *)
(Audit Log: user-repository Observer) {
Extract the <change> from the <event: change>.
Log <change> to the <console>.
Return an <OK: status> for the <audit>.
}
Filter, aggregate, and transform collections in plain language:
Create the <orders> with [
{id: 1, amount: 500, status: "active"},
{id: 2, amount: 75, status: "cancelled"},
{id: 3, amount: 300, status: "active"}
].
Filter the <active-orders> from the <orders> where <status> is "active".
Reduce the <total: Float> from the <active-orders> with sum(<amount>).
ARO code contains only the success case. If a user can't be retrieved, the runtime responds automatically:
Can not retrieve the user from the user-repository where id = 530
No try/catch. No error types. The code is the error message.
brew tap arolang/aro
brew install aro
aro run ./MyApp- Website - Language overview and guides
- Documentation - Full reference
- Repository - Source code and 65+ examples
- Getting Started - Build your first app