Skip to main content
Version: Next

Static

Static middleware for Fiber that serves static files such as images, CSS, and JavaScript.

info

By default, Static will serve index.html files in response to a request on a directory. You can change it from Config`

Signatures

func New(root string, cfg ...Config) fiber.Handler

Examples

Import the middleware package that is part of the Fiber web framework

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

Serving files from a directory

app.Get("/*", static.New("./public"))
Test
curl http://localhost:3000/hello.html
curl http://localhost:3000/css/style.css

Serving files from a directory with Use

app.Use("/", static.New("./public"))
Test
curl http://localhost:3000/hello.html
curl http://localhost:3000/css/style.css

Serving a file

app.Use("/static", static.New("./public/hello.html"))
Test
curl http://localhost:3000/static # will show hello.html
curl http://localhost:3000/static/john/doee # will show hello.html

Serving files using os.DirFS

app.Get("/files*", static.New("", static.Config{
FS: os.DirFS("files"),
Browse: true,
}))
Test
curl http://localhost:3000/files/css/style.css
curl http://localhost:3000/files/index.html

Serving files using embed.FS

//go:embed path/to/files
var myfiles embed.FS

app.Get("/files*", static.New("", static.Config{
FS: myfiles,
Browse: true,
}))
Test
curl http://localhost:3000/files/css/style.css
curl http://localhost:3000/files/index.html

SPA (Single Page Application)

app.Use("/web", static.New("", static.Config{
FS: os.DirFS("dist"),
}))

app.Get("/web*", func(c fiber.Ctx) error {
return c.SendFile("dist/index.html")
})
Test
curl http://localhost:3000/web/css/style.css
curl http://localhost:3000/web/index.html
curl http://localhost:3000/web
caution

To define static routes using Get, append the wildcard (*) operator at the end of the route.

Config

PropertyTypeDescriptionDefault
Nextfunc(fiber.Ctx) boolNext defines a function to skip this middleware when returned true.nil
FSfs.FSFS is the file system to serve the static files from.

You can use interfaces compatible with fs.FS like embed.FS, os.DirFS etc.
nil
CompressboolWhen set to true, the server tries minimizing CPU usage by caching compressed files. The middleware will compress the response using gzip, brotli, or zstd compression depending on the Accept-Encoding header.

This works differently than the github.com/gofiber/compression middleware.
false
ByteRangeboolWhen set to true, enables byte range requests.false
BrowseboolWhen set to true, enables directory browsing.false
DownloadboolWhen set to true, enables direct download.false
IndexNames[]stringThe names of the index files for serving a directory.[]string{"index.html"}
CacheDurationstringExpiration duration for inactive file handlers.

Use a negative time.Duration to disable it.
10 * time.Second
MaxAgeintThe value for the Cache-Control HTTP-header that is set on the file response. MaxAge is defined in seconds.0
ModifyResponsefiber.HandlerModifyResponse defines a function that allows you to alter the response.nil
NotFoundHandlerfiber.HandlerNotFoundHandler defines a function to handle when the path is not found.nil
info

You can set CacheDuration config property to -1 to disable caching.

Default Config

var ConfigDefault = Config{
Index: []string{"index.html"},
CacheDuration: 10 * time.Second,
}