Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
Armature π¦Ύ
A modern, type-safe HTTP framework for Rust heavily inspired by Angular and NestJS.
Armature brings the elegant decorator syntax and powerful dependency injection from the TypeScript/JavaScript ecosystem to Rust, combining the developer experience of NestJS with Rust's performance and safety guarantees.
Features
- Completely Stateless: No server-side sessions, fully stateless JWT-based authentication
- Decorator Syntax: Use Angular-style decorators via procedural macros
- Full Dependency Injection: Automatic service injection into controllers based on field types
- Type-Safe DI Container: Compile-time verified dependency resolution
- Modular Architecture: Organize your application into modules with providers and controllers
- Service Dependencies: Services can depend on other services with automatic resolution
- Singleton Pattern: Services are created once and shared across the application
- Lifecycle Hooks: NestJS-style hooks (OnModuleInit, OnModuleDestroy, OnApplicationBootstrap, OnApplicationShutdown) for resource management
- Authentication & Authorization: Optional comprehensive auth system with guards, RBAC, and strategies
- OAuth2/OIDC Providers: Built-in support for Google, Microsoft, AWS Cognito, Okta, and Auth0
- SAML 2.0 Support: Enterprise SSO with Service Provider implementation
- Password Hashing: Bcrypt and Argon2 support with auto-detection
- JWT Authentication: Optional JWT token management with HS256/RS256/ES256 support
- Configuration Management: Optional NestJS-style config system with env, .env, JSON, and TOML support
- GraphQL Support: Optional type-safe GraphQL API with queries, mutations, and subscriptions
- Rate Limiting: Token bucket, sliding window, and fixed window algorithms with Redis support
- Response Compression: Automatic gzip, brotli, and zstd compression with content-type awareness
- Comprehensive Logging: Highly configurable structured logging with JSON/Pretty/Plain formats, multiple outputs, and HTTP middleware
- Testing Utilities: Comprehensive testing framework with mocks, spies, and assertions
- Validation Framework: Powerful validation with built-in validators and custom rules
- WebSocket Support: Full-duplex real-time communication with rooms and broadcasting
- Server-Sent Events (SSE): Efficient server-to-client streaming for live updates
- HTTPS/TLS Support: Built-in TLS support with certificate management and automatic HTTP to HTTPS redirect
- OpenTelemetry Integration: Distributed tracing, metrics, and observability with OTLP, Jaeger, Zipkin, and Prometheus support
- Async-First: Built on Tokio and Hyper for high-performance async I/O
- Type-Safe Routing: Path parameters and query string parsing with compile-time validation
- JSON Serialization: Built-in support for JSON request/response handling
Quick Start
Using the CLI (Recommended)
Install the Armature CLI for the best development experience:
# Install the CLI
# Create a new project
# Navigate to your project
# Start the development server with hot reloading
Generate Code
# Generate a controller
# Generate a service
# Generate a complete resource (controller + service + module)
# Generate middleware, guards, and more
Manual Setup
use *;
use ;
// Define your domain model
// Create an injectable service
;
// Create a controller with automatic DI
// Define your application module
;
// Bootstrap your application - DI happens automatically!
async
Architecture
The framework is organized into three main crates:
armature-core
Core runtime functionality including:
- Traits (
Provider,Controller,Module,RequestHandler) - DI Container with type-based resolution
- Router with path parameter extraction
- HTTP request/response types
- Error handling
armature-macro
Procedural macros for decorator syntax:
#[injectable]- Mark structs as injectable services#[controller("/path")]- Define controllers with base paths#[get],#[post],#[put],#[delete],#[patch]- HTTP route decorators#[module(...)]- Organize components into modules#[derive(Body)],#[derive(Param)],#[derive(Query)]- Request parameter extraction
armature
Main library that re-exports everything from core and macros
Decorators
Service Decorators
#[injectable]
Marks a struct as injectable, allowing it to be registered in the DI container:
Controller Decorators
#[controller("/path")]
Marks a struct as a controller with a base path:
Route Decorators
HTTP method decorators for defining routes:
// GET /api/users/
// GET /api/users/:id
// POST /api/users/
// PUT /api/users/:id
// DELETE /api/users/:id
// PATCH /api/users/:id
Module Decorator
#[module(...)]
Defines a module with providers, controllers, and imports:
;
Dependency Injection
The DI container uses Rust's type system for service resolution:
// Register a service
container.register;
// Resolve a service
let service = container.?;
Services are singletons by default and shared across the application.
Lifecycle Hooks
Armature provides NestJS-inspired lifecycle hooks for managing service initialization and cleanup:
use *;
use ;
use async_trait;
Available hooks:
OnModuleInit- Called after module initializationOnModuleDestroy- Called before module destructionOnApplicationBootstrap- Called after full application bootstrapOnApplicationShutdown- Called during graceful shutdownBeforeApplicationShutdown- Called before shutdown hooks
See the Lifecycle Hooks Guide for complete documentation.
Routing
The router supports:
- Static paths:
/users - Path parameters:
/users/:id - Query parameters:
/users?page=1&limit=10 - Multiple HTTP methods per route
Path parameters are extracted automatically:
async
HTTP Status Codes and Error Handling
Comprehensive HTTP status code support with type-safe error handling:
use ;
// Type-safe status codes
let status = NotFound;
assert_eq!;
assert_eq!;
// Structured errors for all 4xx/5xx codes
return Err;
return Err;
return Err;
// Error helpers
let error = Unauthorized;
assert_eq!;
assert!;
See the HTTP Status & Errors Guide for complete documentation.
Guards and Interceptors
Protect and transform your routes with Guards and Interceptors:
use ;
// Apply authentication guard
let guard = AuthenticationGuard;
let context = new;
match guard.can_activate.await
// Built-in guards: AuthenticationGuard, RolesGuard, ApiKeyGuard
// Built-in interceptors: LoggingInterceptor, TransformInterceptor, CacheInterceptor
See the Guards & Interceptors Guide for detailed documentation.
Request/Response Handling
Request
The HttpRequest type provides:
json::<T>()- Parse body as JSONparam(name)- Get path parameterquery(name)- Get query parameter- Access to headers and raw body
Response
The HttpResponse type provides:
- Status code setting
- Header management
- JSON serialization via
with_json() - Helper constructors:
ok(),created(),not_found(), etc.
JSON Helper
Use the Json<T> wrapper for automatic serialization:
async
Error Handling
The framework provides a comprehensive Error type:
Errors are automatically converted to HTTP responses with appropriate status codes.
Testing
Run the test suite:
Build the library:
Run example applications:
# Full-featured example with CRUD operations
# Simple routing example
# REST API example
Test the endpoints (when running full_example):
# Health check
# Get all users
# Get user by ID
# Create a user
Project Structure
armature/
βββ armature-core/ # Core runtime library
β βββ src/
β βββ traits.rs # Core traits
β βββ container.rs # DI container
β βββ routing.rs # Router implementation
β βββ http.rs # HTTP types
β βββ error.rs # Error types
β βββ application.rs # Application bootstrap
βββ armature-macro/ # Procedural macros
β βββ src/
β βββ injectable.rs # #[injectable] macro
β βββ controller.rs # #[controller] macro
β βββ routes.rs # Route macros
β βββ module.rs # #[module] macro
β βββ params.rs # Parameter extraction
βββ armature-compression/ # HTTP response compression
β βββ src/
β βββ algorithm.rs # Compression algorithms (gzip, brotli, zstd)
β βββ config.rs # Configuration builder
β βββ middleware.rs # Compression middleware
βββ src/
β βββ lib.rs # Main library (re-exports)
βββ examples/ # Example applications
β βββ full_example.rs # Complete CRUD example
β βββ simple.rs # Basic routing
β βββ rest_api.rs # REST API demo
βββ Cargo.toml # Workspace manifest
Armature CLI
The Armature CLI provides powerful code generation and development tools:
Installation
Commands
| Command | Description |
|---|---|
armature new <name> |
Create a new project from templates |
armature generate controller <name> |
Generate a controller |
armature generate service <name> |
Generate a service/provider |
armature generate module <name> |
Generate a module |
armature generate middleware <name> |
Generate middleware |
armature generate guard <name> |
Generate a guard |
armature generate resource <name> |
Generate controller + service + module |
armature dev |
Start development server with file watching |
armature build |
Build for production |
armature info |
Display project information |
Project Templates
# Minimal API (default)
# Full-featured API with auth, validation, Docker
# Microservice with queue worker
Development Server
The armature dev command starts a development server with automatic rebuilding:
# Start with default settings (port 3000)
# Custom port
# Uses cargo-watch if installed for better performance
Design Principles
- Compile-Time Safety: All metadata is captured at compile time via macros
- Zero-Cost Abstractions: Minimal runtime overhead
- Type-Driven: Leverage Rust's type system for DI and routing
- Async-First: Built on Tokio for efficient async I/O
- Modular: Organize code into reusable modules
Comparison with Other Frameworks
vs Actix-Web
- Armature provides Angular-style decorators and DI
- More opinionated structure
- Built-in module system
vs Axum
- Armature uses decorators instead of extractors
- Explicit DI container vs implicit FromRequest
- Modular architecture by default
vs Rocket
- Similar decorator syntax but with async support
- Type-safe DI without macros
- More flexible module system
Roadmap
- Full DI integration with auto-wiring
- Middleware support
- Guards and interceptors
- WebSocket support
- GraphQL integration
- OpenAPI/Swagger generation
- Authentication/authorization modules (JWT, OAuth2, SAML)
- Testing utilities
- Response compression (gzip, brotli, zstd)
- Database integration modules
-
#[use_middleware]decorator syntax
Acknowledgments
This project is heavily inspired by:
- Angular by Google - For pioneering decorator-based DI and modular architecture
- NestJS by Kamil MyΕliwiec - For bringing Angular patterns to the server-side
We're grateful to these projects and their communities for showing what great developer experience looks like. Armature aims to bring these same patterns to the Rust ecosystem with the added benefits of memory safety and native performance.
License
MIT
Documentation
π Live Documentation Website: https://pegasusheavy.github.io/armature/
Comprehensive documentation is available in the docs/ directory:
Getting Started:
- Dependency Injection Guide - Complete DI system documentation
- Configuration Guide - Configuration management system
Core Features:
- Lifecycle Hooks Guide - Service lifecycle management with hooks
- Authentication Guide - JWT, OAuth2, and SAML authentication
- Guards & Interceptors - Request processing and authorization
- Rate Limiting Guide - API rate limiting with multiple algorithms
- Compression Guide - HTTP response compression middleware
βοΈ Cloud Providers:
- Cloud Providers Guide - AWS, GCP, and Azure integrations
- Redis Guide - Centralized Redis with connection pooling
Advanced:
- GraphQL Guide - GraphQL API development
- WebSocket & SSE Guide - Real-time communication guide
- Logging Guide - Structured logging with tracing
- Parallel Processing Guide - Multithreading and optimization
And more guides covering testing, security, and deployment!
βοΈ Cloud Provider Integrations
Armature provides first-class integrations with major cloud providers through dedicated crates:
| Crate | Provider | Key Services |
|---|---|---|
armature-aws |
Amazon Web Services | S3, DynamoDB, SQS, SNS, SES, Lambda, KMS, Cognito |
armature-gcp |
Google Cloud Platform | Cloud Storage, Pub/Sub, Firestore, Spanner, BigQuery |
armature-azure |
Microsoft Azure | Blob Storage, Cosmos DB, Service Bus, Key Vault |
armature-redis |
Redis | Connection pooling, Pub/Sub, Cluster support |
Features:
- π Dynamic Service Loading - Only compile what you need via feature flags
- π DI Integration - Register once, inject across your entire application
- β‘ Lazy Initialization - Services created on-demand
- π§ Environment Config - Reads from standard cloud environment variables
// Add only the services you need
armature-aws =
armature-gcp =
armature-redis = "0.1"
// Register cloud services in your DI container
// Use in controllers via injection
π See the Cloud Providers Guide for complete documentation.
Website Development
The documentation website is an Angular 21 application located in the web/ directory.
Local Development:
Then open http://localhost:4200 in your browser.
Building for Production:
The built website will be in web/dist/web/browser/.
GitHub Pages Deployment:
The website automatically deploys to GitHub Pages when changes are merged to the main branch.
Contributing
Contributions are welcome! Please read our Contributing Guide and feel free to submit a Pull Request.