DEV Community

Rogério Araújo
Rogério Araújo

Posted on

🚀 Vetis: a very tiny, very fast HTTP server in Rust

If you like small, fast, no-magic tools, you’re going to enjoy Vetis.

Vetis is a minimalist HTTP server written in Rust, created by ararog. It focuses on performance, simplicity, and modern HTTP support, without trying to be a full web framework.

👉 Repo: https://github.com/ararog/vetis


🤔 What is Vetis?

Vetis (short for Very Tiny Server) is an async HTTP server designed to do one thing really well:

Serve HTTP efficiently, with as little overhead as possible.

Instead of providing routing DSLs, middleware stacks, or heavy abstractions, Vetis gives you a clean and explicit server core that you can shape to your needs.

It’s a great fit for:

  • Lightweight APIs
  • Microservices
  • High-performance networking tools
  • Learning how modern Rust HTTP servers work

✨ Why Vetis exists

The Rust ecosystem has amazing web frameworks (Axum, Actix, Warp…), but sometimes you don’t want everything.

Vetis is for when you want:

  • 🧠 Full control
  • ⚡ Minimal overhead
  • 🦀 Idiomatic async Rust
  • 🌐 Modern HTTP protocols

No surprises. No hidden macros. Just Rust.


🔥 Key Features

⚡ Performance-first design

Vetis keeps the API surface small and avoids unnecessary abstractions. That means less overhead and more predictable performance — especially useful for latency-sensitive workloads.


🌐 Modern HTTP support

Via feature flags, Vetis supports:

  • HTTP/1
  • HTTP/2
  • HTTP/3 (QUIC)

🔌 Runtime flexibility

Vetis doesn’t lock you into a single async runtime. You can run it on:

  • Tokio
  • Smol

🧪 Small and readable API

Vetis favors explicit code over clever abstractions. If you enjoy reading and understanding your server code, you’ll feel at home here.


🧪 A minimal Vetis server

use bytes::Bytes;
use clap::Parser;
use http_body_util::Full;
use hyper::Response;
use vetis::{server::config::ServerConfig, Vetis};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let args = Args::parse();

    let config = ServerConfig::builder()
        .interface(args.interface)
        .port(args.port)
        .build();

    let mut server = Vetis::new(config);

    server
        .run(|_| async move {
            Ok(Response::new(Full::new(Bytes::from("Hello World"))))
        })
        .await?;

    server.stop().await?;
    Ok(())
}
Enter fullscreen mode Exit fullscreen mode

📦 Getting started

vetis = { version = "0.1.0", features = ["tokio-rt", "http2", "tokio-rust-tls"] }
Enter fullscreen mode Exit fullscreen mode

🛠 Open source & contributions

Vetis is released under the MIT License.

👉 https://github.com/ararog/vetis


🌟 Final thoughts

Vetis is perfect when you want speed, control, and simplicity — nothing more, nothing less.

Happy hacking 🦀

Top comments (0)