Every release, from the start
The complete release history of ThrottleKit: every version of the core library, the gRPC server + Lens, and the Python client, and what each one shipped, from the first release to today.
This is the full record: every version ThrottleKit has shipped across its three packages,
and what each one added. The core library (throttlekit) went from a single-process rate
limiter to a provably-bounded distributed fleet system with LLM cost governance in about two
weeks of releases; the gRPC server and the Python client followed to reach that same verified
core from any language. The skimmable version of this lives on the changelog and
the status board. This is the narrated long form.
throttlekit: the core library
Foundations (0.1–0.3)
- 0.1.0 (May 26). Initial release. Seven algorithms (GCRA, token bucket, fixed &
sliding window, sliding-window log, leaky bucket, adaptive concurrency), the
rateLimitengine over oneStore.applyprimitive, Memory + Redis stores, the two-tier engine (strict/cached-deny/leased), multi-dimensional limits, Express +fetchadapters, standards headers, proxy-correct IP keying, OpenTelemetry, and a store-conformance testkit. Every strategy shipped a pure JS transition and an atomic Redis Lua form, proven bit-identical by a dual-path suite. - 0.2.0 (May 26). A fixed-memory Count-Min DDoS sketch (
sketchRateLimit), in-process analytics with top-K heavy hitters (withAnalytics), Google-SRE adaptive load-shedding + fair-share, Redis client adapters (node-redis / Upstash REST / ioredis), Hono / Next / Fastify / Koa adapters, the comparative benchmark, and the first TLA⁺ verification of the leased overshoot bound. - 0.3.0 (May 26). The PostgreSQL store (same transform, no Redis required), batch checks
(
checkMany), and a mergeable Count-Min sketch for exact cluster-wide heavy-hitter detection.
The two engines take shape (0.4–0.7)
- 0.4.1 (May 26). Window-coupled leasing: the GALE refinement that collapses worst-case
global overshoot to exactly
Limit, independent of node count (machine-checked). (0.4.0 was tagged but a CI outage blocked its publish.) - 0.5.0 (May 26). Weighted-fair-escrow batch primitives (
weightedMaxMin/weightedFairShare), GALE Pillar 4. - 0.5.1 (May 26). README/Wiki restructure around provability.
- 0.6.0 (May 27).
tokenBudget: the streaming LLM token-budget meter, TALE Layer 1, with overshoot bounded by debit granularity and independent ofmax_tokens. - 0.6.1 (May 27). The trilemma’s dynamic coordination bound, proven.
- 0.7.0 (May 27). The learned layers:
learnedReservation/predictiveReservation(TALE 2/3) andleaseSizer/predictiveLeaseSizer(GALE 2/3), each cross-checked byte-for-byte against its research kernel.
Full reach & federation (0.8.x)
- 0.8.0 (May 28). Four more exact backends (Cloudflare Durable Objects / D1, DynamoDB,
Deno KV),
distributedTokenBudget, the transport-agnosticcreateEnforcer, seven framework adapters (NestJS, AWS Lambda, gRPC, tRPC, SvelteKit, Remix, Elysia), and a security/perf hardening pass. - 0.8.1 (May 28). Calendar
quota()billing, non-consumingpeek/forecast, the NestJS@RateLimitdecorator,tapDecisions, a frozen OpenTelemetry contract,.throttlekit.yamlrate-limit-as-code, and thethrottlekitCLI. - 0.8.2 (May 28). Property-based fuzzing of the Lua dual-path and a benchmark regression gate.
- 0.8.3 (May 28).
federate(): cross-cluster federation with a region-count-independent overshoot bound, backed byRedisCoordinator. - 0.8.4 (May 28).
PostgresCoordinatorfor federation. - 0.8.5 (May 28). Multi-process regional escrow + the
regional-onlyoutage mode.
Unified admission & distributed concurrency (0.9–0.13)
- 0.9.0 (May 29).
unifiedAdmission: rate × concurrency × cost in one decision, with a four-law pure algebra (combineDecisions) and a sequential or Lua-fused backend, plus the binding-axis OTel attribute. - 0.9.1 (May 29).
weightedFairEscrowgraduates to a production primitive (L1 + multi-process L2). - 0.9.2 (May 29). Middleware integration: 22 exports across 11 frameworks that wire the
exactly-once
release()lifecycle. - 0.10.0 (May 29).
distributedAdaptiveConcurrency: one cooperatively-inferred concurrency ceiling across a fleet (closing the N× over-admission of independent adaptive limiters). - 0.10.1 (May 29). Acknowledged handoff: a hard
Σ inflight ≤ L_globalbound, machine-checked in TLA⁺. - 0.11.0 (May 29). Eager handoff + self-fencing: the complete instantaneous hard concurrency bound, end to end.
- 0.11.1 (May 29). The joint-LP admission policy: a bid-price filter for cost-bound gateways.
- 0.11.2 (May 30). A Postgres concurrency coordinator, demand-proportional allocation, and the STABILITY charter.
- 0.11.3 (May 30). Online dual refinement and a 3-axis joint-LP (a concurrency shadow price via Little’s law).
- 0.12.0 (May 30).
federatedWeightedFairEscrow: Pillar 4 lifted across regions into a global weighted-max-min guarantee. - 0.13.0 (May 31). Adaptive lease sizing wired directly into
twoTier, concurrency recalibration, and a blocking, machine-independent bench gate.
1.0: the frozen core
- 1.0.0 (May 31). The API is frozen under SemVer and mechanically enforced (type-surface
tests +
publint/attwon every push). Ships STABILITY.md and BENCH.md; addsbindingAxison the unified result and a frozen error-codediscriminant. From here the core only grows additively. - 1.0.1 (May 31). A header-builder crash fix.
The product era (1.1–1.7)
- 1.1.0 (Jun 4). In-process telemetry (
admissionTap/withAdmissionAnalytics): the binding-axis signal that powers ThrottleKit Lens. - 1.2.0 (Jun 5). A stable
denies_by_axis{lane}OpenTelemetry metric for Grafana. - 1.3.0 (Jun 9). The What-If Replay testkit: record a limiter’s decisions, replay a candidate, read the flip ledger.
- 1.4.0 (Jun 10). Policy Plans (a terraform plan for limits) and store-backed cross-region fair escrow.
- 1.5.0 (Jun 10). Tier-2 fleet leasing (
LeaseSpender) and a store-authoritative lease window. - 1.6.0 (Jun 23). A correctness + security audit sweep:
coordinator over-eviction, two window-roll over-admits, and a
multiRateLimitprefix fix, plus opt-in safety valves (ttlFloorMs,useServerTime, sketchseed). - 1.6.1 (Jun 30). A performance sweep:
multiRateLimit.checkSync~40% faster on composite dimensions (skips astructuredClonewhen a dimension’s state is an immutable primitive),weightedFairEscrowgrant ~15% faster (an O(1) running aggregate gated on integer weights/costs), plus smaller Redis/Postgres round-trip cuts. Every decision stays byte-identical. - 1.7.0 (Jul 1). A hardening sweep from a new fuzz + mutation-testing layer (mutation score on
the core decision math: 65.4% → 77.5%): every strategy now rejects a construction parameter that
would emit a non-finite decision field, closes a YAML config-parser stack-overflow DoS (nesting
capped at 64), a cost-overflow vector, an unbounded
slidingWindow.buckets, and a poisoned-sketch-snapshot vector. Minor, not patch: a handful of previously-garbage-returning absurd option values now throw; no valid input’s behavior changed.
throttlekit-server: the service door & Lens
The server lets any language reach the same verified core over gRPC, and carries ThrottleKit Lens, the built-in terminal dashboard.
- 0.1.0-experimental.4 (Jun 4). A pluggable store resolver: Postgres and DynamoDB store doors alongside memory and Redis.
- 0.1.0-experimental.5 (Jun 4). A built-in (web) Lens dashboard served alongside gRPC.
- 0.1.0-experimental.6 (Jun 5). Monitoring moved to a built-in, zero-dependency terminal
dashboard (
--tui): Lens as it ships today; the web Lens was removed. - 0.1.0-experimental.7 (Jun 5). Tabbed views (Latency / Fairness / Capacity / Guarantee) and
the
fairEscrowpolicy block. - 0.1.0 (Jun 9). Graduated from experimental: the gRPC wire is frozen and conformance-tested against the golden vectors, plus opt-in, AES-256-GCM-encrypted, redacted decision capture with a fail-closed audited CLI.
- 0.2.0 (Jun 9). The deterministic What-If Replay tab.
- 0.3.0 (Jun 10). Four fleet features over the existing RPCs (
federated/federatedFairEscrow/fleetBudget/distributedConcurrency), the read-only Monitor door, Prometheus/metrics, gRPC health, and the Policy Plans CLI +--tuiPlan tab. - 0.4.0 (Jun 10). The Tier-2 Fleet lease door (
Fleet.Reserve) and a store-authoritative lease window. - 0.4.1 – 0.4.3 (Jun 13–23). The audit sweep: replay-classifier accuracy, 128-bit random lease ids (a slot-hijacking fix), Monitor-door resilience, honest mTLS labelling, and capture fixes.
- 0.4.4 (Jun 30). A performance sweep: the
RateLimiter.Checkhandler ~25% faster (builds the enforcer withemit:falseso the discarded header set is never computed), plus capture and Cost Room efficiency fixes.
throttlekit-py: the Python client
The reference client: every axis, bit-for-bit against the Node oracle.
- 0.1.0 (May 31). Initial release: the
ServiceBackend(gRPC) and directRedisBackenddoors, the rate strategies, the frozenDecision/Forecasttypes, and the cross-language conformance suite. - 0.2.0 (May 31).
debit()for the cost axis (windowed token budgets over the service door). - 0.2.1 (May 31). Packaging fix: ship the generated gRPC stubs inside the wheel.
- 0.3.0 (May 31).
admit()for the concurrency / unified axis. - 0.4.0 (Jun 4). Async backends (
AsyncServiceBackend/AsyncRedisBackend), the@rate_limitdecorator +decision_headers, and FastAPI / Starlette / Django / Flask adapters. - 0.5.0 (Jun 10). Tier-2 fleet leasing (
FleetBackend/LeasedLimiter), aMonitorBackendsnapshot client, and a full runnable examples set. - 0.5.1 (Jun 30). A performance sweep:
slots=Trueon the per-call frozen dataclasses (roughly halving a transported decision’s footprint), a precomputed Redis ARGV template, and smaller inlining cleanups.
That’s everything, from the first commit to today. For the canonical per-release detail, each
package links to its full CHANGELOG.md from the changelog page; for what’s current
and how it’s verified, see the status board.