tako-rs-core 2.0.1

Internal core implementation crate for tako-rs. Use the `tako-rs` umbrella crate instead.
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)

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.