Best Practices
Flat Config recipes for running JS/CSS/HTML under one Baseline policy.
Goal
Align Baseline across an app/monorepo and lint JavaScript (including Web APIs /
JS Builtins), CSS, and HTML using the same threshold (widely / newly /
year).
Install
We’ll use sibling plugins for CSS and HTML, plus common globals.
npm i -D eslint eslint-plugin-baseline-js @eslint/css @html-eslint/eslint-plugin @html-eslint/parser globalsFlat Config (full, TS‑aware)
import baselineJs, { BASELINE } from "eslint-plugin-baseline-js";
import css from "@eslint/css";
import html from "@html-eslint/eslint-plugin";
import htmlParser from "@html-eslint/parser";
import globals from "globals";
export default [
  // Shared: browser globals (adjust per project: browser/worker/node)
  {
    languageOptions: {
      globals: globals.browser,
    },
  },
  // JavaScript / TypeScript
  { plugins: { "baseline-js": baselineJs } },
  { files: ["**/*.{ts,tsx}"], languageOptions: { parser: tsParser, parserOptions: { project: ["./tsconfig.json"] } } },
  baselineJs.configs["recommended-ts"]({ level: "error", available: BASELINE.WIDELY }),
  // CSS
  {
    files: ["**/*.css"],
    plugins: { css },
    language: "css/css",
    rules: {
      // Allow only widely available CSS features
      "css/use-baseline": ["error", { available: BASELINE.WIDELY }],
    },
  },
  // HTML
  {
    files: ["**/*.html"],
    plugins: { "@html-eslint": html },
    languageOptions: { parser: htmlParser },
    rules: {
      // Allow only widely available HTML features
      "@html-eslint/use-baseline": ["error", { available: BASELINE.WIDELY }],
    },
  },
];Variations (pick what fits)
- Year‑based Baseline
- JavaScript: 
baselineJs.configs['recommended-ts']({ available: 2024 }) - CSS/HTML: 
{ available: 2024 } 
 - JavaScript: 
 newly- JavaScript: 
{ available: BASELINE.NEWLY } - CSS/HTML: 
{ available: 'newly' } 
- JavaScript: 
 - TypeScript (more precise)
- Use 
recommended-tsand configure the parser for TS files - See Quick Start → Recommended (TypeScript)
 
 - Use 
 
Extra: environment globals
languageOptions.globals tells ESLint about runtime globals (window,
document, …). It’s optional, but helps avoid no-undef noise. Set it to match
your environment.
import globals from 'globals';
export default [
  // Node project
  { languageOptions: { globals: globals.node } },
  // or Worker
  // { languageOptions: { globals: globals.worker } },
];Operational tips
- Review Scope & Terms (JS Syntax / JS Builtins / Web APIs)
 - Use 
ignoreFeatures/ignoreNodeTypesfor exceptions and phased rollout - Check coverage periodically to understand what’s mapped (/docs/meta/coverage)
 
Last updated on