Skill v1.0.0
Trusted Publisher100/100version: "1.0.0" name: netlify-config description: Reference for netlify.toml configuration. Use when configuring build settings, redirects, rewrites, headers, deploy contexts, environment variables, or any site-level configuration. Covers the complete netlify.toml syntax including redirects with splats/conditions, headers, deploy contexts, functions config, and edge functions config.
Netlify Configuration (netlify.toml)
Place netlify.toml at the repository root (or at the base directory for monorepos).
Build Settings
[build]base = "project/" # Base directory (default: root)command = "npm run build" # Build commandpublish = "dist/" # Output directory
Redirects
# Basic redirect[[redirects]]from = "/old"to = "/new"status = 301 # 301 (default), 302, 200 (rewrite), 404# SPA catch-all[[redirects]]from = "/*"to = "/index.html"status = 200# Splat (wildcard)[[redirects]]from = "/blog/*"to = "/news/:splat"# Path parameters[[redirects]]from = "/users/:id"to = "/api/users/:id"status = 200# Force (override existing files)[[redirects]]from = "/app/*"to = "/index.html"status = 200force = true# Proxy to external service[[redirects]]from = "/api/*"to = "https://api.example.com/:splat"status = 200[redirects.headers]X-Custom = "value"# Country/language conditions[[redirects]]from = "/*"to = "/fr/:splat"status = 200conditions = { Country = ["FR"], Language = ["fr"] }
Rule order matters — Netlify processes the first matching rule. Place specific rules before general ones.
Headers
[[headers]]for = "/*"[headers.values]X-Frame-Options = "DENY"X-Content-Type-Options = "nosniff"[[headers]]for = "/assets/*"[headers.values]Cache-Control = "public, max-age=31536000, immutable"
Headers apply only to files served from Netlify's CDN (not to function or edge function responses — set those in code).
Deploy Contexts
Override settings per deploy context:
[context.production]command = "npm run build"environment = { NODE_ENV = "production" }[context.deploy-preview]command = "npm run build:preview"[context.branch-deploy]command = "npm run build:staging"[context.dev]environment = { NODE_ENV = "development" }# Specific branch[context."staging"]command = "npm run build:staging"
Environment Variables
[build.environment]NODE_VERSION = "20"[context.production.environment]API_URL = "https://api.prod.com"[context.deploy-preview.environment]API_URL = "https://api.staging.com"
Do not put secrets in netlify.toml (it's committed to source control). Use the Netlify UI or CLI for sensitive values. See the netlify-cli-and-deploy skill for CLI environment variable management.
Functions Configuration
[functions]directory = "netlify/functions" # Defaultnode_bundler = "esbuild"# Scheduled function[functions."cleanup"]schedule = "@daily"
Edge Functions Configuration
[[edge_functions]]path = "/admin"function = "auth"# Import map for Deno URL imports[functions]deno_import_map = "./import_map.json"
Dev Server
[dev]command = "npm start" # Dev server commandport = 8888 # Netlify Dev porttargetPort = 3000 # Your app's dev server portframework = "#auto" # "#auto", "#static", "#custom"
Plugins
[[plugins]]package = "@netlify/plugin-lighthouse"[plugins.inputs]audits = ["performance", "accessibility"]
Image CDN
[images]remote_images = ["https://example\\.com/.*"]
See the netlify-image-cdn skill for full Image CDN usage.