{"id":25527,"library":"eslint-plugin-square","title":"eslint-plugin-square","description":"Square's custom ESLint plugin that consolidates frontend linting rules and configurations including base, Ember, React, strict, and TypeScript configs. Current stable version is 26.0.1, requires Node ^18.0.0 || >=20.0.0 and ESLint >= 8.40.0. Ships TypeScript types, integrates eslint-plugin-import, eslint-plugin-unicorn, eslint-plugin-react, eslint-plugin-react-hooks, eslint-plugin-jsx-a11y, prettier, and more. Not recommended for public use outside Square. Breaking changes in v26: dropped Node v16 support; v24 added warning on unused ESLint disable directives in base config.","status":"active","version":"26.0.1","language":"javascript","source_language":"en","source_url":"https://github.com/square/eslint-plugin-square","tags":["javascript","ember","eslint","eslint-config","eslint-plugin","eslintplugin","linter","react","typescript"],"install":[{"cmd":"npm install eslint-plugin-square","lang":"bash","label":"npm"},{"cmd":"yarn add eslint-plugin-square","lang":"bash","label":"yarn"},{"cmd":"pnpm add eslint-plugin-square","lang":"bash","label":"pnpm"}],"dependencies":[{"reason":"peer dependency — core linter required to run rules and configurations","package":"eslint","optional":false},{"reason":"recommended for running parallel lint scripts in package.json","package":"npm-run-all","optional":true},{"reason":"bundled dependency for base config rules","package":"eslint-plugin-unicorn","optional":false},{"reason":"bundled dependency for base config rules","package":"eslint-plugin-import","optional":false},{"reason":"used via eslint-plugin-prettier in configs","package":"prettier","optional":true}],"imports":[{"note":"Use the extends syntax to load a preset config; adding as a plugin alone does not activate rules.","wrong":"module.exports = { plugins: ['square'] }","symbol":"plugin","correct":"module.exports = { extends: ['plugin:square/base'] }"},{"note":"ESM-only since v26? Check package.json exports. Named export 'configs' contains all preset configurations.","wrong":"const baseConfig = require('eslint-plugin-square').base;","symbol":"configs","correct":"import { configs } from 'eslint-plugin-square'; const baseConfig = configs.base;"},{"note":"ESM import for custom rules; use named export 'rules'. Available since v23.1.0.","wrong":"const noRestrictedFilesRule = require('eslint-plugin-square').rules['no-restricted-files'];","symbol":"rules","correct":"import { rules } from 'eslint-plugin-square'; const noRestrictedFilesRule = rules['no-restricted-files'];"},{"note":"ESM-only, available in v26+? Type exported for flat config usage. Not available in CJS.","wrong":"","symbol":"FlatConfig","correct":"import { FlatConfig } from 'eslint-plugin-square'; export default [...FlatConfig];"}],"quickstart":{"code":"// Install:\n// yarn add --dev eslint eslint-plugin-square npm-run-all\n\n// .eslintrc.cjs (CommonJS):\nmodule.exports = {\n  extends: ['plugin:square/base'],\n  env: { browser: true, node: true },\n};\n\n// package.json scripts:\n{\n  \"scripts\": {\n    \"lint\": \"npm-run-all --continue-on-error --aggregate-output --parallel lint:*\",\n    \"lint:js\": \"eslint --report-unused-disable-directives --cache .\"\n  }\n}\n\n// Then run:\n// yarn lint","lang":"javascript","description":"Shows how to install, configure the base preset in a .eslintrc.cjs file, and set up npm-run-all scripts."},"warnings":[{"fix":"Upgrade Node to 18 or 20+.","message":"Node v16 support dropped in v26.0.0. Must use Node ^18.0.0 || >=20.0.0.","severity":"breaking","affected_versions":">=26.0.0"},{"fix":"Use --report-unused-disable-directives to check, or disable with 'no-unused-disable-directives': 'off'.","message":"Unused ESLint disable directives now warn by default in base config since v24.0.0.","severity":"breaking","affected_versions":">=24.0.0"},{"fix":"Ensure you're using eslint-plugin-square v25+ if you depend on Unicorn rules.","message":"eslint-plugin-unicorn v46+ introduced breaking changes; base config updated in v25.0.0.","severity":"deprecated","affected_versions":">=25.0.0"},{"fix":"If using externally, pin to a specific version and expect breaking changes.","message":"The plugin is not recommended for public use outside Square; configs may change without notice.","severity":"gotcha","affected_versions":"*"},{"fix":"Rename to .eslintrc.cjs or use ESM config format (eslint.config.js with export default).","message":"ESM projects must use .eslintrc.cjs instead of .eslintrc.js when using CommonJS config export.","severity":"gotcha","affected_versions":"*"}],"env_vars":null,"last_verified":"2026-05-01T00:00:00.000Z","next_check":"2026-07-30T00:00:00.000Z","problems":[{"fix":"Run 'yarn add --dev eslint-plugin-square' or check node_modules.","cause":"Missing installed package or incorrect configuration.","error":"Error: ESLint couldn't find the plugin \"eslint-plugin-square\"."},{"fix":"Update eslint-plugin-square to v25+ or pin eslint-plugin-unicorn to compatible version.","cause":"Breaking change in eslint-plugin-unicorn major version bump.","error":"Oops! Something went wrong! :( ESLint: 8.x. Error: Configuration for rule \"unicorn/xxx\" is invalid."},{"fix":"Use dynamic import() or switch to ESM (eslint.config.js) with import statement.","cause":"Trying to import named exports via require() in a CJS file; plugin may be ESM-only in recent versions.","error":"TypeError: Cannot destructure property 'configs' of 'require(...)' as it is undefined."}],"ecosystem":"npm","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null}