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(())
}
📦 Getting started
vetis = { version = "0.1.0", features = ["tokio-rt", "http2", "tokio-rust-tls"] }
🛠 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)