tako-rs 2.3.0

Multi-transport Rust web framework: HTTP/1.1, HTTP/2, HTTP/3, WebTransport, WebSocket, SSE, gRPC, TCP, UDP and Unix sockets behind one router.
Documentation

Build Workflow Crates.io License

🐙 Tako — Multi-Transport Rust Framework for Modern Network Services

Tako ("octopus" in Japanese) is a pragmatic, ergonomic and extensible Rust framework for services that go beyond plain HTTP. Build one cohesive application across HTTP/1.1, HTTP/2, HTTP/3, WebSocket, SSE, gRPC, TCP, UDP, Unix sockets, and WebTransport with a single routing, middleware, and observability model.

📖 Full documentation → tako.rust-dd.com  ·  API docs (docs.rs)  ·  Release notes  ·  llms.txt for AI assistants

Why Tako

  • Typed handlers — ordinary async functions, typed request extractors, and flexible response types.
  • Beyond HTTP — add WebSockets, event streams, gRPC, or raw socket services as your application grows.
  • Your choice of runtime — Tokio or Compio; every transport runs on both.
  • Room to tune — opt into SIMD JSON, zero-copy extractors, compression, or jemalloc when your workload calls for them.

Quick start

Requires Rust 1.95+. Tako uses edition 2024.

Add these dependencies to your Cargo.toml:

[dependencies]
tako-rs = "2.3"
tokio = { version = "1", features = ["macros", "net", "rt-multi-thread"] }

Then create src/main.rs. The package is tako-rs; the Rust import is tako.

use tako::{router::Router, types::BoxError, Server};
use tokio::net::TcpListener;

#[tokio::main]
async fn main() -> Result<(), BoxError> {
    let mut router = Router::new();
    router.get("/", || async { "Hello, Tako!" });

    let listener = TcpListener::bind("127.0.0.1:8080").await?;
    Server::builder()
        .build()
        .try_spawn_http(listener, router)?
        .result()
        .await?;

    Ok(())
}

Start it with cargo run, then visit http://127.0.0.1:8080 or run:

curl http://127.0.0.1:8080/

Continue with the Quickstart guide or explore the runnable examples. Coming from Axum? The Axum guide maps each building block, and the comparison covers when to pick Tako, Axum, or Actix Web.

At a glance

Area Capabilities
Transports HTTP/1.1, HTTP/2, HTTP/3, WebSocket, WebTransport, SSE, TCP, UDP, Unix sockets, PROXY protocol
Extractors JSON, form, query, path, headers, cookies, JWT claims, API keys, multipart, protobuf
Middleware Authentication, CSRF, sessions, security headers, request IDs, body limits, rate limiting, CORS, idempotency, compression
Integrations GraphQL, gRPC (unary and streaming), OpenAPI, Prometheus, OpenTelemetry, queues, signals

The default setup uses Tokio and includes HTTP/1.1. Enable additional protocols and integrations through Cargo features. See the runtime compatibility guide for transport support on Tokio and Compio.

Upgrading? The 2.3 migration guide covers the removed HTTP client, WebTransport, and gRPC changes, the 2.2 migration guide the per-thread changes, and the 2.1 migration guide the API changes and opt-in transport features from 2.0.

Benchmarks

Framework 100 conns · req/s p99 1,000 conns · req/s p99
Actix Web 1,530,425 3.48 ms 1,580,809 6.79 ms
ntex 1,562,670 3.23 ms 1,557,559 6.25 ms
Tako per-thread 1,436,252 6.11 ms 1,521,982 7.89 ms
Tako + jemalloc 497,515 1.56 ms 1,286,328 3.05 ms
Tako 478,502 1.73 ms 1,112,141 3.64 ms
Axum 496,454 1.48 ms 1,048,804 3.81 ms

Tako's default server keeps pace with Axum on the same Tokio runtime and pulls ahead at 1,000 connections, and the thread-per-core per-thread server lands within a few percent of Actix Web and ntex. On the multi-threaded server, installing jemalloc through the jemalloc feature adds about 16% at 1,000 connections. GET / returns Hello, World!; each number is the median of three 20-second wrk runs over loopback in a 24 vCPU Linux container (AMD EPYC 9655P), measured with tako-rs 2.2.0 in September 2026. Results move with hardware and configuration, so read the methodology and reproduction steps before drawing conclusions.

License

MIT — see LICENSE.

Made with ❤️ & 🦀 by the Tako contributors.