3 unstable releases
| new 0.1.1 | Dec 22, 2025 |
|---|---|
| 0.1.0 | Nov 30, 2025 |
| 0.0.0 | Oct 1, 2025 |
#541 in HTTP server
210KB
3.5K
SLoC
maker_web
High-performance, zero-allocation HTTP server for microservices
✨ Features
🔒 Security & Protection
- Built-in DoS/DDoS protection - enabled by default, with no performance penalty.
- Fully configurable limits and timeouts for requests, responses, and connections.
- Custom connection filtering - implement the
ConnectionFiltertrait to reject unwanted connections at the TCP level.
⚡ Performance & Memory
- Zero-allocation - no memory allocations after server startup.
- Pre-allocated memory for each connection - linear and transparent scaling.
🌐 Protocol & Management
- Full HTTP stack -
HTTP/1.1,HTTP/1.0,HTTP/0.9+with keep-alive. - Automatic protocol detection for each request - keep-alive eliminates the need for manual protocol selection.
- Storing data between requests - ability to store data between requests in a
single connection using the
ConnectionDatatrait.
🏭 Production Ready
- Graceful performance degradation - automatic 503 responses when overloaded.
- Custom error format - structured JSON (with codes/descriptions) or a plain HTTP response.
- Resource protection - automatic closure of connections exceeding set limits.
🎯 Use Cases
- High-throughput microservices - configurable for specific workloads
- Resource-constrained environments - predictable memory usage
- Internal APIs - security-conscious defaults
- Performance-critical applications - zero-allocation design
- Legacy system integration - HTTP/1.0 compatibility
🌐 Not just code
Everything that remains outside the documentation—live statistics, deep details, and informal plans—I collect on a separate website. This is a space that I strive to keep current and meaningful.
🚀 Quick Start
1. Installation
Add maker_web and tokio to your Cargo.toml:
cargo add maker_web tokio --features tokio/full
Or manually:
[dependencies]
maker_web = "0.1"
tokio = { version = "1", features = ["full"] }
2. Usage example
use maker_web::{Handled, Handler, Request, Response, Server, StatusCode};
use tokio::net::TcpListener;
struct MyHandler;
impl Handler<()> for MyHandler {
async fn handle(&self, _: &mut (), req: &Request, resp: &mut Response) -> Handled {
match req.url().path_segments() {
[b"api", user, b"name"] => {
resp.status(StatusCode::Ok).body(user)
}
[b"api", user, b"name", b"len"] => {
resp.status(StatusCode::Ok).body(user.len())
}
[b"api", b"echo", text] => {
resp.status(StatusCode::Ok).body(text)
}
_ => resp.status(StatusCode::NotFound).body("qwe"),
}
}
}
#[tokio::main]
async fn main() {
Server::builder()
.listener(TcpListener::bind("127.0.0.1:8080").await.unwrap())
.handler(MyHandler)
.build()
.launch()
.await;
}
📖 Examples
Check the examples directory for comprehensive usage examples.
📊 Benchmarks
Performance comparisons are available in the benchmarks directory.
📄 License
maker_web is licensed under either of the following, at your option:
Dependencies
~3–14MB
~122K SLoC