Skip to content

Contrib Modules

Kruda ships optional contrib modules as separate Go modules with their own go.mod. Install only what you need.

Available Modules

ModuleInstallDescription
jwtgo get github.com/go-kruda/kruda/contrib/jwtJWT sign, verify, refresh (HS256/384/512, RS256)
wsgo get github.com/go-kruda/kruda/contrib/wsWebSocket upgrade, RFC 6455 frames, ping/pong
ratelimitgo get github.com/go-kruda/kruda/contrib/ratelimitToken bucket / sliding window rate limiting
sessiongo get github.com/go-kruda/kruda/contrib/sessionSession middleware with pluggable store
compressgo get github.com/go-kruda/kruda/contrib/compressResponse compression (gzip, deflate)
etaggo get github.com/go-kruda/kruda/contrib/etagETag response caching
cachego get github.com/go-kruda/kruda/contrib/cacheResponse cache (in-memory, Redis)
otelgo get github.com/go-kruda/kruda/contrib/otelOpenTelemetry tracing
prometheusgo get github.com/go-kruda/kruda/contrib/prometheusPrometheus metrics
swaggergo get github.com/go-kruda/kruda/contrib/swaggerSwagger UI HTML

Example: JWT Authentication

go
import (
    "os"
    "github.com/go-kruda/kruda"
    "github.com/go-kruda/kruda/contrib/jwt"
)

// Protect a route group
api := app.Group("/api").Guard(jwt.New(jwt.Config{
    Secret: []byte(os.Getenv("JWT_SECRET")),
}))

api.Get("/profile", func(c *kruda.Ctx) error {
    claims := jwt.ClaimsFrom(c)
    return c.JSON(claims)
})

Example: Rate Limiting

go
import (
    "time"
    "github.com/go-kruda/kruda/contrib/ratelimit"
)

// 100 requests per minute per IP
app.Use(ratelimit.New(ratelimit.Config{
    Max:    100,
    Window: time.Minute,
}))

// Stricter limit on auth endpoints
app.Use(ratelimit.ForRoute("/api/login", 5, time.Minute))

Example: Response Cache

go
import (
    "time"
    "github.com/go-kruda/kruda/contrib/cache"
)

app.Get("/users", handler, cache.New(cache.Config{
    Expiration: 5 * time.Minute,
}))

Released under the MIT License.