{"id":17706954,"url":"https://github.com/etchteam/eslint","last_synced_at":"2026-04-24T05:01:53.554Z","repository":{"id":64952965,"uuid":"574477192","full_name":"etchteam/eslint","owner":"etchteam","description":"Our shared eslint config","archived":false,"fork":false,"pushed_at":"2026-04-21T12:25:11.000Z","size":2686,"stargazers_count":0,"open_issues_count":2,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-21T14:46:49.819Z","etag":null,"topics":["eslint","eslint-config","eslint-config-next","eslint-config-react"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"isc","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/etchteam.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2022-12-05T11:59:49.000Z","updated_at":"2026-04-21T12:24:48.000Z","dependencies_parsed_at":"2024-01-11T12:42:14.928Z","dependency_job_id":"cb72b7de-89cd-47fb-8550-5aa94ac438bd","html_url":"https://github.com/etchteam/eslint","commit_stats":{"total_commits":24,"total_committers":4,"mean_commits":6.0,"dds":"0.20833333333333337","last_synced_commit":"74a00f9c71d6d9b40a17bbe1f12c722f48ae94d7"},"previous_names":[],"tags_count":373,"template":false,"template_full_name":null,"purl":"pkg:github/etchteam/eslint","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/etchteam%2Feslint","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/etchteam%2Feslint/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/etchteam%2Feslint/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/etchteam%2Feslint/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/etchteam","download_url":"https://codeload.github.com/etchteam/eslint/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/etchteam%2Feslint/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32209895,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-24T03:15:14.334Z","status":"ssl_error","status_checked_at":"2026-04-24T03:15:11.608Z","response_time":64,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["eslint","eslint-config","eslint-config-next","eslint-config-react"],"created_at":"2024-10-25T00:06:28.835Z","updated_at":"2026-04-24T05:01:53.515Z","avatar_url":"https://github.com/etchteam.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# @etchteam/eslint\n\nThe eslint config that we use at [Etch](https://etch.co)\n\n**⚠️ Version 1.0.0+ requires ESLint 9** - See [migration guide](#migrating-from-eslint-8) below for upgrading.\n\n## Install\n\n```bash\nnpm i -D eslint@^9.0.0 prettier @etchteam/eslint-config eslint-plugin-react eslint-plugin-jsx-a11y eslint-plugin-storybook\n```\n\n## Usage\n\nCreate an `eslint.config.js` file in your project root:\n\n```javascript\nimport etchConfig from '@etchteam/eslint-config';\n\nexport default etchConfig;\n```\n\n## Environment-Specific Configs\n\nFor projects that don't need the full config, use environment-specific imports to reduce dependencies:\n\n### Next.js\n\n```bash\nnpm i -D eslint prettier @etchteam/eslint-config eslint-plugin-react eslint-plugin-jsx-a11y eslint-plugin-storybook @next/eslint-plugin-next eslint-plugin-react-hooks\n```\n\n```javascript\nimport nextjs from '@etchteam/eslint-config/nextjs';\n\nexport default nextjs;\n```\n\n### Node.js / Express\n\n```bash\nnpm i -D eslint prettier @etchteam/eslint-config\n```\n\n```javascript\nimport nodejs from '@etchteam/eslint-config/nodejs';\n\nexport default nodejs;\n```\n\n### Angular\n\n```bash\nnpm i -D eslint prettier @etchteam/eslint-config eslint-plugin-storybook angular-eslint\n```\n\n```javascript\nimport angular from '@etchteam/eslint-config/angular';\n\nexport default angular;\n```\n\n### Preact\n\n```bash\nnpm i -D eslint prettier @etchteam/eslint-config eslint-plugin-react eslint-plugin-jsx-a11y eslint-plugin-storybook\n```\n\n```javascript\nimport preact from '@etchteam/eslint-config/preact';\n\nexport default preact;\n```\n\n### Web Components (Lit)\n\n```bash\nnpm i -D eslint prettier @etchteam/eslint-config eslint-plugin-storybook eslint-plugin-lit\n```\n\n```javascript\nimport webComponents from '@etchteam/eslint-config/web-components';\n\nexport default webComponents;\n```\n\n### NestJS\n\n```bash\nnpm i -D eslint prettier @etchteam/eslint-config @darraghor/eslint-plugin-nestjs-typed\n```\n\n```javascript\nimport nestjs from '@etchteam/eslint-config/nestjs';\n\nexport default nestjs;\n```\n\n## Composable Configs\n\nBuild custom configs by combining individual modules:\n\n```javascript\nimport { base, json, yaml, react } from '@etchteam/eslint-config';\n\nexport default [\n  ...base,\n  ...json,\n  ...yaml,\n  ...react,\n  {\n    // Your custom overrides\n    rules: {\n      'react/prefer-read-only-props': 'warn',\n    },\n  },\n];\n```\n\n### Available Modules\n\n| Module | Description |\n|--------|-------------|\n| `base` | Core rules: JS, TypeScript, security, imports, prettier |\n| `json` | JSON file linting |\n| `yaml` | YAML file linting |\n| `storybook` | Storybook best practices |\n| `react` | React + JSX accessibility |\n\n### Environment Configs (Self-Contained)\n\n| Config | Includes |\n|--------|----------|\n| `nextjs` | base + json + yaml + storybook + react + Next.js rules |\n| `nodejs` | base + json + yaml + Node.js globals |\n| `angular` | base + json + yaml + storybook + Angular rules |\n| `preact` | base + json + yaml + storybook + react (Preact settings) |\n| `web-components` | base + json + yaml + storybook + Lit rules |\n| `nestjs` | base + json + yaml + NestJS rules + Jest globals |\n\n### Required Peer Dependencies\n\nThe **base**, **json**, and **yaml** modules have all their plugins included as package dependencies — no extra installs needed.\n\nOther configs require additional plugins to be installed as peer dependencies:\n\n| Config | Additional plugins to install |\n|--------|-------------------------------|\n| Default (`@etchteam/eslint-config`) | `eslint-plugin-react` `eslint-plugin-jsx-a11y` `eslint-plugin-storybook` |\n| `react` | `eslint-plugin-react` `eslint-plugin-jsx-a11y` |\n| `storybook` | `eslint-plugin-storybook` |\n| `nextjs` | `eslint-plugin-react` `eslint-plugin-jsx-a11y` `eslint-plugin-storybook` `@next/eslint-plugin-next` `eslint-plugin-react-hooks` |\n| `nodejs` | None |\n| `preact` | `eslint-plugin-react` `eslint-plugin-jsx-a11y` `eslint-plugin-storybook` |\n| `angular` | `eslint-plugin-storybook` `angular-eslint` |\n| `web-components` | `eslint-plugin-storybook` `eslint-plugin-lit` |\n| `nestjs` | `@darraghor/eslint-plugin-nestjs-typed` |\n\n## With lint-staged\n\n### New project\n\nRun the following:\n\n```bash\nnpm i -D husky lint-staged\n\necho \"module.exports = { '*.{ts,tsx,js,jsx,yml,yaml,json}': 'eslint --fix' };\" \u003e lint-staged.config.cjs\n\nnpx husky init\n\necho \"npx --no-install -- lint-staged\" \u003e .husky/pre-commit\n\n```\n\n### Existing project with husky and lint staged\n\nAdd the following to your lint-staged config:\n\n`'*.{ts,tsx,js,jsx,yml,yaml,json}': 'eslint --fix'`\n\n## Usage with VSCode\n\n### New project with no VSCode config\n\nRun the following:\n\n```bash\nmkdir .vscode\n\necho \"{ \\\"editor.formatOnSave\\\": false, \\\"editor.codeActionsOnSave\\\": { \\\"source.fixAll.eslint\\\": \\\"explicit\\\" } }\" \u003e .vscode/settings.json\n\n# The VSCode prettier extension doesn't read the eslint config, so specific\n# prettier overrides need to go in a prettier config for format on save\necho \"export default { singleQuote: true };\" \u003e prettier.config.js\n\n```\n\n### Exisiting project with VSCode config\n\nAdd the following to `.vscode/settings.json`:\n\n```json\n\"editor.formatOnSave\": false,\n\"editor.codeActionsOnSave\": {\n  \"source.fixAll.eslint\": \"explicit\"\n}\n```\n\nRun the following:\n\n```bash\n# The VSCode prettier extension doesn't read the eslint config, so specific\n# prettier overrides need to go in a prettier config for format on save\necho \"export default { singleQuote: true };\" \u003e prettier.config.js\n```\n\n## Migrating from ESLint 8\n\nIf you're upgrading from ESLint 8, follow these steps:\n\n### 1. Update Dependencies\n\n```bash\nnpm install eslint@^9.0.0 @etchteam/eslint-config@^1.0.0\n```\n\n### 2. Replace Configuration\n\nRemove your old `.eslintrc.*` files and create a new `eslint.config.js`:\n\n```javascript\nimport etchConfig from '@etchteam/eslint-config';\n\nexport default etchConfig;\n```\n\n### 3. Update Scripts (if needed)\n\nESLint 9 uses flat config by default, so your existing npm scripts should work without changes.\n\n### What's Changed\n\n- **Flat config format** - More explicit and performant\n- **ESLint 9 compatibility** - Latest features and fixes\n- **Updated plugins** - All plugins updated to latest versions\n- **Modular configs** - Import only what you need for your environment\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fetchteam%2Feslint","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fetchteam%2Feslint","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fetchteam%2Feslint/lists"}