chore(deps): bump eslint from 8.57.1 to 9.26.0 in /web#1366
chore(deps): bump eslint from 8.57.1 to 9.26.0 in /web#1366dependabot[bot] wants to merge 1 commit intomainfrom
Conversation
Bumps [eslint](https://github.com/eslint/eslint) from 8.57.1 to 9.26.0. - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/v9.26.0/CHANGELOG.md) - [Commits](eslint/eslint@v8.57.1...v9.26.0) --- updated-dependencies: - dependency-name: eslint dependency-version: 9.26.0 dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Pull Request Test Coverage Report for Build 21582801950Warning: This coverage report may be inaccurate.This pull request's base commit is no longer the HEAD commit of its target branch. This means it includes changes from outside the original pull request, including, potentially, unrelated coverage changes.
Details
💛 - Coveralls |
|
@coderabbitai review |
✅ Actions performedReview triggered.
|
📝 WalkthroughWalkthroughESLint versions were updated to ^9.26.0 in three package.json files across web, admin app, and lib. No other scripts, configs, or code were changed. Changes
Estimated code review effort🎯 1 (Trivial) | ⏱️ ~2 minutes Poem
🚥 Pre-merge checks | ✅ 2 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing touches🧪 Generate unit tests (beta)
Important Action Needed: IP Allowlist UpdateIf your organization protects your Git platform with IP whitelisting, please add the new CodeRabbit IP address to your allowlist:
Reviews will stop working after February 8, 2026 if the new IP is not added to your allowlist. Comment |
|
OK, I won't notify you again about this release, but will get in touch when a new version is available. If you'd rather skip all updates until the next major or minor version, let me know by commenting If you change your mind, just re-open this PR and I'll resolve any conflicts on it. |
There was a problem hiding this comment.
Actionable comments posted: 3
🤖 Fix all issues with AI agents
In `@web/apps/admin/package.json`:
- Line 53: The project updated ESLint to v9 which no longer reads legacy
.eslintrc.cjs; migrate the configuration to the flat format by converting
web/tools/eslint-config/index.js into a root-level flat config file
(eslint.config.js) or convert web/apps/admin/.eslintrc.cjs into the flat config
format, and update any string-based extends ("next","turbo","prettier") and
plugins to the new flat config plugin/processor syntax so the "lint" script in
package.json works; as a temporary stopgap you can set
ESLINT_USE_FLAT_CONFIG=false in the admin app's environment to avoid failures,
but prefer migrating the shared config (web/tools/eslint-config/index.js) to
eslint.config.js so all consumers use the new format.
In `@web/lib/package.json`:
- Line 76: Update the ESLint-related dependencies and config to be compatible
with ESLint v9: in package.json bump or pin dependencies referenced by
`@raystack/eslint-config`—replace or upgrade eslint-config-next to a v9-compatible
release (>=13.4.1 that supports Next.js 15+ or switch to a supported
alternative), upgrade eslint-config-turbo to a Turborepo v2.4+ compatible
version, and update eslint-plugin-react to >=7.35.0; then migrate or convert the
legacy .eslintrc.js to the new flat config format (or update
`@raystack/eslint-config` to publish a v9-compatible flat-config) and verify the
project's eslint script still invokes the correct config.
In `@web/package.json`:
- Line 26: Update the "eslint" dependency in package.json from "^9.26.0" to a
compatible version (e.g., "^8.57.0") to restore legacy .eslintrc.* behavior;
after changing the "eslint" entry, run your package manager to update lockfiles
(npm/yarn/pnpm install) and verify workspace linting passes.
| "@types/react-dom": "^18.3.0", | ||
| "@vitejs/plugin-react-swc": "^3.0.0", | ||
| "eslint": "^8.56.0", | ||
| "eslint": "^9.26.0", |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
# Find ESLint config files in the admin app
find web/apps/admin -maxdepth 3 -type f \( -name ".eslintrc*" -o -name "eslint.config.*" \) 2>/dev/nullRepository: raystack/frontier
Length of output: 89
🏁 Script executed:
# Check the full package.json to see eslint-related dependencies
cat web/apps/admin/package.json | head -80Repository: raystack/frontier
Length of output: 1810
🏁 Script executed:
# Look for any eslint config in parent directories
find web/apps -maxdepth 2 -type f \( -name ".eslintrc*" -o -name "eslint.config.*" \) 2>/dev/nullRepository: raystack/frontier
Length of output: 123
🌐 Web query:
ESLint 9.0 breaking changes migration guide config format
💡 Result:
ESLint 9 config-format breaking change (and how to migrate)
1) Flat config is now the default
- ESLint v9.0.0 defaults to “flat config” (
eslint.config.js) and does not automatically look for.eslintrc*anymore (eslintrc is deprecated). [2][3] - If you must keep
.eslintrc*temporarily, setESLINT_USE_FLAT_CONFIG=false. [3]
2) Generate a starter eslint.config.js
Use the official migrator (good starting point, may need manual edits): [1]
npx `@eslint/migrate-config` .eslintrc.json3) Key config format differences (eslintrc → flat config)
A) extends / plugins / parsers are no longer string-resolved
- Flat config uses real JS imports and object-shaped
plugins, andlanguageOptions.parseris the imported parser module. [1]
B) overrides becomes “the whole file”
- Flat config exports an array of config objects; use
files: [...]per entry (similar to eslintrcoverrides). [1]
C) env is gone → use languageOptions.globals
- Use the
globalsnpm package and spread in env globals (browser/node/etc.). [1]
D) Ignoring files changed
- Flat config doesn’t read
.eslintignoreand the CLI flag--ignore-pathis not supported. - To include ignore patterns (e.g., from
.gitignore), useincludeIgnoreFile()from@eslint/compat. [1]
E) Other notable config-format removals/changes
rootno longer exists (flat config behaves likeroot: true). [1]package.json"eslintConfig"is no longer supported; move config toeslint.config.*. [1]
4) CLI flags that change because of flat config
--no-eslintrc→ replaced by--no-config-lookup. [1]- These flags are not supported with flat config:
--env,--ignore-path,--resolve-plugins-relative-to,--rulesdir. [1]
Minimal flat-config shape (for orientation)
// eslint.config.js
import globals from "globals";
import js from "@eslint/js";
export default [
js.configs.recommended,
{
files: ["**/*.{js,mjs,cjs}"],
languageOptions: {
globals: { ...globals.node },
},
},
];(Adjust files, imports, plugins, and rules to match your project.) [1]
🌐 Web query:
@raystack/eslint-config ESLint 9 compatibility support
💡 Result:
I couldn’t find any public npm package page or GitHub repository for @raystack/eslint-config, so I can’t confirm whether it currently supports ESLint v9 (or flat config) from public sources.
What “ESLint 9 compatible” typically means:
- ESLint v9 uses flat config (
eslint.config.js) by default and.eslintrc*is deprecated (still usable, but no longer the default). [1] - ESLint provides a migration path/tools for moving from
.eslintrcto flat config. [2] - Many shareable configs need updates (or need to be wrapped with compat utilities) to work cleanly with v9/flat config. [2]
How to verify in your repo in 30 seconds:
- Open
node_modules/@raystack/eslint-config/package.json - Check:
peerDependencies.eslintincludes^9(good sign), or only^8(likely not updated).- docs/exports include a flat-config entry (e.g.,
*.flat.js) vs onlyextends-style configs.
If you paste that package.json (or link the repo/package location you’re using), I can tell you exactly whether it’s ESLint 9 compatible and what change is needed.
Sources:
[1] ESLint: flat config becomes default in v9 / eslintrc deprecation https://eslint.org/blog/2023/10/flat-config-rollout-plans/
[2] ESLint: configuration migration guide https://eslint.org/docs/latest/use/configure/migration-guide
🏁 Script executed:
# Read the ESLint config
cat web/apps/admin/.eslintrc.cjsRepository: raystack/frontier
Length of output: 124
🏁 Script executed:
# Check for any eslint-related packages in package.json
cat web/apps/admin/package.json | grep -i eslintRepository: raystack/frontier
Length of output: 122
🏁 Script executed:
# Also check if there's a shared config at workspace root
find . -maxdepth 2 -type f \( -name "package.json" -o -name ".eslintrc*" -o -name "eslint.config.*" \) | grep -E "(eslint|package.json)" | head -10Repository: raystack/frontier
Length of output: 118
🏁 Script executed:
# Find the tools/eslint-config directory
find . -type d -name "eslint-config" | grep toolsRepository: raystack/frontier
Length of output: 86
🏁 Script executed:
# Check if there's a tools directory at root and list its contents
ls -la tools/ 2>/dev/null || echo "No tools directory at root"Repository: raystack/frontier
Length of output: 87
🏁 Script executed:
# Check the workspace/monorepo structure
cat package.json 2>/dev/null | head -30Repository: raystack/frontier
Length of output: 43
🏁 Script executed:
# Look for the eslint-config in tools or similar locations
find . -path "*/tools/eslint-config*" -o -path "*/config/eslint*" 2>/dev/null | head -10Repository: raystack/frontier
Length of output: 160
🏁 Script executed:
# Read the eslint-config package.json
cat web/tools/eslint-config/package.jsonRepository: raystack/frontier
Length of output: 520
🏁 Script executed:
# Read the eslint-config index.js
cat web/tools/eslint-config/index.jsRepository: raystack/frontier
Length of output: 495
ESLint v9 requires configuration migration to flat config format.
The admin app's ESLint setup uses the deprecated .eslintrc.cjs format which ESLint v9 no longer reads by default. The shared config at web/tools/eslint-config extends string-based configs (next, turbo, prettier) and plugins, which are incompatible with ESLint v9's flat config.
Before merging:
- Migrate
web/tools/eslint-config/index.jsto flat config format (eslint.config.js), or - Migrate
web/apps/admin/.eslintrc.cjsto flat config, or - Set
ESLINT_USE_FLAT_CONFIG=falseas a temporary workaround (not recommended long-term)
Without migration, the lint script will fail when ESLint v9 attempts to load the configuration.
🤖 Prompt for AI Agents
In `@web/apps/admin/package.json` at line 53, The project updated ESLint to v9
which no longer reads legacy .eslintrc.cjs; migrate the configuration to the
flat format by converting web/tools/eslint-config/index.js into a root-level
flat config file (eslint.config.js) or convert web/apps/admin/.eslintrc.cjs into
the flat config format, and update any string-based extends
("next","turbo","prettier") and plugins to the new flat config plugin/processor
syntax so the "lint" script in package.json works; as a temporary stopgap you
can set ESLINT_USE_FLAT_CONFIG=false in the admin app's environment to avoid
failures, but prefer migrating the shared config
(web/tools/eslint-config/index.js) to eslint.config.js so all consumers use the
new format.
| "esbuild-css-modules-plugin": "^2.7.1", | ||
| "esbuild-plugin-external-global": "^1.0.1", | ||
| "eslint": "^8.57.1", | ||
| "eslint": "^9.26.0", |
There was a problem hiding this comment.
🧩 Analysis chain
🌐 Web query:
ESLint 9.26.0 breaking changes migration guide
💡 Result:
Are there breaking changes in ESLint 9.26.0?
ESLint v9.26.0 is a minor release and its release notes do not list any “Breaking Changes” section; it’s primarily new features + bug fixes. The notable behavior change to watch is in no-unused-expressions for ES3 codebases: by default it now reports directives as unused expressions in ES3, and you can opt out via the new ignoreDirectives option. [1]
Migration guide for “ESLint 9.x” (the actual breaking changes)
If you’re migrating to ESLint 9 (e.g., from 8.x), follow ESLint’s official “Migrate to v9.x” guide, which covers the real breaking changes introduced in 9.0.0. Key items:
- Node support changed: ESLint 9 requires Node v18.18.0+ (and drops Node 19). [2]
- Flat config is now the default:
eslint.config.jsis the default config format; legacy eslintrc is deprecated and is not automatically searched. If you must keep eslintrc temporarily, setESLINT_USE_FLAT_CONFIG=false. [2] - Removed: multiple built-in formatters;
require-jsdocandvalid-jsdocrules. [2] - CLI behavior changes: e.g.
--quietno longer runs"warn"rules; running ESLint with no patterns behaves differently depending on flat config vs eslintrc. [2] - Directive/config comment tightening: disallows multiple
/* eslint */comments for the same rule; stricter/* exported */parsing, etc. [2]
For extra context, ESLint’s v9.0.0 announcement also points to the migration guide and highlights that v9 is the major breaking release. [3]
Sources:
[1] ESLint v9.26.0 release notes (May 2, 2025) (eslint.org)
[2] ESLint docs: “Migrate to v9.x” (eslint.org)
[3] ESLint blog: “ESLint v9.0.0 released” (eslint.org)
Citations:
- 1: https://eslint.org/blog/2025/05/eslint-v9.26.0-released/
- 2: https://eslint.org/docs/latest/use/migrate-to-9.0.0
- 3: https://eslint.org/blog/2024/04/eslint-v9.0.0-released/?utm_source=openai
🌐 Web query:
@raystack/eslint-config ESLint v9 compatibility support
💡 Result:
I couldn’t find any publicly indexed npm or GitHub listing for @raystack/eslint-config (searching npmjs.com and general web results for that exact scope/name returned unrelated packages only). If it is private/internal, ESLint v9 compatibility typically requires the following checks/changes:
- Peer dependency: set
peerDependencies.eslintto a v9-compatible range (ESLint recommends">= 9"for shareable configs). [1] - Flat config support: ESLint v9 uses flat config (
eslint.config.js) by default;.eslintrcis deprecated (still usable, but not the default). [2] - If you still need to consume legacy
.eslintrc-style configs, use@eslint/eslintrc’sFlatCompatto bridge into flat config. [3] - Runtime floor: ESLint v9 dropped Node.js versions prior to 18.18.0. [2]
If you can share the package’s package.json (especially peerDependencies) and how it exports configs today (e.g., main/exports, and whether it ships a flat-config entry), I can tell you exactly whether it’s ESLint v9-compatible and what to change.
Sources:
[1] ESLint docs – Shareable configs (peerDependencies recommendation) https://eslint.org/docs/latest/extend/shareable-configs
[2] ESLint blog – ESLint v9.0.0 release (flat config default; Node support) https://eslint.org/blog/2024/04/eslint-v9.0.0-released/
[3] @eslint/eslintrc docs (FlatCompat for migrating legacy configs) https://github.com/eslint/eslintrc
🏁 Script executed:
find web/lib -name ".eslintrc*" -o -name "eslint.config.*" | head -20Repository: raystack/frontier
Length of output: 43
🏁 Script executed:
cd web/lib && cat package.json | jq '.devDependencies, .dependencies' 2>/dev/null || grep -A 20 '"devDependencies"' web/lib/package.json | head -30Repository: raystack/frontier
Length of output: 1491
🏁 Script executed:
cd web/lib && cat .eslintrc* 2>/dev/null || echo "No .eslintrc files found"Repository: raystack/frontier
Length of output: 85
🏁 Script executed:
find . -path "*/node_modules" -prune -o -name "eslint.config.*" -type f -print | head -20Repository: raystack/frontier
Length of output: 43
🏁 Script executed:
find . -path "*/node_modules" -prune -o -type d -name "eslint-config" -print | head -10Repository: raystack/frontier
Length of output: 86
🏁 Script executed:
cd web/lib && find . -maxdepth 3 -name "*.eslint*" -o -name "eslint.config*" 2>/dev/null | head -20Repository: raystack/frontier
Length of output: 43
🏁 Script executed:
grep -r "@raystack/eslint-config" . --include="package.json" 2>/dev/null | grep -v node_modulesRepository: raystack/frontier
Length of output: 269
🏁 Script executed:
cat -n web/tools/eslint-config/package.jsonRepository: raystack/frontier
Length of output: 653
🏁 Script executed:
ls -la web/tools/eslint-config/Repository: raystack/frontier
Length of output: 287
🏁 Script executed:
cat -n web/tools/eslint-config/index.js 2>/dev/null || cat -n web/tools/eslint-config/eslint.config.js 2>/dev/null || echo "Checking directory contents" && find web/tools/eslint-config -type f -maxdepth 1Repository: raystack/frontier
Length of output: 712
🏁 Script executed:
cat -n web/lib/eslint.config.js 2>/dev/null || echo "No flat config in web/lib"Repository: raystack/frontier
Length of output: 86
🏁 Script executed:
find . -maxdepth 2 -type f \( -name ".eslintrc*" -o -name "eslint.config.js" \) ! -path "*/node_modules/*" ! -path "*/.git/*"Repository: raystack/frontier
Length of output: 79
🏁 Script executed:
cat -n web/lib/package.json | grep -A 3 -B 3 "lint"Repository: raystack/frontier
Length of output: 1327
🏁 Script executed:
ls -la web/.eslintrc* .eslintrc* 2>/dev/null || echo "Checking for eslintrc files..."Repository: raystack/frontier
Length of output: 156
🏁 Script executed:
cat -n web/.eslintrc.jsRepository: raystack/frontier
Length of output: 315
🏁 Script executed:
# Check if web/lib can use parent .eslintrc and if any config exists at root
cd web/lib && pwd && ls -la .eslintrc* eslint.config.* 2>/dev/null || echo "No config files in web/lib"Repository: raystack/frontier
Length of output: 114
🌐 Web query:
eslint-config-next eslint-config-turbo eslint-plugin-react compatibility with ESLint v9
💡 Result:
Compatibility summary (ESLint v9)
| Package | ESLint v9 compatible? | Since / requirement | Notes |
|---|---|---|---|
| eslint-config-next | Yes | Next.js 15+ (and matching eslint-config-next version) |
Next.js documents that eslint-config-next includes @next/eslint-plugin-next plus recommended rules from eslint-plugin-react and eslint-plugin-react-hooks. It also provides guidance for using the plugin directly in flat config (eslint.config.*). [1] Next.js added ESLint v9 support across eslint-config-next / plugin / next lint as a breaking change (incl. moving to eslint-plugin-react-hooks@5.0.0). [2] |
| eslint-config-turbo | Yes | Turborepo 2.4+ | Turborepo 2.4 explicitly introduced ESLint v9 (flat config) support for eslint-config-turbo (and eslint-plugin-turbo). [3] |
| eslint-plugin-react | Yes | v7.35.0+ | Release notes for eslint-plugin-react@7.35.0 list “support eslint v9”. [4] (Older versions like 7.34.x may fail peer-dep resolution with ESLint 9.) [5] |
Practical takeaways
- If you’re on Next.js 15+, align
next+eslint-config-nextto the same major version and ESLint 9 should be fine. [1][2] - If you use Turborepo lint rules, use
eslint-config-turbo/flat(oreslint-plugin-turboflat configs) with Turbo 2.4+. [3] - Ensure
eslint-plugin-reactis ≥ 7.35.0 when on ESLint 9. [4][5]
Sources:
[1] Next.js ESLint docs (updated Nov 10, 2025) https://nextjs.org/docs/app/api-reference/config/eslint
[2] Next.js commit adding ESLint v9 support (incl. react-hooks 5.0.0 note) https://app.semanticdiff.com/gh/vercel/next.js/commit/300bfe52f4dd4fbf9b7e6aa7f9c832ce10ea9f41
[3] Turborepo 2.4 announcement (ESLint v9 / flat config support) https://turborepo.com/blog/turbo-2-4
[4] Yarn package page release notes for eslint-plugin-react@7.35.0 (lists ESLint v9 support) https://classic.yarnpkg.com/en/package/eslint-plugin-react
[5] eslint-plugin-react issue showing older peerDeps blocking ESLint 9 installs (7.34.1) jsx-eslint/eslint-plugin-react#3735
Update @raystack/eslint-config dependencies for ESLint v9 compatibility.
The upgrade to ESLint v9.26.0 requires updating incompatible plugins in @raystack/eslint-config:
eslint-config-next@^13.4.1requires Next.js 15+ for v9 support; current is v13.4.12eslint-config-turbo@^1.9.3requires Turborepo 2.4+ for v9 supporteslint-plugin-react@7.28.0requires v7.35.0+ for v9 support
The legacy .eslintrc.js format is deprecated in v9 (flat config is now default). Update the eslint-config package with v9-compatible versions and consider migrating to flat config format.
🤖 Prompt for AI Agents
In `@web/lib/package.json` at line 76, Update the ESLint-related dependencies and
config to be compatible with ESLint v9: in package.json bump or pin dependencies
referenced by `@raystack/eslint-config`—replace or upgrade eslint-config-next to a
v9-compatible release (>=13.4.1 that supports Next.js 15+ or switch to a
supported alternative), upgrade eslint-config-turbo to a Turborepo v2.4+
compatible version, and update eslint-plugin-react to >=7.35.0; then migrate or
convert the legacy .eslintrc.js to the new flat config format (or update
`@raystack/eslint-config` to publish a v9-compatible flat-config) and verify the
project's eslint script still invokes the correct config.
| "dependencies": { | ||
| "@changesets/cli": "^2.26.2", | ||
| "eslint": "^8.57.1", | ||
| "eslint": "^9.26.0", |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
# First, check the repository structure and find ESLint-related files
find . -type f -name ".eslintrc*" -o -name "eslint.config.*" | head -20Repository: raystack/frontier
Length of output: 146
🏁 Script executed:
# Check package.json files to understand the workspace structure
git ls-files "**/package.json" | head -20Repository: raystack/frontier
Length of output: 274
🏁 Script executed:
# Check the root and web package.json for eslint-related dependencies
cat web/package.json | grep -A 5 -B 5 "eslint"Repository: raystack/frontier
Length of output: 331
🏁 Script executed:
# Check if there's a root-level package.json
test -f package.json && cat package.json | grep -A 5 -B 5 "eslint" || echo "No root package.json with eslint"Repository: raystack/frontier
Length of output: 93
🏁 Script executed:
# Look for `@raystack/eslint-config` references
rg "@raystack/eslint-config" --type jsonRepository: raystack/frontier
Length of output: 263
🏁 Script executed:
cat web/tools/eslint-config/package.jsonRepository: raystack/frontier
Length of output: 520
🏁 Script executed:
cat web/.eslintrc.jsRepository: raystack/frontier
Length of output: 231
🏁 Script executed:
head -20 web/apps/admin/.eslintrc.cjsRepository: raystack/frontier
Length of output: 124
🌐 Web query:
ESLint 9.26.0 breaking changes migration guide config format
💡 Result:
Are there breaking changes in ESLint 9.26.0?
No specific breaking changes are called out for 9.26.0—it’s a minor release focused on features/bugfixes (e.g., MCP server via --mcp, and a no-shadow-restricted-names update). [1]
If you’re seeing breakage on upgrade to 9.26.0, it’s usually because you’re crossing the v9.0.0 boundary (or tooling/plugins assuming legacy config).
The real “breaking changes” you need to migrate for (ESLint v9)
1) Config format: flat config is the default
ESLint v9 defaults to flat config (eslint.config.js) and treats eslintrc as deprecated. [2]
ESLint’s official config migration guide is here: [3]
2) Use the official config migrator
Convert .eslintrc.* to flat config:
npx@eslint/migrate-config.eslintrc.json(works best for JSON/YAML;.eslintrc.jsis converted based on evaluated output) [3]
3) Key flat-config differences (common migration gotchas)
- Plugins/parsers are imported as JS objects (not strings in
plugins/extends). [3] package.jsoneslintConfigis not supported in flat config (move toeslint.config.*). [3]rootis gone (flat config behaves likeroot: true). [3]filesmust be an array (not a single string). [3]
4) Other notable v9 breaking changes that often surface during upgrades
- Node support: Node < 18.18.0 and Node 19 are not supported. [4]
- Various CLI/API and rule-behavior breaking changes are summarized in the v9 migration guide. [4]
Sources: ESLint v9.26.0 release notes [1], ESLint v9.0.0 release notes [2], ESLint Configuration Migration Guide (eslintrc → flat) [3], ESLint “Migrate to v9.x” breaking-changes guide [4].
🌐 Web query:
ESLint v9 flat config migration .eslintrc.js compatibility
💡 Result:
- ESLint v9 uses “flat config” by default: it looks for
eslint.config.(js|mjs|cjs)and does not automatically search for.eslintrc.*anymore (eslintrc is deprecated, not removed). [1][2] - If you want to keep using
.eslintrc.jsfor now, you must opt back into legacy config by setting:ESLINT_USE_FLAT_CONFIG=false(environment variable). [3][4]
- Recommended path: migrate to flat config using the official migrator:
npx@eslint/migrate-config.eslintrc.js(or your actual file). [5][6]
Notes: migration from.eslintrc.jsis limited—the tool evaluates the JS config and converts the resulting data, but won’t preserve conditionals/functions/logic, so you should expect manual edits. [5][6]
- Compatibility bridging during migration: the migrator can automatically add
FlatCompat/ compatibility utilities when needed (useful when extending older shareable configs/plugins). [5]
Sources
[1] ESLint “Migrate to v9.x” docs (new default config + eslintrc not auto-searched) (eslint.org)
[2] ESLint flat config rollout plan (v9 default; eslintrc deprecated) (eslint.org)
[3] ESLint v9.0.0 released notes (eslintrc deprecated; env var to keep using it) (eslint.nodejs.cn)
[4] ESLint v9 alpha release notes (same env var guidance) (eslint.nodejs.cn)
[5] ESLint blog: Configuration Migrator (capabilities + FlatCompat + limitations for .eslintrc.js) (eslint.org)
[6] ESLint Configuration Migration Guide (migrator usage + .eslintrc.js limitation) (eslint.org)
Citations:
- 1: https://eslint.org/docs/latest/use/migrate-to-9.0.0?utm_source=openai
- 2: https://eslint.org/blog/2023/10/flat-config-rollout-plans/?utm_source=openai
- 3: https://eslint.nodejs.cn/blog/2024/04/eslint-v9.0.0-released/?utm_source=openai
- 4: https://eslint.nodejs.cn/blog/2023/12/eslint-v9.0.0-alpha.0-released/?utm_source=openai
- 5: https://eslint.org/blog/2024/05/eslint-configuration-migrator/?utm_source=openai
- 6: https://eslint.org/docs/latest/use/configure/migration-guide?utm_source=openai
🌐 Web query:
eslint-config-next v13 ESLint v9 compatibility support
💡 Result:
eslint-config-next v13 (Next.js 13) is not compatible with ESLint v9. ESLint v9 introduced breaking changes (notably flat config as the default, with .eslintrc no longer auto-detected unless you opt back in). [1]
In practice, eslint-config-next versions before the v15 line only peer-depended on ESLint ^7.23 || ^8 (example shown for 14.2.x), so npm/pnpm will flag ESLint v9 as an incompatible peer. [2] ESLint v9 support was added in the v15 line: eslint-config-next@15.0.1 (and newer) declares eslint peer dependency ^7.23.0 || ^8.0.0 || ^9.0.0. [3]
What to do
- Stay on Next.js 13 / eslint-config-next 13.x: pin ESLint 8.x (not 9).
- Use ESLint 9: upgrade to a newer Next.js that pulls in eslint-config-next ≥ 15, and use the modern flat-config setup (Next docs show importing
eslint-config-nextintoeslint.config.mjs). [4]
Sources
- ESLint v9 changes / flat config default: https://eslint.org/blog/2024/04/eslint-v9.0.0-released/
- Next.js issue showing
eslint-config-next@14.2.2peers only^7.23 || ^8: eslint-config-next to have eslint ^9.x.x+ as peerDependencies vercel/next.js#64833 eslint-config-next@15.0.1peer deps include ESLint^9: https://app.unpkg.com/eslint-config-next@15.0.1/files/package.json- Next.js ESLint (flat config) docs: https://nextjs.org/docs/app/api-reference/config/eslint
🌐 Web query:
eslint-config-turbo v1.9.3 ESLint v9 breaking changes
💡 Result:
With ESLint v9, the main “breaking change” you’ll hit with eslint-config-turbo@1.9.3 is configuration format/lookup, not Turbo rules.
What breaks (or surprises) when moving to ESLint v9
- Flat config is the default in ESLint v9: ESLint now looks for
eslint.config.*first, and if it can’t find one, it errors instead of falling back to.eslintrc.*. To keep using.eslintrc.*, you must setESLINT_USE_FLAT_CONFIG=false(and ESLint will warn that eslintrc is deprecated). [1] - Node.js minimum version changes: ESLint v9 drops support for Node < 18.18.0 (and Node 19). [2]
- Formatter removals / behavior changes: ESLint v9 removes most built-in formatters (leaving only
stylish,html,json,json-with-meta). [2] - New default warning: unused
eslint-disabledirectives are warned by default (can change noise level in CI). [2]
Why eslint-config-turbo@1.9.3 is a problem specifically
eslint-config-turbo@1.xis oriented around legacyextends: ["turbo"]usage (eslintrc). Under ESLint v9’s default flat-config behavior, that eslintrc config may simply never be loaded unless you force eslintrc mode viaESLINT_USE_FLAT_CONFIG=false. [1]
What to do
- If you want ESLint v9 (recommended): upgrade
eslint-config-turboto a version that supports ESLint v9 flat config. Turborepo 2.4 introduced ESLint v9 support ineslint-config-turbo/eslint-plugin-turbo, and the flat-config usage is:
import turboConfig from "eslint-config-turbo/flat"; export default [...turboConfig][3][4] - If you must stay on
eslint-config-turbo@1.9.3: keep using.eslintrc.*by settingESLINT_USE_FLAT_CONFIG=falsewhen running ESLint v9. [1]
Sources: ESLint flat-config rollout plan / how to keep eslintrc in v9 [1]; ESLint v9 release notes (Node support, formatters, unused-disable warnings) [2]; Turborepo 2.4 ESLint v9 support announcement [3]; Turborepo eslint-config-turbo flat-config docs [4].
[1] https://eslint.org/blog/2023/10/flat-config-rollout-plans/
[2] https://eslint.org/blog/2024/04/eslint-v9.0.0-released/
[3] https://v2-7-5-canary-3.turborepo.com/blog/turbo-2-4
[4] https://turborepo.ai/docs/reference/eslint-config-turbo
🏁 Script executed:
# Check if there's any eslint version pinning in root or CI configs
find . -name ".npmrc" -o -name ".yarnrc*" -o -name "pnpm-workspace.yaml" | xargs cat 2>/dev/null | head -50Repository: raystack/frontier
Length of output: 225
🏁 Script executed:
# Check if any scripts set ESLINT_USE_FLAT_CONFIG environment variable
rg "ESLINT_USE_FLAT_CONFIG"Repository: raystack/frontier
Length of output: 43
🏁 Script executed:
# Check package-lock or pnpm-lock for actual resolved versions
find . -name "pnpm-lock.yaml" -exec head -100 {} \;Repository: raystack/frontier
Length of output: 7383
ESLint v9.26.0 breaks workspace linting with current configuration.
This upgrade introduces breaking changes that will prevent linting from working:
-
Config format incompatibility: ESLint v9 defaults to flat config and will not auto-detect
.eslintrc.*files. The workspace uses.eslintrc.js/.eslintrc.cjswithout settingESLINT_USE_FLAT_CONFIG=falseto force legacy mode. -
Extended config incompatibility:
eslint-config-next@^13.4.1only supports ESLint^7.23 || ^8(needs v15+ for ESLint v9)eslint-config-turbo@^1.9.3lacks ESLint v9 flat config support (needs Turborepo 2.4+ version)
Required action (choose one):
- Downgrade: Change to
"eslint": "^8.57.0"until configs are upgraded - Upgrade path: Update
@raystack/eslint-configdependencies (eslint-config-next to v15+, eslint-config-turbo to v2.4+) and migrate to flat config usingnpx@eslint/migrate-config``
🤖 Prompt for AI Agents
In `@web/package.json` at line 26, Update the "eslint" dependency in package.json
from "^9.26.0" to a compatible version (e.g., "^8.57.0") to restore legacy
.eslintrc.* behavior; after changing the "eslint" entry, run your package
manager to update lockfiles (npm/yarn/pnpm install) and verify workspace linting
passes.
Bumps eslint from 8.57.1 to 9.26.0.
Release notes
Sourced from eslint's releases.
... (truncated)
Changelog
Sourced from eslint's changelog.
... (truncated)
Commits
8bbabc49.26.016f5ff7Build: changelog update for 9.26.05b247c8chore: upgrade to@eslint/js@9.26.0(#19681)d6fa4acchore: package.json update for@eslint/jsreleasee9754e7feat: add reportGlobalThis to no-shadow-restricted-names (#19670)0fa2b7afeat: add suggestions foreqeqeqrule (#19640)dd98d63docs: Update README96e84defix: check cache file existence before deletion (#19648)c25e858docs: Update README0958690chore: disambiguate internal typesLanguageOptionsandRule(#19669)Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
@dependabot rebasewill rebase this PR@dependabot recreatewill recreate this PR, overwriting any edits that have been made to it@dependabot mergewill merge this PR after your CI passes on it@dependabot squash and mergewill squash and merge this PR after your CI passes on it@dependabot cancel mergewill cancel a previously requested merge and block automerging@dependabot reopenwill reopen this PR if it is closed@dependabot closewill close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually@dependabot show <dependency name> ignore conditionswill show all of the ignore conditions of the specified dependency@dependabot ignore this major versionwill close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this minor versionwill close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this dependencywill close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)You can disable automated security fix PRs for this repo from the Security Alerts page.
Summary by CodeRabbit