NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
Go modules
Last release 3 months ago
29 Jun 2026
Ships fairly regularly
a new release about every 4 months
Some releases are documented
notes for 10 of 26 stable releases
Nothing withdrawn
no release was ever pulled
6 years old
44 releases · first in 2020
One column per quarter.
Deprecate spoofable RealIP rate-limiting; add LimitBy + KeyFromContext and modernize the key API by @VojtechVitek in #61
Full Changelog: v0.15.0...v0.16.0
Nothing published for this version
Nothing published for this version
Nothing published for this version
upgrade to xxhash v3
Nothing published for this version
Useful to create compounds with a custom prefix
Useful to create compounds with a custom prefix
Nothing published for this version
Implement rate-limiting from HTTP handler (e.g. by request payload) by @VojtechVitek in #42
// Rate-limiter for login endpoint.
loginRateLimiter := httprate.NewRateLimiter(5, time.Minute)
r.Post("/login", func(w http.ResponseWriter, r *http.Request) {
var payload struct {
Username string `json:"username"`
Password string `json:"password"`
}
err := json.NewDecoder(r.Body).Decode(&payload)
if err != nil || payload.Username == "" || payload.Password == "" {
w.WriteHeader(400)
return
}
// Rate-limit login at 5 req/min.
if loginRateLimiter.RespondOnLimit(w, r, payload.Username) {
return
}
w.Write([]byte("login at 5 req/min\n"))
})Full Changelog: v0.12.1...v0.14.0
Nothing published for this version
Export http.RateLimiter type by @VojtechVitek in #43 so users can pass *http.RateLimiter (or save in their server struct) and use the new .OnLimit() f
*http.RateLimiter (or save in their server struct) and use the new .OnLimit() feature from #42.Full Changelog: v0.13.0...v0.13.1
Add support to rate-limit by custom key from HTTP handler (e.g. by request payload fields)
Full Changelog: v0.13.0...v0.13.0
// Rate-limiter for login endpoint.
loginRateLimiter := httprate.NewRateLimiter(5, time.Minute)
r.Post("/login", func(w http.ResponseWriter, r *http.Request) {
var payload struct {
Username string `json:"username"`
Password string `json:"password"`
}
err := json.NewDecoder(r.Body).Decode(&payload)
if err != nil || payload.Username == "" || payload.Password == "" {
w.WriteHeader(400)
return
}
// Rate-limit login at 5 req/min.
if loginRateLimiter.OnLimit(w, r, payload.Username) {
return
}
w.Write([]byte("login at 5 req/min\n"))
})Implement httprate.WithErrorHandler() by @VojtechVitek in #41
Full Changelog: v0.12.0...v0.12.1
Nothing published for this version
Nothing published for this version
Remove unused func argument by @VojtechVitek in #36
Full Changelog: v0.11.0...v0.12.0
Nothing published for this version
Reduces memory footprint and allocations by 2x 📉
$ benchstat old.txt new.txt
goos: darwin
goarch: arm64
pkg: github.com/go-chi/httprate
│ old.txt │ new.txt │
│ sec/op │ sec/op vs base │
LocalCounter-8 34.65m ± 3% 13.50m ± 2% -61.04% (p=0.000 n=10)
│ old.txt │ new.txt │
│ B/op │ B/op vs base │
LocalCounter-8 4.384Mi ± 0% 2.846Mi ± 0% -35.07% (p=0.000 n=10)
│ old.txt │ new.txt │
│ allocs/op │ allocs/op vs base │
LocalCounter-8 253.9k ± 0% 121.6k ± 0% -52.12% (p=0.000 n=10)
Add tests for X-RateLimit-* headers, Fix X-RateLimit-Remaining header…
Add tests for X-RateLimit-* headers, Fix X-RateLimit-Remaining header…
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →