Skip to content

rust-dd/tako

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

441 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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)

Why Tako

  • One service, many transports — REST, WebSockets, SSE, gRPC, raw TCP/UDP, Unix sockets, and QUIC without switching frameworks.
  • One model, two runtimes — the same framework style on Tokio or Compio, TLS and HTTP/2 on both.
  • Batteries included — middleware, auth, metrics, signals, queues, graceful shutdown, and streaming are part of the framework, not an afterthought.
  • Performance when it matters — SIMD JSON, optional zero-copy extractors, brotli/gzip/deflate/zstd, jemalloc, and HTTP/3 — without fragmenting the API.

At a glance

  • Transports — HTTP/1.1, HTTP/2, HTTP/3 (QUIC), WebSocket, WebTransport, SSE, gRPC, TCP, UDP, Unix sockets, PROXY protocol.
  • Extraction — 22+ typed extractors: JSON (SIMD optional), form, query, path, headers, cookies, JWT claims, API keys, Accept, Range, protobuf, multipart.
  • Middleware — JWT/Basic/Bearer/API-key auth, CSRF, sessions, security headers, request IDs, body limits, rate limiting, CORS, idempotency, compression, metrics.

The full transport matrix, extractor catalog, middleware reference, and cargo feature graph live in the documentation.

Installation

[dependencies]
tako-rs = "2"

MSRV 1.95 · Edition 2024

Quick Start

use anyhow::Result;
use tako::{
    responder::Responder,
    router::Router,
    types::Request,
    Method,
};
use tokio::net::TcpListener;

async fn hello_world(_: Request) -> impl Responder {
    "Hello, World!".into_response()
}

#[tokio::main]
async fn main() -> Result<()> {
    let listener = TcpListener::bind("127.0.0.1:8080").await?;

    let mut router = Router::new();
    router.route(Method::GET, "/", hello_world);

    tako::serve(listener, router).await;
    Ok(())
}

Keep going with the Quickstart guide.

In Production

Tako already powers real-world services:

Benchmark

Hello-world throughput on a clean local run (wrk -t4 -c100 -d30s):

Framework Requests/sec Avg Latency
Tako ~187,288 ~505 µs
Tako + jemalloc ~187,638 ~502 µs
Axum ~186,194 ~498 µs
Actix ~155,307 ~635 µs

Machine- and thermal-state-dependent — treat as local baselines, not universal claims. Details on the benchmarks page.

License

MIT — see LICENSE.

Made with ❤️ & 🦀 by the Tako contributors.

About

Tako is a lightweight and minimalistic web framework built on Tokio and Hyper written in Rust.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors