Foxy 🦊
A minimal, configuration-driven, hyper-extendible Rust HTTP proxy library.
Features
- 🛣️ Powerful Routing: Predicate-based routing with path patterns, HTTP methods, headers, and query matching
- 🔄 Flexible Filters: Pre and post-processing filters for request/response modification
- ⚙️ Configuration Superpowers: Layered configuration from files and environment variables
- 🌐 Fine-grained Control: Route-specific filter chains for precise request handling
- 🚀 Modern Async Architecture: Built on Tokio and Hyper for high performance
- 📦 Lightweight Dependencies: Minimal external dependencies for core functionality
- 🧩 Highly Extensible: Custom predicates and filters through trait-based design
Quickstart
Run the basic proxy example
Run it in your code
Add Foxy as a dependency to your Cargo.toml file
[]
= "..."
Build an instance and start the server.
use Foxy;
// Create a new Foxy instance with layered configuration
let foxy = loader
.with_env_vars // Environment variables (highest priority)
.with_config_file // File-based config (medium priority)
.with_config_file // Defaults (lowest priority)
.build.await?;
// Start the proxy server and wait for it to complete
foxy.start.await?;
Core Principles
- Predictable Routing: Predicate-based matching with clear priorities determines how requests are routed
- Configurable Processing: Route-specific and global filters for request/response modification
- Extensibility: Trait-based design enables custom predicates and filters
- Configuration-Driven: All behavior controlled via flexible configuration with sensible defaults
Configuration
Foxy's power comes from its rich configuration system. Here's a brief overview:
For detailed information on all configuration options, see the Configuration Guide.
Configuration Sources
Foxy supports multiple configuration sources with priority order:
// Build a layered configuration
let foxy = loader
.with_env_vars // First priority
.with_config_file // Second priority
.build.await?;
Example: FOXY_SERVER_PORT=8080 → server.port
Development Status
- Configuration System
- Loader Module
- Core HTTP Proxy
- Predicate-based Routing
- Request/Response Filters
- Additional Security Features
License
This project is licensed under Mozilla Public License Version 2.0