Share target browsers between different front-end tools, like Autoprefixer, Stylelint and babel-env-preset
npx @tessl/cli install tessl/npm-browserslist@3.2.0Browserslist provides shared browser configuration for different front-end tools like Autoprefixer, Babel, Stylelint, and other build tools. It enables developers to define browser support requirements using human-readable queries (like 'last 2 versions', '> 1%', 'IE 10') that are automatically resolved using Can I Use database data.
npm install browserslistconst browserslist = require("browserslist");For ES modules:
import browserslist from "browserslist";const browserslist = require("browserslist");
// Get browsers for default queries
const browsers = browserslist();
console.log(browsers);
// => ['chrome 88', 'firefox 85', 'safari 14', ...]
// Use specific queries
const modernBrowsers = browserslist('last 2 versions, > 1%');
console.log(modernBrowsers);
// Calculate market coverage
const coverage = browserslist.coverage(modernBrowsers);
console.log(`Coverage: ${coverage}%`);Browserslist is built around several key components:
Core functionality for selecting browsers based on queries. Returns browser lists in Can I Use format for use with build tools.
/**
* Return array of browsers by selection queries
* @param queries - Browser queries (defaults to browserslist.defaults)
* @param opts - Options object
* @returns Array with browser names in Can I Use format
*/
function browserslist(
queries?: string | string[],
opts?: BrowserslistOptions
): string[];
interface BrowserslistOptions {
/** Path to processed file (default: current directory) */
path?: string;
/** Processing environment (default: "production") */
env?: string;
/** Path to config file with queries */
config?: string;
/** Custom browser usage statistics for "> 1% in my stats" query */
stats?: string | object;
/** Do not throw on unknown version in direct query (default: false) */
ignoreUnknownVersions?: boolean;
/** Disable security checks for extend query (default: false) */
dangerousExtend?: boolean;
}Calculate market coverage percentage for browser lists. Essential for understanding the reach of browser support decisions.
/**
* Return browsers market coverage
* @param browsers - Browser names in Can I Use format
* @param stats - Statistics to use ("global", "my stats", country codes, or custom object)
* @returns Total market coverage percentage
*/
browserslist.coverage(
browsers: string[],
stats?: string | object
): number;Configuration loading and parsing for different file formats and environments. Supports package.json, .browserslistrc, and browserslist config files.
/**
* Load configuration with environment resolution
* @param opts - Options object with path, env, config properties
* @returns Loaded configuration queries
*/
browserslist.loadConfig(opts: ConfigLoadOptions): string[] | object | undefined;
/**
* Find browserslist configuration in directory tree
* @param from - Starting directory path
* @returns Found configuration or undefined
*/
browserslist.findConfig(from: string): object | undefined;
/**
* Parse browserslist configuration string
* @param string - Configuration string to parse
* @returns Parsed configuration with environment sections
*/
browserslist.parseConfig(string: string): object;
/**
* Read and parse configuration file
* @param file - Path to configuration file
* @returns Parsed configuration
*/
browserslist.readConfig(file: string): object;
interface ConfigLoadOptions {
/** Starting directory path */
path?: string;
/** Environment name */
env?: string;
/** Path to specific config file */
config?: string;
}/** Default browser queries used when no queries specified */
browserslist.defaults: string[];
/** Browser data from Can I Use database */
browserslist.data: object;
/** Browser usage statistics (global and custom) */
browserslist.usage: {
global: object;
custom: object | null;
};
/** Browser name aliases (fx -> firefox, etc.) */
browserslist.aliases: object;
/** Version aliases for browsers with joined versions */
browserslist.versionAliases: object;Browserslist provides a command-line tool for querying browsers and calculating coverage.
# Install globally or use via npx
npm install -g browserslist
# or
npx browserslist
# Basic usage
browserslist # Use default queries
browserslist "last 2 versions" # Use specific queries
browserslist --coverage "last 2 versions" # Show coverage percentage
# Configuration options
browserslist --config="path/to/config" # Use specific config file
browserslist --env="development" # Use specific environment
browserslist --stats="path/to/stats.json" # Use custom statistics
browserslist --coverage=US "last 2 versions" # Coverage for specific countryThe CLI supports all the same queries as the JavaScript API and can be used for debugging browser configurations in build processes.
/**
* Custom error class for browserslist-specific errors
*/
class BrowserslistError extends Error {
name: "BrowserslistError";
message: string;
browserslist: true;
}Browserslist throws BrowserslistError for: