{"id":18552,"library":"metro-eslint","title":"metro-eslint","description":"Metro is the JavaScript bundler for React Native, providing fast reload cycles, scalable module bundling, and deep integration with React Native projects. This package, metro-eslint, is an ESLint plugin for Metro. Current stable version is 0.84.3 (released regularly, with breaking changes only in major versions). Key differentiators: sub-second HMR, built-in support for React Native's platform-specific extensions, and advanced caching. Alternatives: Webpack with React Native web support, but Metro is the default and recommended bundler for React Native. This specific package provides ESLint rules tailored to Metro's resolution and configuration.","status":"active","version":"0.0.5","language":"javascript","source_language":"en","source_url":"ssh://git@github.com/facebook/metro","tags":["javascript"],"install":[{"cmd":"npm install metro-eslint","lang":"bash","label":"npm"},{"cmd":"yarn add metro-eslint","lang":"bash","label":"yarn"},{"cmd":"pnpm add metro-eslint","lang":"bash","label":"pnpm"}],"dependencies":[{"reason":"Peer dependency required for ESLint plugin functionality.","package":"eslint","optional":true}],"imports":[{"note":"ESM-only; CJS require returns the esModule, but .default is needed only if using named export.","wrong":"const metroPlugin = require('metro-eslint').default","symbol":"default","correct":"import metroPlugin from 'metro-eslint'"},{"note":"Named export for accessing built-in configs.","wrong":"const configs = require('metro-eslint').configs","symbol":"configs","correct":"import { configs } from 'metro-eslint'"},{"note":"Named export for custom rule configurations.","wrong":"const rules = require('metro-eslint').rules","symbol":"rules","correct":"import { rules } from 'metro-eslint'"}],"quickstart":{"code":"// Add to .eslintrc.cjs\nmodule.exports = {\n  plugins: ['metro'],\n  extends: ['plugin:metro/recommended'],\n  rules: {\n    'metro/no-env-with-spread': 'error',\n  },\n};","lang":"javascript","description":"Minimal setup for using metro-eslint plugin in an ESLint configuration file."},"warnings":[{"fix":"Upgrade Node.js to v20.19 or later, or v22.","message":"Dropped support for Node.js v21, v23, and LTS minors released before v20.19 in v0.84.0.","severity":"breaking","affected_versions":">=0.84.0 <0.85.0"},{"fix":"Use import { mergeConfig } from 'metro-config' instead.","message":"The require('metro-config') pattern is deprecated in favor of ESM imports as of v0.83.0.","severity":"deprecated","affected_versions":">=0.83.0"},{"fix":"Use module.exports in .cjs files, or export default in .mjs/.js files.","message":"Config files must use .cjs extension when using CommonJS; .mjs or .js are treated as ESM.","severity":"gotcha","affected_versions":">=0.83.0"},{"fix":"Switch to import { mergeConfig } from 'metro-config' in .mjs or .js config files.","message":"Metro v0.83.0 introduced ESM-only config support, breaking CommonJS require('metro-config').","severity":"breaking","affected_versions":">=0.83.0 <0.84.0"}],"env_vars":null,"last_verified":"2026-04-25T00:00:00.000Z","next_check":"2026-07-24T00:00:00.000Z","problems":[{"fix":"npm install --save-dev metro-eslint","cause":"Missing dependency; metro-eslint is not installed.","error":"Error: Cannot find module 'metro-eslint'"},{"fix":"Add 'parserOptions: { sourceType: 'module' }' to .eslintrc or use .mjs extension.","cause":"ESLint is not configured to parse ESM syntax; metro-eslint requires ESM.","error":"Parsing error: The keyword 'import' is reserved"},{"fix":"Add 'plugins: [\"metro\"]' to your ESLint config.","cause":"The metro-eslint plugin is not registered in ESLint config.","error":"Error: 'metro' plugin is not defined"}],"ecosystem":"npm","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null}