#web-server #lightweight

bin+lib hteapot

HTeaPot is a lightweight HTTP server library designed to be easy to use and extend

13 unstable releases (5 breaking)

Uses new Rust 2024

0.6.5 Oct 27, 2025
0.6.1 Jun 19, 2025
0.4.2 Feb 19, 2025
0.3.1 Nov 7, 2024
0.2.5 Jul 6, 2024

#1046 in Network programming


Used in cafetera

MIT license

125KB
2.5K SLoC

🍡 HTeaPot

A blazing-fast, minimalist HTTP server library built with Rust

Crates.io Documentation License: MIT GitHub Repo stars

English | EspaΓ±ol

A high-performance, lightweight HTTP server and library built in Rust. HTeaPot is designed to deliver exceptional performance for modern web applications while maintaining a simple and intuitive API.

πŸ“š Table of Contents

✨ Features

Exceptional Performance

  • Threaded Architecture: Powered by a custom-designed thread system that handles 70,000+ requests per second
  • Consistent Under Load: Maintains steady performance even under high concurrency scenarios
  • Resilient: Achieves near-perfect 100% success rate for 200 OK responses during stress tests

Versatile Functionality

  • Static File Serving: Efficiently serve static assets with minimal configuration
  • Streaming Support: Leverages chunked transfer encoding for large files and long-lived connections
  • Flexible API: Use HTeaPot as a standalone server or as a library in your Rust applications

Developer-Friendly

  • Simple Configuration: Get started quickly with intuitive TOML configuration
  • Extensible Design: Easily customize behavior for specific use cases
  • Lightweight Footprint: Zero dependencies and efficient resource usage

πŸš€ Getting Started

πŸ”§ Installation

# Install from crates.io
cargo install hteapot

# Or build from source
git clone https://github.com/Az107/hteapot.git
cd hteapot
cargo build --release

πŸ–₯️ Running the Server

Option 1: With Config

  1. Create a config.toml file:
[HTEAPOT]
port = 8081        # The port to listen on
host = "localhost" # The host address to bind to
root = "public"    # The root directory to serve files from
  1. Run the server:
hteapot ./config.toml

Option 2: Quick Serve

hteapot -s ./public/

πŸ¦€ Using as a Library

  1. Add HTeaPot to your Cargo.toml project:
cargo add hteapot
  1. Implement in your code: example
use hteapot::{HttpStatus, HttpResponse, Hteapot, HttpRequest};

fn main() {
    // Create a new server instance
    let server = Hteapot::new("localhost", 8081);
    
    // Define your request handler
    server.listen(move |req: HttpRequest| {
        HttpResponse::new(HttpStatus::IAmATeapot, "Hello, I am HTeaPot", None)
    });
}

πŸ“Š Performance

HTeaPot has been benchmarked against other popular HTTP servers, consistently demonstrating excellent metrics:

Metric HTeaPot Industry Average
Requests/sec 70,000+ req/s 30,000 - 50,000 req/s
Error rate < 0.1% 0.5% - 2%
Latency (p99) 5ms 15ms - 30ms
Memory usage Low Moderate

Roadmap

  • HTTP/1.1 support (keep-alive, chunked encoding)
  • Library API
  • Streaming responses
  • Multipart form handling
  • Basic routing system
  • HTTPS support
  • Compression (gzip/deflate)
  • WebSocket support
  • Enhanced documentation and examples

Contributing

We welcome contributions from the community! To get started:

# Format the code
cargo fmt

# Lint for warnings
cargo clippy --all-targets --all-features

# Run tests
cargo test

See CONTRIBUTING.md for more details.

License

HTeaPot is licensed under the MIT License - see the LICENSE file for details.

Acknowledgments

  • The Rust community for their exceptional tools and libraries
  • Our contributors who have helped shape this project
  • Users who provide valuable feedback and bug reports

Dependencies