Architecture
EdgeZero is organized as a Cargo workspace with distinct crates for core functionality, platform adapters, and tooling.
Workspace Layout
edgezero/
├── crates/
│ ├── edgezero-core/ # Core routing, extractors, middleware
│ ├── edgezero-macros/ # Procedural macros (#[action], app!)
│ ├── edgezero-adapter/ # Shared adapter traits and registry
│ ├── edgezero-adapter-fastly/ # Fastly Compute@Edge bridge
│ ├── edgezero-adapter-cloudflare/ # Cloudflare Workers bridge
│ ├── edgezero-adapter-axum/ # Native Axum/Tokio bridge
│ └── edgezero-cli/ # CLI for scaffolding and dev server
└── examples/
└── app-demo/ # Reference applicationCore Crate
edgezero-core provides the runtime-agnostic foundation:
- Routing -
RouterServicewith path parameter matching viamatchit - Request/Response - Portable
http::Requestandhttp::Responsetypes - Body - Unified body type supporting buffered and streaming modes
- Extractors -
Json<T>,Path<T>,Query<T>,Form<T>,Headers,Host,ForwardedHost, andValidated*variants - Middleware - Composable middleware chain with async support
- Manifest -
edgezero.tomlparsing and validation - Compression - Shared gzip/brotli stream decoders
Handlers in your core crate only depend on edgezero-core, keeping them portable.
Macros Crate
edgezero-macros provides compile-time code generation:
#[action]- Transforms async functions into handlers with automatic extractor wiringapp!- Generates router setup from youredgezero.tomlmanifest
Example usage:
rust
// In your core crate's lib.rs
mod handlers;
edgezero_core::app!("../../edgezero.toml");Adapter Crates
Adapters translate between provider-specific types and the portable core model:
edgezero-adapter-fastly
- Converts Fastly
Requesttoedgezero_core::http::Request - Maps core responses back to Fastly
Response - Provides
FastlyRequestContextfor accessing Fastly-specific APIs - Implements
FastlyProxyClientfor upstream requests
edgezero-adapter-cloudflare
- Converts Workers
Requestto core request - Maps responses to Workers
Response - Provides
CloudflareRequestContextfor Workers APIs - Implements
CloudflareProxyClientfor fetch operations
edgezero-adapter-axum
- Wraps
RouterServicein Axum/Tokio services - Powers the local development server
- Supports native container deployments
CLI Crate
edgezero-cli provides the edgezero binary:
edgezero new- Scaffolds a new project with templatesedgezero dev- Runs the local Axum dev serveredgezero build- Builds for a specific adapter targetedgezero serve- Runs provider-specific local servers (Viceroy, wrangler dev)edgezero deploy- Deploys to production
Data Flow
┌─────────────────────────────────────────────────────────────┐
│ Provider Runtime │
│ (Fastly Compute / Cloudflare Workers / Axum Server) │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ Adapter │
│ - into_core_request(): Provider Request → Core Request │
│ - from_core_response(): Core Response → Provider Response │
│ - dispatch(): Full request lifecycle │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ edgezero-core │
│ - RouterService matches routes │
│ - Middleware chain executes │
│ - Handler runs with extracted params │
│ - Response built and returned │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ Your Core Crate │
│ - handlers.rs: Business logic │
│ - lib.rs: App definition via app! macro │
└─────────────────────────────────────────────────────────────┘Feature Flags
Adapter crates use feature flags to gate provider SDKs and CLI integration:
| Feature | Crate | Purpose |
|---|---|---|
fastly | edgezero-adapter-fastly | Fastly SDK integration |
cloudflare | edgezero-adapter-cloudflare | Workers SDK integration |
cli | adapter crates | Register adapters and scaffolding data |
dev-example | edgezero-cli | Bundled demo app for development |
Next Steps
- Learn about the Adapter Contract for extending EdgeZero
- Explore Configuration to customize your app