Config
Key rule options and presets, with copy‑pasteable examples.
Options (overview)
Quick reference (all options)
type BaselineName = 'widely' | 'newly';
type BaselineOption = BaselineName | number; // YYYY
type IncludePreset = 'auto' | 'safe' | 'type-aware';
type Include = boolean | { preset?: IncludePreset };
interface UseBaselineOptions {
  available?: BaselineOption;
  baseline?: BaselineOption;
  includeWebApis?: Include;
  includeJsBuiltins?: Include;
  ignoreFeatures?: string[];  // featureId or /regex/
  ignoreNodeTypes?: string[]; // ESTree node.type or /regex/
}Advanced options (optional)
Use these only when you need tighter control (forcing types or narrowing targets).
type UseTypes = 'off' | 'auto' | 'require';
interface IncludeAdvanced {
  preset?: 'auto' | 'safe' | 'type-aware';
  useTypes?: UseTypes;   // How to use types ('type-aware' effectively means 'require')
  only?: string[];       // Limit to specific featureIds
  ignore?: string[];     // Exclude specific featureIds
}Core options
| Prop | Type | Default | Description | 
|---|---|---|---|
available | widely / newly / YYYY | widely | Baseline threshold | 
Feature detection
includeWebApis
type Include = boolean | { preset?: 'auto' | 'safe' | 'type-aware' };- Default: 
offinconfigs.baseline,'auto'inconfigs.recommended - Purpose: choose how aggressively to detect Web APIs (see presets)
 
rules: {
  'baseline-js/use-baseline': ['error', {
    available: 'widely',
    includeWebApis: { preset: 'auto' },
  }],
}includeJsBuiltins
type Include = boolean | { preset?: 'auto' | 'safe' | 'type-aware' };- Default: 
offinconfigs.baseline,'auto'inconfigs.recommended - Purpose: choose how aggressively to detect JS Builtins (same shape as 
includeWebApis) 
rules: {
  'baseline-js/use-baseline': ['error', {
    available: 'widely',
    includeJsBuiltins: { preset: 'auto' },
  }],
}Filters & suppression
ignoreFeatures: string[]— web‑features featureId or/regex/ignoreNodeTypes: string[]— ESTreenode.type(e.g.WithStatement)
rules: {
  'baseline-js/use-baseline': ['error', {
    available: 2020,
    ignoreFeatures: ['nullish-coalescing', '/^optional-/'],
    ignoreNodeTypes: ['WithStatement', '/Expression$/'],
  }],
}Preset semantics (overview)
See below for code examples showing preset: 'safe' | 'auto' | 'type‑aware' in action.
includeWebApis / includeJsBuiltins — meaning & examples
Both control “what surface to detect and how aggressive it should be”. The three common modes:
- 
preset: 'safe'(most conservative)- Detects only literal‑safe patterns (low false positives)
 - Example:
safe preset (JS Builtins) rules: { 'baseline-js/use-baseline': ['error', { available: 'widely', includeJsBuiltins: { preset: 'safe' }, }], } 
 - 
preset: 'auto'(recommended)- Uses types when available, otherwise falls back safely
 - Example:
auto preset (Web APIs + JS Builtins) rules: { 'baseline-js/use-baseline': ['error', { available: 'widely', includeWebApis: { preset: 'auto' }, includeJsBuiltins: { preset: 'auto' }, }], } 
 - 
preset: 'type-aware'(strictest)- Requires TS types. Resolves the receiver’s actual type before reporting instance members
 - Example:
type-aware preset (TS project) import tsParser from '@typescript-eslint/parser'; export default [ { files: ['**/*.{ts,tsx}'], languageOptions: { parser: tsParser, parserOptions: { project: ['./tsconfig.json'] } } }, { rules: { 'baseline-js/use-baseline': ['error', { available: 'widely', includeWebApis: { preset: 'type-aware' }, includeJsBuiltins: { preset: 'type-aware' }, }], }, }, ] 
 
