Configuration
While serve works out-of-the-box with zero configuration, you can customize its behavior by creating a serve.json file in the root of the directory you are serving.
serve.json
serve automatically looks for a serve.json file to apply advanced settings like custom rewrites, redirects, headers, and more. This file uses the same configuration schema as Vercel Deployments.
Here is an example serve.json file demonstrating some of the available options:
{
"public": "dist",
"cleanUrls": true,
"rewrites": [
{ "source": "/api/**", "destination": "/api/index.js" }
],
"redirects": [
{ "source": "/old-page", "destination": "/new-page", "type": 301 }
],
"headers": [
{
"source": "**/*.@(jpg|jpeg|gif|png)",
"headers": [
{
"key": "Cache-Control",
"value": "max-age=7200"
}
]
}
],
"trailingSlash": false,
"symlinks": true
}
Configuration Options
Based on serve-handler and types.ts, the following properties are supported in serve.json:
| Property | Type | Description |
|---|---|---|
public |
string |
The directory to serve files from. If not set, the root directory being served is used. |
cleanUrls |
boolean or string[] |
If true, automatically remove .html extensions from URLs. Can also be an array of globs. |
rewrites |
Array<Rewrite> |
A list of rewrite rules. A rewrite changes the serving path without changing the URL in the browser. |
redirects |
Array<Redirect> |
A list of redirect rules. A redirect sends an HTTP redirect status code (e.g., 301 or 302) to the client. |
headers |
Array<Header> |
A list of rules for adding custom HTTP response headers. |
directoryListing |
boolean or string[] |
Enable or disable the directory listing view. Can be a boolean or an array of globs to apply it to. |
unlisted |
string[] |
An array of file or directory globs to hide from the directory listing. |
trailingSlash |
boolean |
If true, adds a trailing slash to URLs that don't have one. If false, removes it. |
renderSingle |
boolean |
If true, serves index.html for all requests that don't match a file. Equivalent to the --single flag. |
symlinks |
boolean |
If true, resolves symbolic links. Equivalent to the --symlinks flag. |
etag |
boolean |
If true (default), enables ETag headers for caching. |
Object Shapes
- Rewrite:
{ "source": "/path/:id", "destination": "/details.html" } - Redirect:
{ "source": "/old", "destination": "/new", "type": 301 }(typecan be 301, 302, 307, 308). - Header:
{ "source": "/static/**", "headers": [{ "key": "X-Custom", "value": "hello" }] }
Deprecated Configuration Files
The source/utilities/config.ts file indicates that serve can also read configuration from now.json and package.json for backward compatibility. However, this is deprecated.
- In
now.json, configuration should be undernow.static. - In
package.json, configuration should be understatic.
A warning will be printed if you use these files. It is strongly recommended to use a dedicated serve.json file for all your configuration needs.