Releases: rust-dd/tako
v1.1.2
Performance improvements
- RPITIT handler dispatch — Handler trait switched to return-position impl trait, eliminating double
Box::pinallocation per request (1 heap alloc instead of 2) - Lock-free route config —
RwLock<Option<Duration>>andRwLock<Option<SimdJsonMode>>replaced withOnceLockfor zero-overhead reads on the hot path - Static router reference — Router is leaked into
&'staticto eliminate allArcrefcount bumps per connection and per request - Middleware emptiness flags —
AtomicBoolflags onRouterandRouteskipArcSwap::load()when no middleware is registered - HTTP/1.1 pipeline flush — Enabled
pipeline_flush(true)on the hyper HTTP/1 builder for better pipelining throughput - Method clone eliminated —
req.method().clone()removed from dispatch hot path, using direct reference instead - Inline dispatch —
#[inline]added to the dispatch function
v1.1.1
What's Changed
- feat: JWT middleware refactored to trait-based design (
JwtVerifiertrait) — no mandatory JWT dependency - feat:
jwt-simplecrate moved behind optionaljwt-simplefeature flag - fix: compiler error
Breaking Changes
jwt-simpleis no longer included by default. Enable thejwt-simplefeature to restore the previousAnyVerifyKey/MultiKeyVerifierAPI.- New
JwtVerifiertrait allows plugging in any JWT library.
tako v.1.1.0
Performance-focused release — routing, body handling, middleware, and connection setup all received significant optimizations.
Highlights
- O(1) method dispatch via
MethodMap— fixed-size array replacesHashMapfor HTTP method routing - Zero-allocation body — new
TakoBodyenum avoids boxing forFull,Empty, andIncomingvariants - Lock-free middleware —
ArcSwapreplacesRwLockfor route middleware storage - TCP_NODELAY on all connections — eliminates Nagle's algorithm latency
- Custom path params deserializer — zero-copy
str::parse()instead of JSON intermediary - LTO + codegen-units=1 in release profile for maximum binary optimization
- 111 tests across 8 test suites · 36 examples
What's New (since v1.0.0)
Performance
| Optimization | Before | After |
|---|---|---|
| Method dispatch | HashMap<Method, _> lookup |
MethodMap fixed-size array (O(1) index) |
| Response body | Always-boxed BoxBody |
TakoBody enum — Full/Empty/Incoming unboxed |
| Middleware reads | RwLock<Vec<BoxMiddleware>> |
ArcSwap<Vec<BoxMiddleware>> (lock-free) |
| TCP connections | Default (Nagle on) | TCP_NODELAY enabled |
| Path params | serde_json round-trip |
Custom Deserializer with str::parse() |
| Release binary | Default LTO | lto = "fat", codegen-units = 1 |
Routing Rework
- Complete routing rewrite for performance
MethodMapstores handlers in a[Option<RouteEntry>; 9]array indexed by method- Dispatch is a direct array index — no hashing, no branching
Auth Handlers
- Improved
BasicAuth,BearerAuth, andJwtAuthhandler ergonomics
Middleware & Routing Logic
- Updated middleware chaining and routing dispatch
ArcSwapload guard pattern for zero-contention middleware reads
Examples
- All 36 examples restructured as standalone crates with their own
Cargo.toml - Added
streams-compioandtls-compioexamples - Fixed dependency declarations across all example crates
Fixes
- Fixed
vespera_corecompatibility (pinned to v0.1.43) for OpenAPI integration - Fixed Compio feature dead-code warnings (
BodyInner::Incoming,incoming()) - Fixed missing dependencies in example crates (
graphql-generic-ws,openapi,openapi-utoipa,streams)
Breaking Changes
None. All changes are internal optimizations. Existing v1.0.0 code compiles without changes.
Full Changelog: tako-v.1.0.0...tako-v.1.1.0
tako v.1.0.0
The first stable release of Tako — a lightweight, high-performance async web framework for Rust built on Hyper 1.x and Tokio, with optional Compio runtime support.
Highlights
- Graceful shutdown across all server variants with configurable drain timeout
- 8 transports — HTTP/1.1, HTTP/2, HTTP/3, WebTransport, Unix sockets, raw TCP/UDP, PROXY protocol
- HTTP/2 on Compio — full ALPN-based H2 via
SendWrapperpattern - Background job queue — named queues, retry policies (fixed/exponential), delayed jobs, dead letter queue
- Route-level SIMD JSON config —
SimdJsonMode::Always | Never | Threshold(n)per route - 10 middleware · 5 plugins · 22+ extractors · 106 tests · 29 examples
What's New (since v0.7.2)
Transports
| Transport | Tokio | Compio | Shutdown |
|---|---|---|---|
| HTTP/1.1 | ✅ | ✅ | ✅ |
| HTTP/2 (TLS+ALPN) | ✅ | ✅ | ✅ |
| HTTP/3 (QUIC) | ✅ | — | ✅ |
| WebTransport | ✅ | — | ✅ |
| Unix Domain Socket | ✅ | — | ✅ |
| Raw TCP | ✅ | — | ✅ |
| Raw UDP | ✅ | — | — |
| PROXY protocol v1/v2 | ✅ | — | ✅ |
Core
serve_with_shutdown()— graceful shutdown for all server variantsrouter.error_handler()— global 5xx error hook- Per-router and per-route timeouts with custom fallback
Config<T>— env-var configuration loader- Job queue —
Queue::builder().workers(4).retry(RetryPolicy::exponential(3, 500ms)).build()withpush(),push_delayed(), dead letter queue, gracefulshutdown()
New Middleware
SecurityHeaders · RequestId · SessionMiddleware · Csrf · UploadProgress · BodyLimit (stream enforcement) · ApiKeyAuth
New Extractors
Accept · Protobuf<T>
Performance
- SIMD JSON auto-dispatch with route-level
SimdJsonModeconfig (default threshold: 2 MB) - Query/Form single-pass deserialization via
serde_urlencoded(eliminated double JSON serialization)
Stability
- Eliminated all runtime
.unwrap()panics (TLS cert loading, compression, config) - Fixed Compio + HTTP/3 and Compio + HTTP/2 feature conflicts
Full Inventory
Middleware (10): ApiKeyAuth · BasicAuth · BearerAuth · BodyLimit · Csrf · JwtAuth (14 algorithms) · RequestId · SecurityHeaders · SessionMiddleware · UploadProgress
Plugins (5): CorsPlugin · CompressionPlugin (Gzip/Brotli/DEFLATE/Zstd) · RateLimiterPlugin · MetricsPlugin (Prometheus/OTel) · IdempotencyPlugin
Extractors (22+): Accept · AcceptLanguage · BasicCredentials · BearerToken · Bytes · CookieJar · PrivateCookieJar · SignedCookieJar · Form<T> · HeaderMap · IpAddr · Json<T> · SimdJson<T> · Jwt<C> · Multipart · PathParams · Path<T> · Protobuf<T> · Query<T> · RangeHeader · State<T> · &mut Request
106 tests across 8 test suites · 29 examples including gRPC, WebTransport, job queue, GraphQL, OpenTelemetry
Breaking Changes
None. All new features are additive and feature-gated. Existing v0.7.x code compiles without changes.
Full Changelog: tako-v.0.7.1-2...tako-v.1.0.0
tako v.0.7.1-2
Full Changelog: tako-v.0.7.0...tako-v.0.7.1-2
tako v.0.7.0
What's Changed
- feat: migrate scc for better performance by @dancixx in #19
- feat: add compio support by @dancixx in #18
- feat: add vespera and utoipa support @dancixx in 7a2e1e3
Notes
Compio support is experimental. If you want to use WebSocket then pick tokio runtime
Full Changelog: tako-v.0.6.1...tako-v.0.7.0
tako-v.0.6.1
tako-v.0.6.0
tako-v.0.6.0
Features
- Signals system + examples (#11)
- Metrics plugin
- State extractor, protocol version guard
- Automatic fallback port if requested port is unavailable
Fixes
- Updated CORS defaults
- Stable global middleware execution
- Naming/visibility cleanups
- Import/module export fixes
- Misc feature-flag fix
Refactors / Internals
- Switch to
http/http-body - Replace
IncomingwithTakoBody - Remove lifetimes from header map / path types
- Introduce internal
RwLockusage - Version bumps + doc updates
Migration notes
- Update body types + imports to
http/http-body - Replace
IncomingwithTakoBody - Adjust code using header/path lifetimes
- Revisit CORS + middleware behavior if relying on old defaults
Full Changelog: tako-v.0.5.0...tako-v.0.6.0
tako-v.0.5.0
Release notes
- Built in GraphQL support using
async-graphql - Add more examples
- Some performance updates
Full Changelog: tako-v.0.4.1...tako-v.0.5.0
tako-v.0.4.1
Full Changelog: tako-v.0.4.0...tako-v.0.4.1