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

```bash
cargo add aro
```

```rust
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

- **Guide (mdBook)**[`docs/`]docs/ (`mdbook build docs`; open
  `docs/book/index.html`).
- **API docs**[docs.rs/aro]https://docs.rs/aro
- **Examples**[`examples/blog`]examples/blog,
  [`examples/shortener`]examples/shortener
- **ADRs**[`docs/adr/`]docs/adr/
- **Changelog**[`CHANGELOG.md`]CHANGELOG.md
- **Contributing**[`CONTRIBUTING.md`]CONTRIBUTING.md

## 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](LICENSE).