🐙 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
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, with TLS and HTTP/2 support 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:
[]
= "2.2"
= { = "1", = ["macros", "net", "rt-multi-thread"] }
Then create src/main.rs. The package is tako-rs; the Rust import is tako.
use ;
use TcpListener;
async
Start it with cargo run, then visit http://127.0.0.1:8080 or run:
Continue with the Quickstart guide or explore the runnable examples.
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, unary gRPC, 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.2 migration guide covers the per-thread changes, and the 2.1 migration guide covers 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. 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.