Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

RomanEmreis/volga

Open more actions menu

Repository files navigation

Volga

Fast, simple, and high-performance web framework for Rust, built on top of Tokio and hyper.

Volga is designed to make building HTTP services straightforward and explicit, while keeping performance predictable and overhead minimal.

latest latest License: MIT Build Release

💡 Status: Volga is currently in preview.
The public API may change while core abstractions are being finalized.

Tutorial | API Docs | Examples | Roadmap

Why Volga?

Volga focuses on clarity and control without sacrificing performance.

It avoids hidden behavior and framework-driven magic. Macros are used sparingly and primarily to reduce boilerplate. Handlers, middleware, and routing behave exactly as they look in code.

Volga is a good fit if you:

  • Want simple and readable handler signatures
  • Care about predictable performance and low overhead
  • Need fine-grained control over the HTTP request/response lifecycle
  • Work with streaming, WebSockets, or long-lived connections
  • Prefer explicit APIs over code generation

Features

  • HTTP/1 and HTTP/2 support
  • Explicit and robust routing
  • Composable async middlewares
  • Dependency Injection without derive macros
  • Typed request extraction
  • WebSockets and WebSocket-over-HTTP/2
  • Streaming-friendly HTTP
  • End-to-end OAuth 2.1/OIDC support
  • Full Tokio compatibility
  • Runs on stable Rust 1.90+

Getting Started

Dependencies

[dependencies]
volga = "0.9.6"
tokio = { version = "1", features = ["full"] }

Simple request handler

use volga::{App, ok};

#[tokio::main]
async fn main() -> std::io::Result<()> {
    let mut app = App::new();
    
    app.map_get("/hello/{name}", async |name: String| {
        ok!("Hello {name}!")
    });
    
    app.run().await
}

This example demonstrates:

  • typed path parameter extraction
  • async request handlers
  • minimal setup with zero boilerplate

More advanced examples (middleware, DI, auth, rate limiting) can be found in the documentation and here.

Performance

Volga is benchmarked using a minimal plaintext endpoint to measure raw request handling to measure baseline HTTP throughput.

The benchmark harness is available here: https://github.com/RomanEmreis/volga-benchmark

Benchmark environment

Tested on a single machine:

Platform: Apple Silicon MacBook Pro
Runtime: Linux containers (Colima)

Results

Running 30s test @ http://volga:7878/plaintext
  8 threads and 512 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency   539.89us    3.00ms 213.60ms   99.94%
    Req/Sec   131.04k    14.14k 296.06k    95.76%
  31080913 requests in 29.83s, 3.76GB read
  Socket errors: connect 0, read 0, write 0, timeout 987
Requests/sec: 1,041,952.40
Transfer/sec: 129.18MB

⚠️ Benchmark results are provided for reference only. Actual performance depends on workload, middleware, and handler logic.

License

Volga is licensed under the MIT License. Contributions welcome!

Releases

Packages

Used by

Contributors

Languages

Morty Proxy This is a proxified and sanitized view of the page, visit original site.