aro 1.0.0

Aro — a Rust web framework using hexagonal architecture
Documentation

Aro

Aro is a Rust web framework built as a hexagonal Axum adapter: ports live in aro-core, HTTP and DI adapters in aro-web, persistence adapters in aro-fletch / fletch-orm, and the aro crate is the facade you depend on.

It aims for a small, stable 1.0 surface — routing, macros, dependency injection, JSON errors, and a blessed persistence path — while leaving advanced web concerns to the Axum / tower ecosystem.

Quickstart

cargo add aro
use aro::prelude::*;
use std::net::SocketAddr;

#[aro::get("/")]
async fn hello() -> &'static str {
    "Hello, Aro!"
}

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let addr: SocketAddr = "0.0.0.0:3000".parse()?;
    App::new()
        .routes(routes![hello])
        .serve(addr)
        .await?;
    Ok(())
}

Default features enable web and macros. Add fletch (and related flags) when you need the persistence adapters.

Feature flags

Feature Default Description
web yes HTTP / DI layer (aro-web, including App)
macros yes Route attribute macros (#[aro::get], …)
fletch no Persistence adapters (aro-fletch + fletch-orm query adapters)
test-utils no In-process TestClient helpers
http2 no HTTP/2 support via Axum
compression no Response compression (gzip, brotli)
compression-full no Compression plus zstd and deflate
decompression no Request decompression (gzip, brotli)
decompression-full no Decompression plus zstd and deflate
uuid no UUID column / value support (implies fletch)
chrono no Chrono datetime support (implies fletch)
query-adapters no Query adapter wiring (pulled in by fletch)

MSRV

Aro’s minimum supported Rust version is 1.85.0 (Rust 2024 edition). The MSRV is bumped only in minor releases, and only to a toolchain that is at least six months old.

Documentation

Intentionally delegated to the ecosystem

Aro 1.0 does not ship first-class solutions for these. Use Axum, tower, and related crates instead:

  • Authentication and authorization
  • Sessions / cookies
  • TLS termination
  • Metrics and observability exporters
  • OpenAPI generation
  • Static file serving
  • WebSockets

Aro re-exports Axum as an escape hatch (aro::web::axum) so you can compose those layers without fighting the framework.

License

MIT — see LICENSE.