# Axa
> Accessories library for Axum websites, databases, microservices, and more. A library, not a framework: `main.rs` stays ordinary Axum and
> calls into this crate, with no lifecycle hooks, route macros, or generated code. sqlx is
> the preferred way to reach a database. Version 0.12.1, Rust 1.97 or newer.
## Docs
- [README](README.md): install, quick start, what it provides
- [AGENTS](AGENTS.md): build, test, lint, and conventions
- [Specification](spec/index.md): the single source of truth, each requirement naming its test
- [Changelog](CHANGELOG.md): changes by version
- [llms.json](llms.json): this index, machine-readable
## Skills
- [axa-skill](skill/axa-skill/SKILL.md): building a service with Axa
- [axa-maintainer-skill](skill/axa-maintainer-skill/SKILL.md): working on the Axa codebase
## Guides
- [axa for Loco users](help/axa-for-loco-users/index.md)
- [axa for actix-web users](help/axa-for-actix-users/index.md)
- [axa for Rocket users](help/axa-for-rocket-users/index.md)
- [axa for Poem users](help/axa-for-poem-users/index.md)
- [axa for Topcoat users](help/axa-for-topcoat-users/index.md)
- [From Loco into Axa](help/from-loco-into-axa/index.md)
- [From Loco SeaORM into axa-postgres-seaorm](help/from-loco-seaorm-into-axa-seaorm/index.md)
- [Where the idempotency layer goes](help/idempotency-keys/index.md)
- [Upgrading to 0.12](help/upgrading-to-0.12/index.md)
- [Upgrading to 0.11](help/upgrading-to-0.11/index.md)
- [Upgrading to 0.3](help/upgrading-to-0.3/index.md)
- [The transactional outbox](help/transactional-outbox/index.md)
- [Background jobs and schedules](help/background-jobs/index.md)
## Modules
- [boot](src/boot.rs): Test boot helpers, including `TestApp`
- [cli](src/cli.rs): The shared command line
- [conditional](src/conditional.rs): `ETag`, `304`, and `If-Match`, as RFC 9110 has them
- [config](src/config.rs): Configuration from the process environment
- [context](src/context.rs): `AppContext`, plain Axum state
- [db](src/db.rs): Database helpers for the context
- [error](src/error.rs): The error type and its HTTP mapping
- [extract](src/extract.rs): Extractors that reject with a problem saying what was wrong
- [format](src/format.rs): Response helpers
- [health](src/health.rs): Health routes
- [logger](src/logger.rs): Logging setup, `init` and `init_with`
- [middleware](src/middleware.rs): The standard HTTP middleware stack
- [prelude](src/prelude.rs): Common imports
- [queue](src/queue.rs): The Postgres job queue, over `axa-postgres-job-queue` (feature `queue`)
- [routes](src/routes.rs): Route tables that become an ordinary `Router`
- [server](src/server.rs): Serving, connection limits, and graceful shutdown
- [store](src/store.rs): Shared in-process store
- [task](src/task.rs): Command-line tasks
- [worker](src/worker.rs): Background jobs
## Crates
- [axa-postgres-diesel](crates/axa-postgres-diesel/README.md) (feature `postgres-diesel`): Diesel on PostgreSQL: pooling, migrations, and test resets for Axum services, in pure Rust.
- [axa-postgres-toasty](crates/axa-postgres-toasty/README.md) (feature `postgres-toasty`): Toasty on PostgreSQL: connections, migrations, and test resets for Axum services.
- [axa-mysql-sqlx](crates/axa-mysql-sqlx/README.md) (feature `mysql-sqlx`): MySQL pooling, migrations, and test resets over sqlx for Axum services.
- [axa-mysql-seaorm](crates/axa-mysql-seaorm/README.md) (feature `mysql-seaorm`): SeaORM connections, migrations, schema helpers, and test resets for Axum services on MySQL.
- [axa-mysql-diesel](crates/axa-mysql-diesel/README.md) (feature `mysql-diesel`): Diesel pooling, migrations, and test resets for Axum services on MySQL, in pure Rust.
- [axa-mysql-toasty](crates/axa-mysql-toasty/README.md) (feature `mysql-toasty`): Toasty connections, migrations, and test resets for Axum services, on MySQL.
- [axa-sqlite-sqlx](crates/axa-sqlite-sqlx/README.md) (feature `sqlite-sqlx`): SQLite pooling, migrations, and test resets over sqlx for Axum services.
- [axa-sqlite-seaorm](crates/axa-sqlite-seaorm/README.md) (feature `sqlite-seaorm`): SeaORM connections, migrations, schema helpers, and test resets on SQLite for Axum services, with an easy path from Loco.
- [axa-sqlite-diesel](crates/axa-sqlite-diesel/README.md) (feature `sqlite-diesel`): Diesel pooling, migrations, and test resets for Axum services on SQLite.
- [axa-environment](crates/axa-environment/README.md) (always included): Which environment a service runs in, read one way, with no dependencies.
- [axa-keycloak-auth](crates/axa-keycloak-auth/README.md) (feature `keycloak`): Keycloak bearer authentication and ABAC enforcement for Axum services.
- [axa-openapi-docs](crates/axa-openapi-docs/README.md) (feature `openapi`): Serve OpenAPI documents and a pinned Swagger UI from Axum services.
- [axa-opentelemetry](crates/axa-opentelemetry/README.md) (feature `opentelemetry`): OTLP export of traces and request metrics for Axum services.
- [axa-transactional-outbox](crates/axa-transactional-outbox/README.md) (feature `outbox`, and `outbox-encryption` to seal payloads at rest): A transactional outbox and relay on Postgres for Axum services, that keeps a record of what it delivered and refused.
- [axa-postgres-job-queue](crates/axa-postgres-job-queue/README.md) (feature `queue`): A Postgres job queue, worker pool, and recurring schedules for Axum services.
- [axa-mysql-job-queue](crates/axa-mysql-job-queue/README.md) (a crate on its own, not a feature): A MySQL job queue, worker pool, and recurring schedules for Axum services.
- [axa-sqlite-job-queue](crates/axa-sqlite-job-queue/README.md) (a crate on its own, not a feature): A SQLite job queue, worker pool, and recurring schedules for Axum services.
- [axa-cursor-pagination](crates/axa-cursor-pagination/README.md) (feature `cursor-pagination`): Signed cursor pagination with Link rel=next and no total, and LIKE escaping, for Axum services.
- [axa-paseto-auth](crates/axa-paseto-auth/README.md) (feature `paseto`): PASETO bearer authentication and ABAC enforcement for Axum services.
- [axa-problem](crates/axa-problem/README.md) (always included): RFC 9457 problem details responses for Axum services.
- [axa-prometheus-metrics](crates/axa-prometheus-metrics/README.md) (feature `prometheus`): Prometheus text exposition for Axum services.
- [axa-redis-cache](crates/axa-redis-cache/README.md) (feature `redis`): A Redis cache with mandatory expiry for Axum services.
- [axa-postgres-seaorm](crates/axa-postgres-seaorm/README.md) (feature `postgres-seaorm`): SeaORM on PostgreSQL: connections, migrations, schema helpers, and test resets for Axum services, with an easy path from Loco.
- [axa-web-session](crates/axa-web-session/README.md) (feature `session`): Web sessions for Axum services over axum_session, with safe defaults.
- [axa-postgres-sqlx](crates/axa-postgres-sqlx/README.md) (feature `postgres-sqlx`): PostgreSQL pooling, migrations, and test resets over sqlx for Axum services.
- [axa-maud-templates](crates/axa-maud-templates/README.md) (feature `maud`): Maud compile-time HTML templates with safe escaping and generic errors for Axum services.
- [axa-tera-templates](crates/axa-tera-templates/README.md) (feature `tera`): Tera templates with safe escaping and generic errors for Axum services.
- [axa-test](crates/axa-test/README.md) (a dev-dependency, not a feature): Request-level test helpers for Axa services, built on axum-test.
- [axa-tracing](crates/axa-tracing/README.md) (feature `tracing`): Redaction, request tracking, and asynchronous diagnostics over tracing for Axum services.
- [axa-idempotency-key](crates/axa-idempotency-key/README.md) (feature `idempotency`): Idempotency-Key handling over Postgres for Axum services.
- [axa-request-rate-limit](crates/axa-request-rate-limit/README.md) (feature `ratelimit`): In-process request limits, per client or per key, and failed-login lockout for Axum services.
- [axa-accepts-version-negotiation](crates/axa-accepts-version-negotiation/README.md) (feature `versioning`): Header-based API version negotiation for Axum services.