arche
arche is an opinionated backend foundation crate for building production-ready applications with Axum.
It provides a curated set of building blocks commonly required in modern backend services—cloud integrations, databases, authentication, middleware, and logging— so you can focus on business logic instead of repetitive infrastructure wiring.
arche is designed to sit around Axum, not replace it.
Why arche?
Most backend services end up re-implementing the same infrastructure concerns:
- Cloud SDK setup and ergonomics
- Database connection management
- Authentication primitives
- Middleware patterns
- Logging and tracing configuration
- Common error handling
arche brings these pieces together into a cohesive, Rust-native foundation, built on top of well-established libraries and SDKs.
What arche provides
aws
AWS SDK integrations built on official SDKs:
- S3: Client initialization with support for IAM roles or environment-based credentials
gcp
Google Cloud Platform integrations:
- Drive: Google Drive client with service account authentication
- Sheets: Google Sheets client with service account authentication
database
Database connection management:
- Postgres: Connection pooling with
sqlx, configurable credentials, health checks - Redis: Connection pooling with
bb8, async operations, health checks
jwt
JWT utilities for authentication and authorization:
- Token generation and verification (HS256)
- Access/refresh token pair generation
- Token expiry helpers
- Custom claims support
error
Axum-compatible error handling:
AppErrorenum with common HTTP error variants- Automatic
IntoResponseconversion - Structured error responses with details
utils
Common utilities for backend services:
- Timestamp validation and conversion helpers
OffsetDateTimeutilities (Unix, ISO8601)- Pagination parameter types
All components are modular and explicit—nothing is hidden or magical.
Module Reference
AWS (arche::aws)
S3
Initialize an S3 client with automatic credential management:
use get_s3_client;
let client = get_s3_client.await;
Environment Variables:
S3_CRED_SOURCE:"IAM"(default) or"env"for environment-based credentialsS3_ACCESS_KEY_ID: Required when using"env"credential sourceS3_SECRET_ACCESS_KEY: Required when using"env"credential source
GCP (arche::gcp)
Drive
use get_drive_client;
let drive = get_drive_client.await?;
Environment Variables:
GCP_DRIVE_KEY: Path to service account JSON key file
Sheets
use get_sheets_client;
let sheets = get_sheets_client.await?;
Environment Variables:
GCP_SHEETS_KEY: Path to service account JSON key file
Database (arche::database)
Postgres
use ;
let pool = get_pg_pool.await;
let is_healthy = test_pg.await;
Environment Variables:
PG_HOST: Database hostPG_PORT: Database portPG_DATABASE: Database namePG_MAX_CONN: Maximum connections in poolPG_CREDENTIALS: JSON string withusernameandpassword(alternative)PG_USERNAME: Username (if not usingPG_CREDENTIALS)PG_PASSWORD: Password (if not usingPG_CREDENTIALS)
Redis
use ;
let pool = get_redis_pool.await;
let is_healthy = test_redis.await;
Environment Variables:
REDIS_HOST: Redis hostREDIS_PORT: Redis portREDIS_MAX_CONN: Maximum connections in pool
JWT (arche::jwt)
use ;
use ;
// Generate tokens
let access_claims = Claims ;
let refresh_claims = Claims ;
let tokens = generate_tokens;
// Verify token
let token_data = ?;
Error (arche::error)
use AppError;
use IntoResponse;
async
// Custom errors with details
let error = bad_request;
Error Variants:
Unauthorized→ 401BadRequest→ 400UnprocessableEntity→ 422DBError→ 500InternalError→ 500Unavailable→ 503
Utils (arche::utils)
use ;
use OffsetDateTime;
// Timestamp validation
let is_future = validate_timestamp;
// DateTime conversion
let iso_string = offset_dt.to_iso_string?;
// Pagination
let params = PaginationParams ;
What arche is not
- ❌ A framework that replaces Axum
- ❌ A code generator or project template
- ❌ A monolithic abstraction over third-party libraries
- ❌ A "do-everything" utils crate
arche favors composition over abstraction.
Design principles
- Explicit over implicit
- Composition over inheritance
- Thin wrappers over official SDKs
- Production-first defaults
- No global state
- Async-first
Why arche?
Most backend services end up re-implementing the same infrastructure concerns:
- Cloud SDK setup and ergonomics
- Database connection management
- Authentication primitives
- Middleware patterns
- Logging and tracing configuration
- Common error handling
arche brings these pieces together into a cohesive, Rust-native foundation, built on top of well-established libraries and SDKs.
What arche provides
aws
AWS SDK integrations built on official SDKs:
- S3: Client initialization with support for IAM roles or environment-based credentials
gcp
Google Cloud Platform integrations:
- Drive: Google Drive client with service account authentication
- Sheets: Google Sheets client with service account authentication
database
Database connection management:
- Postgres: Connection pooling with
sqlx, configurable credentials, health checks - Redis: Connection pooling with
bb8, async operations, health checks
jwt
JWT utilities for authentication and authorization:
- Token generation and verification (HS256)
- Access/refresh token pair generation
- Token expiry helpers
- Custom claims support
error
Axum-compatible error handling:
AppErrorenum with common HTTP error variants- Automatic
IntoResponseconversion - Structured error responses with details
utils
Common utilities for backend services:
- Timestamp validation and conversion helpers
OffsetDateTimeutilities (Unix, ISO8601)- Pagination parameter types
All components are modular and explicit—nothing is hidden or magical.
Module Reference
AWS (arche::aws)
S3
Initialize an S3 client with automatic credential management:
use get_s3_client;
let client = get_s3_client.await;
Environment Variables:
S3_CRED_SOURCE:"IAM"(default) or"env"for environment-based credentialsS3_ACCESS_KEY_ID: Required when using"env"credential sourceS3_SECRET_ACCESS_KEY: Required when using"env"credential source
GCP (arche::gcp)
Drive
use get_drive_client;
let drive = get_drive_client.await?;
Environment Variables:
GCP_DRIVE_KEY: Path to service account JSON key file
Sheets
use get_sheets_client;
let sheets = get_sheets_client.await?;
Environment Variables:
GCP_SHEETS_KEY: Path to service account JSON key file
Database (arche::database)
Postgres
use ;
let pool = get_pg_pool.await;
let is_healthy = test_pg.await;
Environment Variables:
PG_HOST: Database hostPG_PORT: Database portPG_DATABASE: Database namePG_MAX_CONN: Maximum connections in poolPG_CREDENTIALS: JSON string withusernameandpassword(alternative)PG_USERNAME: Username (if not usingPG_CREDENTIALS)PG_PASSWORD: Password (if not usingPG_CREDENTIALS)
Redis
use ;
let pool = get_redis_pool.await;
let is_healthy = test_redis.await;
Environment Variables:
REDIS_HOST: Redis hostREDIS_PORT: Redis portREDIS_MAX_CONN: Maximum connections in pool
JWT (arche::jwt)
use ;
use ;
// Generate tokens
let access_claims = Claims ;
let refresh_claims = Claims ;
let tokens = generate_tokens;
// Verify token
let token_data = ?;
Error (arche::error)
use AppError;
use IntoResponse;
async
// Custom errors with details
let error = bad_request;
Error Variants:
Unauthorized→ 401BadRequest→ 400UnprocessableEntity→ 422DBError→ 500InternalError→ 500Unavailable→ 503
Utils (arche::utils)
use ;
use OffsetDateTime;
// Timestamp validation
let is_future = validate_timestamp;
// DateTime conversion
let iso_string = offset_dt.to_iso_string?;
// Pagination
let params = PaginationParams ;
What arche is not
- ❌ A framework that replaces Axum
- ❌ A code generator or project template
- ❌ A monolithic abstraction over third-party libraries
- ❌ A “do-everything” utils crate
arche favors composition over abstraction.
Design principles
- Explicit over implicit
- Composition over inheritance
- Thin wrappers over official SDKs
- Production-first defaults
- No global state
- Async-first