Guides
Configuration
Most scans work without any config. But when you need control—excluding paths, adjusting concurrency, setting up auth—here's how.
The Config File
Create unlighthouse.config.ts in your project root:
import { defineUnlighthouseConfig } from 'unlighthouse/config'
export default defineUnlighthouseConfig({
site: 'https://example.com',
scanner: {
exclude: ['/admin/*', '/api/*'],
},
})
Now run unlighthouse without flags. It picks up your config automatically.
The import is optional—skip it if you have resolution issues. The config still works.
Config File Location
Unlighthouse looks for these files in order:
unlighthouse.config.tsunlighthouse.config.jsunlighthouse.config.mjs
Or specify one explicitly:
unlighthouse --config-file ./configs/production.config.ts
Common Configs
Skip Paths You Don't Care About
export default defineUnlighthouseConfig({
site: 'https://example.com',
scanner: {
exclude: [
'/api/*', // API routes
'/admin/*', // Admin pages
'/*.pdf', // PDF files
'/amp/*', // AMP versions
],
},
})
Or scan only specific paths:
scanner: {
include: ['/products/*', '/blog/*'], // Only these
}
Desktop Instead of Mobile
Default is mobile. Switch to desktop:
scanner: {
device: 'desktop',
}
More Accurate Scores
Lighthouse scores vary between runs. For reliable numbers:
scanner: {
samples: 3, // Run 3x per page, average the results
throttle: true, // Simulate real network (slower but realistic)
},
puppeteerClusterOptions: {
maxConcurrency: 1, // One at a time (less CPU contention)
}
Trade-off: Much slower scans. Use for CI assertions, not development.
Protected Sites (Auth)
// Basic auth
auth: {
username: process.env.AUTH_USER,
password: process.env.AUTH_PASS,
}
// Cookie auth
cookies: [
{ name: 'session', value: process.env.SESSION_TOKEN, domain: '.example.com' }
]
See full authentication guide.
CI Performance Budgets
Fail your build if scores drop:
ci: {
budget: {
performance: 80,
accessibility: 90,
'best-practices': 80,
seo: 90,
},
buildStatic: true, // Generate shareable HTML report
}
Advanced
Customize Lighthouse Directly
Pass options straight to Lighthouse:
lighthouseOptions: {
onlyCategories: ['performance', 'accessibility'], // Skip SEO/best-practices
skipAudits: ['uses-http2'], // Ignore specific audits
throttlingMethod: 'devtools',
}
React to Scan Events
hooks: {
'task-complete': (path, report) => {
if (report.score.performance < 0.5) {
console.warn(`⚠️ ${path} scored ${report.score.performance}`)
}
},
'worker-finished': () => {
console.log('All done!')
},
}
Environment-Based Config
export default defineUnlighthouseConfig(() => {
const isProd = process.env.NODE_ENV === 'production'
return {
site: isProd ? 'https://mysite.com' : 'http://localhost:3000',
scanner: {
samples: isProd ? 3 : 1,
throttle: isProd,
},
}
})
Full Reference
See Config Reference for every option with types and defaults.
Did this page help you?