chore: drop ESLint in favor of Biome#104
Conversation
Next 16 removed the built-in ESLint integration (next lint), and ESLint wasn't wired into CI or the build, so eslint-config-next's @next/next rules weren't being enforced anyway. Biome (run in the CI lint job) owns linting + formatting + import organization going forward. - Remove the 'lint': 'eslint' script and the eslint / eslint-config-next devDependencies from frontend/package.json. - Delete frontend/eslint.config.mjs. - Drop 'eslint.enable' from .vscode/settings.json (Biome is the formatter). - Update root pnpm-lock.yaml (removes eslint + 300 transitive deps). Verified locally: frozen install, pnpm typecheck, and biome ci all pass.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Greptile SummaryThis PR removes ESLint from the
Confidence Score: 5/5Safe to merge — purely removes ESLint tooling that was never wired into CI or the build, with Biome already covering the linting path end-to-end. All changed files are tooling/config only: deleted ESLint config, removed devDependencies, dropped an unused VS Code setting, and updated the lockfile. Biome is already the enforced linter in CI and the root workspace lint script remains intact. No application logic, tests, or runtime behaviour is touched. No files require special attention.
|
| Filename | Overview |
|---|---|
| frontend/package.json | Removes the lint script and eslint/eslint-config-next devDependencies; linting is now delegated to the root biome check . script and CI biome ci job. |
| frontend/eslint.config.mjs | Deleted ESLint flat-config file that extended eslint-config-next/core-web-vitals and eslint-config-next/typescript; no longer needed once Biome is the sole linter. |
| .vscode/settings.json | Drops eslint.enable: true; Biome VS Code extension is already configured as the default formatter and linter for all relevant file types. |
| pnpm-lock.yaml | Lockfile update removing ~300 ESLint transitive dependencies from the workspace; generated change consistent with the package.json edits. |
Flowchart
%%{init: {'theme': 'neutral'}}%%
flowchart TD
subgraph Before["Before this PR"]
A[Developer saves file] --> B[ESLint VS Code extension]
A --> C[Biome VS Code extension]
D[CI lint job] --> E["biome ci (enforced)"]
F["pnpm lint (frontend)"] --> G["eslint (not in CI)"]
end
subgraph After["After this PR"]
H[Developer saves file] --> I[Biome VS Code extension]
J[CI lint job] --> K["biome ci (enforced)"]
L["pnpm lint (root)"] --> M["biome check ."]
end
Reviews (1): Last reviewed commit: "chore: drop ESLint in favor of Biome" | Re-trigger Greptile
Consolidates linting on Biome and removes ESLint.
Rationale
next lint+ lint-at-build). ESLint here was opt-in and not wired into CI or the build, soeslint-config-next's@next/nextrules weren't actually enforced.lintjob viabiome ci) covers linting + formatting + import organization, plus rules-of-hooks and a large chunk ofjsx-a11y.@next/nextrules (no Biome equivalent) are no longer available — but they weren't enforced before this change either.Changes
"lint": "eslint"script and theeslint/eslint-config-nextdevDependencies fromfrontend/package.json.frontend/eslint.config.mjs."eslint.enable"from.vscode/settings.json(Biome is the formatter/linter).pnpm-lock.yaml(removes eslint + ~300 transitive deps).Verification (pnpm 10, Node 22, locally)
pnpm install --frozen-lockfile✓pnpm typecheck✓biome ci✓ (only the pre-existingnoNonNullAssertionwarning)