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

MIT/Apache

210KB
3.5K SLoC

maker_web

High-performance, zero-allocation HTTP server for microservices

Downloads Crates.io Documentation Build Status

✨ 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 ConnectionFilter trait 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 ConnectionData trait.

🏭 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