All notable changes to tako-rs are documented here. Format inspired by Keep a Changelog; we follow Semantic Versioning.
- Router introspection —
Router::routes()returns every registered route asVec<Arc<Route>>, grouped by HTTP method and in registration order, with anyscope/nestprefix already applied. Applications can derive reserved-path or namespace policies from the live route table instead of tracking registrations on the side.
2.0.0 — 2026-05-29
Tako 2.0 is the first long-term-stable release. It collapses every breaking
change that accumulated on main since 1.x into a single bump and makes
the workspace fully publishable to crates.io. The release also lands a
3-pass hardening audit (115 findings — 5 Critical, 18 High, 39 Medium,
53 Low — all closed) covering soundness, RFC compliance, lock-free hot
paths, and fail-closed defaults.
See MIGRATION_1_TO_2.md for an upgrade walkthrough
covering every breaking change, including code-mod recipes for the macros and
typed-state APIs.
- Per-router typed state —
Router::with_state(T)replaces the old per-typeGLOBAL_STATEslot; multiple routers in the same process can now hold independent state of the same type. - Sub-routing primitives —
Router::nest("/path", child)andRouter::scope("/api", |s| { … })replaceRouter::mergeand add a real prefix-stripping pass. Result-aware handlers — handlers may returnResult<R, E>whereE: Responder;error_handleris paired with a newclient_error_handler, anduse_problem_json()emits RFC 7807application/problem+jsonbodies.- Method-aware routing — non-matched verbs now return
405 Method Not Allowedwith the properAllowheader instead of404. Server::builder()— unified bootstrap across HTTP/1.1, HTTP/2, HTTP/3, TLS, mTLS, and Unix sockets; replaces the matrix ofserve_*/serve_tls_*entry points.- TLS knobs —
TlsCert::{Pem, Der, Resolver},ReloadableResolver,ClientAuthfor full mTLS, SNI-based cert selection, and hot reload. ConnInfo— unified peer extension; replaces theSocketAddr/UnixPeerAddrsplit.- Runtime-agnostic
ServerHandle— graceful-shutdown handle that works uniformly across the Tokio and Compio runtimes. - Thread-per-core runtime (
per-thread,per-thread-compiofeatures) — N×current-thread workers +SO_REUSEPORTbootstrap.
- MSRV: 1.95 — bumped from 1.87.
- Edition: 2024 — workspace-wide.
- Macros — route paths support both
{id}and{id: u64}forms; noParamsstruct is materialised unless a typed slot exists. - Workspace is fully publishable — every internal sub-crate now
publishes on crates.io as
tako-rs-core,tako-rs-extractors,tako-rs-macros,tako-rs-plugins,tako-rs-server,tako-rs-server-pt,tako-rs-streamsalongside the umbrellatako-rscrate. Use the umbrella crate; the sub-crates are considered implementation detail. (The unprefixedtako-*names are owned by an unrelated name-squatter at 0.0.0; thetako-rs-*prefix avoids that ownership conflict.) tako-core-local— the separate!Sendrouter was removed; the unifiedRouterisSend + Syncand serves both runtimes.- Compio runtime — feature flags
compio,compio-tls,compio-wsnow compose cleanly with the rest of the framework. Compio is treated as a first-class runtime alongside Tokio.
serve_*family of free functions — useServer::builder().Router::merge— usenest/scopeinstead.Router::state(T)global slot — useRouter::with_state(T).- 1.x
Paramsglobal struct — typed extractors replace it.
cargo deny checkis a CI gate; the v2 advisories schema fails the build on unignored vulnerabilities, unsoundness, and unmaintained crates.- mTLS support via
ClientAuthfor hardened internal endpoints.
The migration guide enumerates these in full; tracked separately from breaking changes:
tako-stores-redis/tako-stores-postgrescompanion crates (multi-replica SessionStore / RateLimitStore / IdempotencyStore backends).TlsCert::Acme(rustls-acme integration).- HTTP/3 qlog (needs quinn bump).
- Multipart / byteranges responder + Linux
sendfile(2)path onFileStream. - Real WebTransport CONNECT handshake (currently aliased to raw-QUIC).
- gRPC reflection / health protobuf-generated stubs.
- Cluster
SignalBusRedis / NATS / Kafka implementations. - v2 client HTTP/2 + HTTP/3 + reqwest-style middleware.
- Hot-reload
Arc<Router>swap.
Older 1.x release notes live on the GitHub releases page. The 1.x line is in maintenance mode; bug-fix releases will continue if there is user demand.