Filtering (optional)
only: string[]— watch only these featureIdsignore: string[]— exclude these featureIds
featureId refers to web‑features IDs (e.g. nullish-coalescing, intl-locale-info).
rules: {
  'baseline-js/use-baseline': ['error', {
    available: 'widely',
    includeWebApis: { preset: 'safe', only: ['canvas-2d-alpha'] },
  }],
}Presets (Flat Config)
We currently provide three presets; start here in most cases.
Available presets
configs.baseline / configs.recommended / configs['recommended-ts']
(Flat Config helpers; accept available and level)
import baselineJs from 'eslint-plugin-baseline-js';
export default [
  { plugins: { 'baseline-js': baselineJs } },
  // opts: { available?: 'widely'|'newly'|YYYY; level?: 'error'|'warn' }
  baselineJs.configs.baseline({ available: 'widely', level: 'error' }),
]rules: { 
  'baseline-js/use-baseline': [level, { available: baseline }]
}import baselineJs from 'eslint-plugin-baseline-js';
export default [
  { plugins: { 'baseline-js': baselineJs } },
  // opts: { available?: 'widely'|'newly'|YYYY; level?: 'error'|'warn' }
  baselineJs.configs.recommended({ available: 'widely' }),
]rules: {
  'baseline-js/use-baseline': [
    level,
    { 
      available: baseline,
      includeWebApis: { preset: 'auto' }, 
      includeJsBuiltins: { preset: 'auto' }
    },
  ],
}import tsParser from '@typescript-eslint/parser';
import baselineJs from 'eslint-plugin-baseline-js';
export default [
  { files: ['**/*.{ts,tsx}'], languageOptions: { parser: tsParser, parserOptions: { project: ['./tsconfig.json'] } } },
  { plugins: { 'baseline-js': baselineJs } },
  // opts: { available?: 'widely'|'newly'|YYYY; level?: 'error'|'warn' }
  baselineJs.configs['recommended-ts']({ available: 'widely' }),
]rules: {
  'baseline-js/use-baseline': [
    level,
    { 
      available: baseline,
      includeWebApis: { preset: 'type-aware' },
      includeJsBuiltins: { preset: 'type-aware' }
    },
  ],
}Notes
baseline remains as a compatibility alias; internally it maps to available.
Use with .eslintrc.* (non‑Flat Config)
Equivalent setup when not using Flat Config. For consistency, all arguments/options are unified under available.
// .eslintrc.js
module.exports = {
  plugins: ['baseline-js'],
  rules: {
    'baseline-js/use-baseline': ['error', { available: 'widely' }],
  },
};// .eslintrc.js
module.exports = {
  plugins: ['baseline-js'],
  rules: {
    'baseline-js/use-baseline': ['error', {
      available: 'widely',
      includeWebApis: { preset: 'auto' },
      includeJsBuiltins: { preset: 'auto' },
    }],
  },
};// .eslintrc.js
module.exports = {
  plugins: ['baseline-js'],
  overrides: [
    {
      files: ['**/*.ts', '**/*.tsx'],
      parser: '@typescript-eslint/parser',
      parserOptions: { project: ['./tsconfig.json'] },
      rules: {
        'baseline-js/use-baseline': ['error', {
          available: 'widely',
          includeWebApis: { preset: 'type-aware' },
          includeJsBuiltins: { preset: 'type-aware' },
        }],
      },
    },
  ],
};Use preset helpers in .eslintrc (partial)
You can spread only the rules from a Flat helper into legacy config.
// .eslintrc.js
const baselineJs = require('eslint-plugin-baseline-js');
module.exports = {
  plugins: ['baseline-js'],
  // Use either 'baseline' or 'recommended'
  baselineJs.configs.recommended({ available: 'widely' }),
};// .eslintrc.js (TypeScript: recommended-ts)
const baselineJs = require('eslint-plugin-baseline-js');
module.exports = {
  plugins: ['baseline-js'],
  overrides: [
    {
      files: ['**/*.ts', '**/*.tsx'],
      parser: '@typescript-eslint/parser',
      parserOptions: { project: ['./tsconfig.json'] },
      baselineJs.configs['recommended-ts']({ available: 'widely' }),
    },
  ],
};Messages
widely
Feature '<id>' is not a widely available Baseline feature. newly
Feature '<id>' is not a newly available Baseline feature. Year‑based
Feature '<id>' became Baseline in <YYYY> and exceeds <year>. Self rules (internal)
Minimal supplements where community rules don’t exist.
baseline-js/no-bigint64array
- Detects use of 
BigInt64Array/BigUint64Array(new/ calls / member access) - Limitation: shadowed identifiers/aliases not handled yet (ReferenceTracker TBD)
 
baseline-js/no-function-caller-arguments
- Detects 
Function#caller/Function#arguments - Limitation: type‑unaware; may react to arbitrary objects’ 
.caller/.arguments 
baseline-js/no-math-sum-precise
- Detects 
Math.sumPrecise()(proposal tracking) - Limitation: alias calls not handled yet
 
baseline-js/no-temporal
- Detects 
TemporalAPI usage - Limitation: shadowed/aliased 
Temporalnot handled yet 
Last updated on