Skip to main content
Version: v3.x

Compress

Compression middleware for Fiber that automatically compresses responses with gzip, deflate, brotli, or zstd based on the client's Accept-Encoding header.

note

Bodies smaller than 200 bytes remain uncompressed because compression would likely increase their size and waste CPU cycles. See the fasthttp source.

Behavior

  • Skips compression for responses that already define Content-Encoding, for range requests, 206 responses, status codes without bodies, or when either side sends Cache-Control: no-transform.
  • HEAD requests negotiate compression so Content-Encoding, Content-Length, ETag, and Vary reflect the encoded representation, but the body is removed before sending.
  • When compression runs, strong ETag values are recomputed from the compressed bytes; when skipped, Accept-Encoding is still merged into Vary unless the header is * or already present.
  • Request-body decompression is still handled by Fiber's request APIs (for example c.Body()), and those decoders enforce the app BodyLimit for compressed payloads.

Signatures

func New(config ...Config) fiber.Handler

Examples

Import the middleware package:

import (
"github.com/gofiber/fiber/v3"
"github.com/gofiber/fiber/v3/middleware/compress"
)

Once your Fiber app is initialized, use the middleware like this:

// Initialize default config
app.Use(compress.New())

// Or extend your config for customization
app.Use(compress.New(compress.Config{
Level: compress.LevelBestSpeed, // 1
}))

// Skip middleware for specific routes
app.Use(compress.New(compress.Config{
Next: func(c fiber.Ctx) bool {
return c.Path() == "/dont_compress"
},
Level: compress.LevelBestSpeed, // 1
}))

Config

PropertyTypeDescriptionDefault
Nextfunc(fiber.Ctx) boolSkips this middleware when the function returns true.nil
LevelLevelCompression level to use.LevelDefault (0)

Possible values for the "Level" field are:

  • LevelDisabled (-1): Compression is disabled.
  • LevelDefault (0): Default compression level.
  • LevelBestSpeed (1): Best compression speed.
  • LevelBestCompression (2): Best compression.

Default Config

var ConfigDefault = Config{
Next: nil,
Level: LevelDefault,
}

Constants

// Compression levels
const (
LevelDisabled = -1
LevelDefault = 0
LevelBestSpeed = 1
LevelBestCompression = 2
)