<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>ESLint Blog</title>
  <subtitle>feed description</subtitle>
  <link href="https://eslint.org/feed.xml" rel="self"/>
  <link href="https://eslint.org/"/>
  <updated>2026-09-18T00:00:00Z</updated>
  <id>https://eslint.org/</id>
  <author>
    <name>ESLint</name>
    <email></email>
  </author>
  
  <entry>
    <title>ESLint v10.11.0 released</title>
    <link href="https://eslint.org/blog/2026/09/eslint-v10.11.0-released/"/>
    <updated>2026-09-18T00:00:00Z</updated>
    <id>https://eslint.org/blog/2026/09/eslint-v10.11.0-released/</id>
    <content type="html">&lt;h2 id=&quot;highlights&quot; tabindex=&quot;-1&quot;&gt;Highlights&lt;/h2&gt;
&lt;h3 id=&quot;faster-startup-and-linting&quot; tabindex=&quot;-1&quot;&gt;Faster startup and linting&lt;/h3&gt;
&lt;p&gt;This release includes a set of performance improvements across ESLint’s core linting pipeline and the &lt;code&gt;stylish&lt;/code&gt; formatter. Linting results and the public API are unchanged: the same files produce the same messages as before, just faster.&lt;/p&gt;
&lt;p&gt;The main improvements are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Startup.&lt;/strong&gt; Loading the &lt;code&gt;eslint&lt;/code&gt; package no longer eagerly initializes the JSON Schema validator used for rule options. It’s now created the first time a rule’s options actually need to be validated, which removes about 45 modules from the initial dependency graph and reduces package load time by 20–25%.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rule execution.&lt;/strong&gt; When ESLint traverses a file’s structure, it has to decide, for every piece of code, which rules are interested in it and then call those rules. This is the most frequently executed part of the linting process, and it now takes a shorter route in the most common cases. Common node selector types are handled by fast paths, and rule visitors are invoked directly whenever possible instead of through a wrapper function on every node.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overhead per reported problem.&lt;/strong&gt; When a rule reports a problem, ESLint needs to perform several processing steps before displaying a message. Some of those steps have been made cheaper: placeholders in message templates are only filled in when necessary, autofixes are checked for validity without serializing each one to JSON, and one fixer object is shared by all problems reported in a file instead of creating one per fix. Also, files without any &lt;code&gt;eslint-enable&lt;/code&gt; or &lt;code&gt;eslint-disable&lt;/code&gt; comments now skip the directive processing step altogether.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Default formatter.&lt;/strong&gt; The default &lt;code&gt;stylish&lt;/code&gt; formatter avoids stripping terminal control characters from strings that don’t contain any and no longer runs a regular expression on every message, which speeds up printing large numbers of problems.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Actual results will vary depending on your configuration and hardware, but projects using many core rules should see a noticeable improvement in both startup time and overall linting time.&lt;/p&gt;
&lt;h2 id=&quot;features&quot; tabindex=&quot;-1&quot;&gt;Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/d136fa4b0d2dd4a9e738ca1c012cc674d1441127&quot;&gt;&lt;code&gt;d136fa4&lt;/code&gt;&lt;/a&gt; feat: &lt;a href=&quot;https://eslint.org/docs/rules/object-shorthand&quot;&gt;object-shorthand&lt;/a&gt; handle quoted properties for &lt;code&gt;ignoreConstructors&lt;/code&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21271&quot;&gt;#21271&lt;/a&gt;) (Pavel)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/397b3b8134b8ce1a61cbf414d4c29c945ba25690&quot;&gt;&lt;code&gt;397b3b8&lt;/code&gt;&lt;/a&gt; feat: report unsafe labeled &lt;code&gt;continue&lt;/code&gt; in &lt;a href=&quot;https://eslint.org/docs/rules/no-unsafe-finally&quot;&gt;&lt;code&gt;no-unsafe-finally&lt;/code&gt;&lt;/a&gt; rule (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21316&quot;&gt;#21316&lt;/a&gt;) (electrohyun)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/d3dd47f42e4cb5f9da27e3a2e741aa21e02ea1a4&quot;&gt;&lt;code&gt;d3dd47f&lt;/code&gt;&lt;/a&gt; feat: only exempt &lt;a href=&quot;https://eslint.org/docs/rules/new-cap&quot;&gt;&lt;code&gt;new-cap&lt;/code&gt;&lt;/a&gt; built-ins that reference the global (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21290&quot;&gt;#21290&lt;/a&gt;) (sethamus)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;bug-fixes&quot; tabindex=&quot;-1&quot;&gt;Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/22b09f54f67a9512d4cea39ddbab9b6973d5c476&quot;&gt;&lt;code&gt;22b09f5&lt;/code&gt;&lt;/a&gt; fix: ignore &lt;code&gt;__proto__&lt;/code&gt; properties in &lt;a href=&quot;https://eslint.org/docs/rules/prefer-object-spread&quot;&gt;&lt;code&gt;prefer-object-spread&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21311&quot;&gt;#21311&lt;/a&gt;) (xbinaryx)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/b684bb1cd7e6be03ad1b7a951baead936d9c2166&quot;&gt;&lt;code&gt;b684bb1&lt;/code&gt;&lt;/a&gt; fix: make TimePass.parse optional in types and docs (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21313&quot;&gt;#21313&lt;/a&gt;) (ntnyq)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/26d11bce3e0e21f223613d4bb4be3423839b229e&quot;&gt;&lt;code&gt;26d11bc&lt;/code&gt;&lt;/a&gt; fix: don’t report &lt;code&gt;__proto__&lt;/code&gt; properties in &lt;a href=&quot;https://eslint.org/docs/rules/object-shorthand&quot;&gt;&lt;code&gt;object-shorthand&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21310&quot;&gt;#21310&lt;/a&gt;) (xbinaryx)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;documentation&quot; tabindex=&quot;-1&quot;&gt;Documentation&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/9ecfdc5319f83580cf3b81beab7e936015fef2fa&quot;&gt;&lt;code&gt;9ecfdc5&lt;/code&gt;&lt;/a&gt; docs: note that --cache can serve stale results for cross-file rules (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21312&quot;&gt;#21312&lt;/a&gt;) (bytedoe)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/6c789ff39bc5420e94e8dafeb328bf2b7e3d35ab&quot;&gt;&lt;code&gt;6c789ff&lt;/code&gt;&lt;/a&gt; docs: Update README (GitHub Actions Bot)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/5997825635dc9c4e81434894607ef2e3887e0ea3&quot;&gt;&lt;code&gt;5997825&lt;/code&gt;&lt;/a&gt; docs: clarify &lt;a href=&quot;https://eslint.org/docs/rules/preserve-caught-error&quot;&gt;preserve-caught-error&lt;/a&gt; known limitation (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21294&quot;&gt;#21294&lt;/a&gt;) (Akinyemi Toluwalase)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;chores&quot; tabindex=&quot;-1&quot;&gt;Chores&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/520dd77a35922fb537e2dbfb3c839d047acbdd68&quot;&gt;&lt;code&gt;520dd77&lt;/code&gt;&lt;/a&gt; perf: Implement fast paths in critical areas (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21210&quot;&gt;#21210&lt;/a&gt;) (Nicholas C. Zakas)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/92086c87e042413a3d0363d8fc3fbb11db98d06a&quot;&gt;&lt;code&gt;92086c8&lt;/code&gt;&lt;/a&gt; test: update &lt;code&gt;EMFILE&lt;/code&gt; error generation for Node.js 26.9.0 compatibility (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21330&quot;&gt;#21330&lt;/a&gt;) (Francesco Trotta)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/9ac7eb60525ec768c2fdc6699e5a292aa913ce9e&quot;&gt;&lt;code&gt;9ac7eb6&lt;/code&gt;&lt;/a&gt; chore: update github/codeql-action action to v4.38.0 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21331&quot;&gt;#21331&lt;/a&gt;) (renovate[bot])&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/24310e3a0e22b3c086ca402f88448676f2e1cfcd&quot;&gt;&lt;code&gt;24310e3&lt;/code&gt;&lt;/a&gt; chore: update ecosystem plugins (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21324&quot;&gt;#21324&lt;/a&gt;) (ESLint Bot)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/45ad79e54a39b54b4ce8eb47e612bd2f72a7a651&quot;&gt;&lt;code&gt;45ad79e&lt;/code&gt;&lt;/a&gt; ci: bump pnpm/action-setup from 6.0.10 to 6.1.0 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21318&quot;&gt;#21318&lt;/a&gt;) (dependabot[bot])&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/ac74e37322ebf122ada676f153dc55c81f3caab0&quot;&gt;&lt;code&gt;ac74e37&lt;/code&gt;&lt;/a&gt; chore: Add &lt;a href=&quot;http://agents.md/&quot;&gt;AGENTS.md&lt;/a&gt; with AI disclosure requirements (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21221&quot;&gt;#21221&lt;/a&gt;) (Nicholas C. Zakas)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/c8326608e710e670beaf982501aed80ea104919a&quot;&gt;&lt;code&gt;c832660&lt;/code&gt;&lt;/a&gt; chore: Upgrade Stylelint to the latest version in docs (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21245&quot;&gt;#21245&lt;/a&gt;) (Jung Hyeon Jun)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/f9f88fcccd965fdc162b89c4615dd4018e3cabdf&quot;&gt;&lt;code&gt;f9f88fc&lt;/code&gt;&lt;/a&gt; chore: update ecosystem plugins (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21308&quot;&gt;#21308&lt;/a&gt;) (ESLint Bot)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/fc81076a5b8145360654d81cbc130cf7d25dca77&quot;&gt;&lt;code&gt;fc81076&lt;/code&gt;&lt;/a&gt; ci: add more types integration tests (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20395&quot;&gt;#20395&lt;/a&gt;) (Nitin Kumar)&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  
  <entry>
    <title>ESLint v10.10.0 released</title>
    <link href="https://eslint.org/blog/2026/09/eslint-v10.10.0-released/"/>
    <updated>2026-09-04T00:00:00Z</updated>
    <id>https://eslint.org/blog/2026/09/eslint-v10.10.0-released/</id>
    <content type="html">&lt;h2 id=&quot;highlights&quot; tabindex=&quot;-1&quot;&gt;Highlights&lt;/h2&gt;
&lt;p&gt;The &lt;a href=&quot;https://eslint.org/docs/latest/rules/no-unexpected-multiline&quot;&gt;&lt;code&gt;no-unexpected-multiline&lt;/code&gt;&lt;/a&gt; rule has been updated to check regular expression literals with &lt;code&gt;d&lt;/code&gt; and &lt;code&gt;v&lt;/code&gt; flags.&lt;/p&gt;

&lt;div class=&quot;code-wrapper&quot;&gt;
    &lt;pre class=&quot;language-js line-numbers-mode&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;/* eslint no-unexpected-multiline: &quot;error&quot; */&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// Unexpected newline between numerator and division operator&lt;/span&gt;
foo &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; bar
&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;regex&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;v&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;exec&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;baz&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;forEach&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;qux&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;div class=&quot;line-numbers-wrapper&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;line-number&quot;&gt;1&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;2&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;3&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;4&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;5&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;/pre&gt;
    &lt;button class=&quot;copy-btn&quot; aria-labelledby=&quot;copy-button-label&quot;&gt;
        &lt;span hidden=&quot;&quot; id=&quot;copy-button-label&quot;&gt;Copy code to clipboard&lt;/span&gt;
        &lt;svg width=&quot;20&quot; height=&quot;20&quot; viewBox=&quot;0 0 20 20&quot; role=&quot;img&quot; aria-label=&quot;copy&quot; fill=&quot;none&quot; focusable=&quot;false&quot;&gt;
            &lt;path d=&quot;M4.16667 12.5H3.33333C2.89131 12.5 2.46738 12.3244 2.15482 12.0118C1.84226 11.6993 1.66667 11.2754 1.66667 10.8333V3.33332C1.66667 2.8913 1.84226 2.46737 2.15482 2.15481C2.46738 1.84225 2.89131 1.66666 3.33333 1.66666H10.8333C11.2754 1.66666 11.6993 1.84225 12.0118 2.15481C12.3244 2.46737 12.5 2.8913 12.5 3.33332V4.16666M9.16667 7.49999H16.6667C17.5871 7.49999 18.3333 8.24618 18.3333 9.16666V16.6667C18.3333 17.5871 17.5871 18.3333 16.6667 18.3333H9.16667C8.24619 18.3333 7.5 17.5871 7.5 16.6667V9.16666C7.5 8.24618 8.24619 7.49999 9.16667 7.49999Z&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.66667&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/button&gt;
&lt;/div&gt;
&lt;p&gt;The following rules have also been updated to avoid incorrect or unexpected behavior in some edge cases:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://eslint.org/docs/latest/rules/new-cap&quot;&gt;&lt;code&gt;new-cap&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://eslint.org/docs/latest/rules/no-extra-bind&quot;&gt;&lt;code&gt;no-extra-bind&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://eslint.org/docs/latest/rules/no-unreachable&quot;&gt;&lt;code&gt;no-unreachable&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://eslint.org/docs/latest/rules/prefer-object-has-own&quot;&gt;&lt;code&gt;prefer-object-has-own&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;features&quot; tabindex=&quot;-1&quot;&gt;Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/264b4346d1963701df0c398b4aeb2f6e8b2af93e&quot;&gt;&lt;code&gt;264b434&lt;/code&gt;&lt;/a&gt; feat: add &lt;code&gt;d&lt;/code&gt; and &lt;code&gt;v&lt;/code&gt; flags to &lt;a href=&quot;https://eslint.org/docs/rules/no-unexpected-multiline&quot;&gt;&lt;code&gt;no-unexpected-multiline&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21305&quot;&gt;#21305&lt;/a&gt;) (Gihyeon Jeong / 정기현)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/c6cc6c592f30901345d94ef75e0d42c1894fae6c&quot;&gt;&lt;code&gt;c6cc6c5&lt;/code&gt;&lt;/a&gt; feat: check &lt;code&gt;Object.prototype&lt;/code&gt; property names in &lt;a href=&quot;https://eslint.org/docs/rules/new-cap&quot;&gt;&lt;code&gt;new-cap&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21269&quot;&gt;#21269&lt;/a&gt;) (crimsonjay0)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/5661fa65fde9fd4c14f0b730e3cee6a42fc657c1&quot;&gt;&lt;code&gt;5661fa6&lt;/code&gt;&lt;/a&gt; feat: &lt;a href=&quot;https://eslint.org/docs/rules/no-extra-bind&quot;&gt;no-extra-bind&lt;/a&gt; false negatives with class fields and static blocks (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21260&quot;&gt;#21260&lt;/a&gt;) (synthex-byte)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;bug-fixes&quot; tabindex=&quot;-1&quot;&gt;Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/bb47dc6da2399a8f76c0c0c3273e6bc314c480e5&quot;&gt;&lt;code&gt;bb47dc6&lt;/code&gt;&lt;/a&gt; fix: update dependency file-entry-cache to v11 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20801&quot;&gt;#20801&lt;/a&gt;) (Milos Djermanovic)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/427ac0a014066c36aa57fa8fa9af20fd9fb591e1&quot;&gt;&lt;code&gt;427ac0a&lt;/code&gt;&lt;/a&gt; fix: use format strings in debug calls (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21247&quot;&gt;#21247&lt;/a&gt;) (Francesco Trotta)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/9d8153223dbf47b9aecdc1474202aaee4845f146&quot;&gt;&lt;code&gt;9d81532&lt;/code&gt;&lt;/a&gt; fix: support &lt;code&gt;__proto__&lt;/code&gt; in &lt;code&gt;/* exported */&lt;/code&gt; comments (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21261&quot;&gt;#21261&lt;/a&gt;) (sethamus)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/87e0a082438264ad90b87fd74165ab4fd90f63ef&quot;&gt;&lt;code&gt;87e0a08&lt;/code&gt;&lt;/a&gt; fix: &lt;a href=&quot;https://eslint.org/docs/rules/prefer-object-has-own&quot;&gt;prefer-object-has-own&lt;/a&gt; autofix breaks when Object is shadowed (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21282&quot;&gt;#21282&lt;/a&gt;) (김채영)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/8e2cb142217f2efee1d10dcc02bfb75145ae775d&quot;&gt;&lt;code&gt;8e2cb14&lt;/code&gt;&lt;/a&gt; fix: &lt;a href=&quot;https://eslint.org/docs/rules/new-cap&quot;&gt;&lt;code&gt;new-cap&lt;/code&gt;&lt;/a&gt; false positive for &lt;code&gt;UTC&lt;/code&gt; calls with &lt;code&gt;properties: false&lt;/code&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21275&quot;&gt;#21275&lt;/a&gt;) (Pixel)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/9f4a364ab0ade048dfce1f37792b1d461d866e55&quot;&gt;&lt;code&gt;9f4a364&lt;/code&gt;&lt;/a&gt; fix: Ignore static imports in &lt;a href=&quot;https://eslint.org/docs/rules/no-unreachable&quot;&gt;no-unreachable&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21276&quot;&gt;#21276&lt;/a&gt;) (Taha Kotil)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;documentation&quot; tabindex=&quot;-1&quot;&gt;Documentation&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/2417cad57d7d1bc4cf3ecf0f0575cfb10ff2011c&quot;&gt;&lt;code&gt;2417cad&lt;/code&gt;&lt;/a&gt; docs: Update README (GitHub Actions Bot)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/9cecb8a0a2348070abf72321965d41919c7cc626&quot;&gt;&lt;code&gt;9cecb8a&lt;/code&gt;&lt;/a&gt; docs: document &lt;code&gt;&#92;c&lt;/code&gt; control letter escapes in &lt;a href=&quot;https://eslint.org/docs/rules/no-control-regex&quot;&gt;no-control-regex&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21286&quot;&gt;#21286&lt;/a&gt;) (한국)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/8724829f69f8ed80c876e3a5a017da199ce78739&quot;&gt;&lt;code&gt;8724829&lt;/code&gt;&lt;/a&gt; docs: update compat table links (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21263&quot;&gt;#21263&lt;/a&gt;) (fnx)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/5634542be580750ffb1a5766470f9e9c72719696&quot;&gt;&lt;code&gt;5634542&lt;/code&gt;&lt;/a&gt; docs: Clarify &lt;a href=&quot;https://eslint.org/docs/rules/eqeqeq&quot;&gt;eqeqeq&lt;/a&gt; suggestion behavior (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21256&quot;&gt;#21256&lt;/a&gt;) (Müslüm Yılmaz)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;chores&quot; tabindex=&quot;-1&quot;&gt;Chores&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/b3d876b46083d67899eb1d9613118c1c583632a2&quot;&gt;&lt;code&gt;b3d876b&lt;/code&gt;&lt;/a&gt; chore: disable npm audit in ecosystem tests (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21306&quot;&gt;#21306&lt;/a&gt;) (Francesco Trotta)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/1696682791661c13167eb905da2f38d1b8f4a3bf&quot;&gt;&lt;code&gt;1696682&lt;/code&gt;&lt;/a&gt; ci: restore EMFILE test on Node.js 26 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21297&quot;&gt;#21297&lt;/a&gt;) (Marry (Subin Yang))&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/2c7f5d6f47a92e8c0847af103e40fdb2f4dc61ef&quot;&gt;&lt;code&gt;2c7f5d6&lt;/code&gt;&lt;/a&gt; chore: update github/codeql-action action to v4.37.9 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21296&quot;&gt;#21296&lt;/a&gt;) (renovate[bot])&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/3c753f18b461bfbf36d41a79a7863c093ef48489&quot;&gt;&lt;code&gt;3c753f1&lt;/code&gt;&lt;/a&gt; chore: update eslint (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21289&quot;&gt;#21289&lt;/a&gt;) (renovate[bot])&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/1c734690bf6f4f9c542bec428d5a1a5c6cc4a19b&quot;&gt;&lt;code&gt;1c73469&lt;/code&gt;&lt;/a&gt; chore: update ecosystem plugins (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21280&quot;&gt;#21280&lt;/a&gt;) (ESLint Bot)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/08a02be429e21fc93d86c8dd16cec6dc945ea2c1&quot;&gt;&lt;code&gt;08a02be&lt;/code&gt;&lt;/a&gt; test: add error locations to &lt;a href=&quot;https://eslint.org/docs/rules/no-extra-boolean-cast&quot;&gt;&lt;code&gt;no-extra-boolean-cast&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21266&quot;&gt;#21266&lt;/a&gt;) (lumir)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/77bb1db8e730b7da2347c647d60f215706aa349a&quot;&gt;&lt;code&gt;77bb1db&lt;/code&gt;&lt;/a&gt; chore: update github/codeql-action action to v4.37.8 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21270&quot;&gt;#21270&lt;/a&gt;) (renovate[bot])&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/007e81ac0ad66bd0be4887d88a276df292ae0bed&quot;&gt;&lt;code&gt;007e81a&lt;/code&gt;&lt;/a&gt; ci: skip EMFILE test on Node.js 26 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21265&quot;&gt;#21265&lt;/a&gt;) (lumir)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/0430280e7cca9dc0fdbf0bc50464e98e84285c49&quot;&gt;&lt;code&gt;0430280&lt;/code&gt;&lt;/a&gt; chore: improve ecosystem tests compatibility on Windows (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21178&quot;&gt;#21178&lt;/a&gt;) (crimsonjay0)&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  
  <entry>
    <title>ESLint v10.9.1 released</title>
    <link href="https://eslint.org/blog/2026/08/eslint-v10.9.1-released/"/>
    <updated>2026-08-24T00:00:00Z</updated>
    <id>https://eslint.org/blog/2026/08/eslint-v10.9.1-released/</id>
    <content type="html">&lt;h2 id=&quot;highlights&quot; tabindex=&quot;-1&quot;&gt;Highlights&lt;/h2&gt;
&lt;p&gt;This patch release fixes false positives in the &lt;a href=&quot;https://eslint.org/docs/latest/rules/no-loss-of-precision&quot;&gt;&lt;code&gt;no-loss-of-precision&lt;/code&gt;&lt;/a&gt; rule that were introduced in v10.9.0.&lt;/p&gt;
&lt;h2 id=&quot;bug-fixes&quot; tabindex=&quot;-1&quot;&gt;Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/1e641c919fc1421493bf913feb607896982451a3&quot;&gt;&lt;code&gt;1e641c9&lt;/code&gt;&lt;/a&gt; fix: &lt;a href=&quot;https://eslint.org/docs/rules/no-loss-of-precision&quot;&gt;no-loss-of-precision&lt;/a&gt; false positive with trailing decimal point (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21251&quot;&gt;#21251&lt;/a&gt;) (Aleksandr Shoronov)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;documentation&quot; tabindex=&quot;-1&quot;&gt;Documentation&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/ad74a8dada2aaa17bfd0b8cc7b4119ff7a8ac04b&quot;&gt;&lt;code&gt;ad74a8d&lt;/code&gt;&lt;/a&gt; docs: add deprecation steps for EOL package versions (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21248&quot;&gt;#21248&lt;/a&gt;) (Francesco Trotta)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;chores&quot; tabindex=&quot;-1&quot;&gt;Chores&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/3c3ae53a43721162f0db76c69665ebd9d752ea52&quot;&gt;&lt;code&gt;3c3ae53&lt;/code&gt;&lt;/a&gt; chore: update ecosystem plugins (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21249&quot;&gt;#21249&lt;/a&gt;) (ESLint Bot)&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  
  <entry>
    <title>ESLint v10.9.0 released</title>
    <link href="https://eslint.org/blog/2026/08/eslint-v10.9.0-released/"/>
    <updated>2026-08-21T00:00:00Z</updated>
    <id>https://eslint.org/blog/2026/08/eslint-v10.9.0-released/</id>
    <content type="html">&lt;h2 id=&quot;highlights&quot; tabindex=&quot;-1&quot;&gt;Highlights&lt;/h2&gt;
&lt;h3 id=&quot;new-option-checkconditionalexpressions-in-no-unmodified-loop-condition&quot; tabindex=&quot;-1&quot;&gt;New option &lt;code&gt;checkConditionalExpressions&lt;/code&gt; in &lt;code&gt;no-unmodified-loop-condition&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;The &lt;a href=&quot;https://eslint.org/docs/latest/rules/no-unmodified-loop-condition&quot;&gt;&lt;code&gt;no-unmodified-loop-condition&lt;/code&gt;&lt;/a&gt; rule now supports a &lt;code&gt;checkConditionalExpressions&lt;/code&gt; option.
When enabled, each branch in a ternary expression is checked independently.&lt;/p&gt;
&lt;p&gt;For example, with &lt;code&gt;{ &amp;quot;checkConditionalExpressions&amp;quot;: true }&lt;/code&gt;, the rule reports the &lt;code&gt;done&lt;/code&gt; variable as not modified in the loop:&lt;/p&gt;

&lt;div class=&quot;code-wrapper&quot;&gt;
    &lt;pre class=&quot;language-js line-numbers-mode&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; chunk &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;getInitialChunk&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; done &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;while&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;chunk &lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;done &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    chunk &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;nextOrNull&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;div class=&quot;line-numbers-wrapper&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;line-number&quot;&gt;1&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;2&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;3&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;4&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;5&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;6&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;/pre&gt;
    &lt;button class=&quot;copy-btn&quot; aria-labelledby=&quot;copy-button-label&quot;&gt;
        &lt;span hidden=&quot;&quot; id=&quot;copy-button-label&quot;&gt;Copy code to clipboard&lt;/span&gt;
        &lt;svg width=&quot;20&quot; height=&quot;20&quot; viewBox=&quot;0 0 20 20&quot; role=&quot;img&quot; aria-label=&quot;copy&quot; fill=&quot;none&quot; focusable=&quot;false&quot;&gt;
            &lt;path d=&quot;M4.16667 12.5H3.33333C2.89131 12.5 2.46738 12.3244 2.15482 12.0118C1.84226 11.6993 1.66667 11.2754 1.66667 10.8333V3.33332C1.66667 2.8913 1.84226 2.46737 2.15482 2.15481C2.46738 1.84225 2.89131 1.66666 3.33333 1.66666H10.8333C11.2754 1.66666 11.6993 1.84225 12.0118 2.15481C12.3244 2.46737 12.5 2.8913 12.5 3.33332V4.16666M9.16667 7.49999H16.6667C17.5871 7.49999 18.3333 8.24618 18.3333 9.16666V16.6667C18.3333 17.5871 17.5871 18.3333 16.6667 18.3333H9.16667C8.24619 18.3333 7.5 17.5871 7.5 16.6667V9.16666C7.5 8.24618 8.24619 7.49999 9.16667 7.49999Z&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.66667&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/button&gt;
&lt;/div&gt;
&lt;h2 id=&quot;features&quot; tabindex=&quot;-1&quot;&gt;Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/08de88e50294c4e01f6cae97eceeb578da55792b&quot;&gt;&lt;code&gt;08de88e&lt;/code&gt;&lt;/a&gt; feat: handle underflow in &lt;a href=&quot;https://eslint.org/docs/rules/no-loss-of-precision&quot;&gt;no-loss-of-precision&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21218&quot;&gt;#21218&lt;/a&gt;) (Rithish S)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/55db4791120ae591d88089c43127b7b0e16866d4&quot;&gt;&lt;code&gt;55db479&lt;/code&gt;&lt;/a&gt; feat: add checkConditionalExpressions to &lt;a href=&quot;https://eslint.org/docs/rules/no-unmodified-loop-condition&quot;&gt;&lt;code&gt;no-unmodified-loop-condition&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21175&quot;&gt;#21175&lt;/a&gt;) (sethamus)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;bug-fixes&quot; tabindex=&quot;-1&quot;&gt;Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/2ba302554e7a24e9909bbdd026fd0c2d1d0d8638&quot;&gt;&lt;code&gt;2ba3025&lt;/code&gt;&lt;/a&gt; fix: prevent unsafe &lt;a href=&quot;https://eslint.org/docs/rules/no-var&quot;&gt;&lt;code&gt;no-var&lt;/code&gt;&lt;/a&gt; autofix with hoisted functions (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21213&quot;&gt;#21213&lt;/a&gt;) (sethamus)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/8e6962219a605c5f5add10953aa31027da839194&quot;&gt;&lt;code&gt;8e69622&lt;/code&gt;&lt;/a&gt; fix: Prevent &lt;a href=&quot;https://eslint.org/docs/rules/no-var&quot;&gt;no-var&lt;/a&gt; autofix when var is shadowed by catch parameter (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21204&quot;&gt;#21204&lt;/a&gt;) (Yang Hyeonjong)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/684b57972e1ddf25e076fb36189c60bbcacee635&quot;&gt;&lt;code&gt;684b579&lt;/code&gt;&lt;/a&gt; fix: &lt;a href=&quot;https://eslint.org/docs/rules/prefer-template&quot;&gt;prefer-template&lt;/a&gt; invalid autofix creates a tagged template call (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21207&quot;&gt;#21207&lt;/a&gt;) (김채영)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;documentation&quot; tabindex=&quot;-1&quot;&gt;Documentation&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/9ef407a3b051e74f50dc7fb8914e2bd89b3e5e53&quot;&gt;&lt;code&gt;9ef407a&lt;/code&gt;&lt;/a&gt; docs: use eslint.config.* wherever config file names are listed (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21216&quot;&gt;#21216&lt;/a&gt;) (Marry (Subin Yang))&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/87f66f4435c4df7f4f6815c939d153196ec03e3c&quot;&gt;&lt;code&gt;87f66f4&lt;/code&gt;&lt;/a&gt; docs: Update README (GitHub Actions Bot)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/585ef37516c0dc29ddb91ce2a2cdcc46fdbbd610&quot;&gt;&lt;code&gt;585ef37&lt;/code&gt;&lt;/a&gt; docs: update architecture documentation (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21112&quot;&gt;#21112&lt;/a&gt;) (Francesco Trotta)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/f3993b0547bace7370e9728ee7408af49d367d76&quot;&gt;&lt;code&gt;f3993b0&lt;/code&gt;&lt;/a&gt; docs: Update README (GitHub Actions Bot)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/ffc87d6234b2aa4335eec069e5c4d6ac04832b9e&quot;&gt;&lt;code&gt;ffc87d6&lt;/code&gt;&lt;/a&gt; docs: fix broken links in Further Reading sections (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21203&quot;&gt;#21203&lt;/a&gt;) (Minsu)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/1a761e1d11b011fcb6bee181231a51010c500e4d&quot;&gt;&lt;code&gt;1a761e1&lt;/code&gt;&lt;/a&gt; docs: update moved JSX specification links (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21198&quot;&gt;#21198&lt;/a&gt;) (Imran Mustafa)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/4d00ca4064ae0d1a75b604a16c68ab9f386ad388&quot;&gt;&lt;code&gt;4d00ca4&lt;/code&gt;&lt;/a&gt; docs: update ESLint peer dependency to &lt;code&gt;^10.0.0&lt;/code&gt; in shareable configs (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21202&quot;&gt;#21202&lt;/a&gt;) (lumir)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/510d1a2e87bc197219f42e195ddb638d2b183a5a&quot;&gt;&lt;code&gt;510d1a2&lt;/code&gt;&lt;/a&gt; docs: Update README (GitHub Actions Bot)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;chores&quot; tabindex=&quot;-1&quot;&gt;Chores&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/899dbf131ce12a194b394bb8d67307df23509d17&quot;&gt;&lt;code&gt;899dbf1&lt;/code&gt;&lt;/a&gt; chore: update github/codeql-action action to v4.37.7 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21243&quot;&gt;#21243&lt;/a&gt;) (renovate[bot])&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/9aa38732177935bd1d7f1493732c0b67666be28a&quot;&gt;&lt;code&gt;9aa3873&lt;/code&gt;&lt;/a&gt; chore: update ecosystem plugins (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21235&quot;&gt;#21235&lt;/a&gt;) (ESLint Bot)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/dc1e7a8416937edefe04cf836ee202a6fc03bedd&quot;&gt;&lt;code&gt;dc1e7a8&lt;/code&gt;&lt;/a&gt; chore: update ecosystem plugins (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21208&quot;&gt;#21208&lt;/a&gt;) (ESLint Bot)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/f878d212e9622da9513bcd60d2aedb2e8bb4fc8b&quot;&gt;&lt;code&gt;f878d21&lt;/code&gt;&lt;/a&gt; ci: bump pnpm/action-setup from 6.0.9 to 6.0.10 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21200&quot;&gt;#21200&lt;/a&gt;) (dependabot[bot])&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/4891e50aceadb0e886ad7d8ab5ae2beab563de85&quot;&gt;&lt;code&gt;4891e50&lt;/code&gt;&lt;/a&gt; ci: bump github/codeql-action from 4.37.4 to 4.37.6 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21199&quot;&gt;#21199&lt;/a&gt;) (dependabot[bot])&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  
  <entry>
    <title>ESLint v10.8.1 released</title>
    <link href="https://eslint.org/blog/2026/08/eslint-v10.8.1-released/"/>
    <updated>2026-08-07T00:00:00Z</updated>
    <id>https://eslint.org/blog/2026/08/eslint-v10.8.1-released/</id>
    <content type="html">&lt;h2 id=&quot;highlights&quot; tabindex=&quot;-1&quot;&gt;Highlights&lt;/h2&gt;
&lt;p&gt;The following rules have been updated to ensure that they behave correctly in some edge cases:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://eslint.org/docs/latest/rules/accessor-pairs&quot;&gt;&lt;code&gt;accessor-pairs&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://eslint.org/docs/latest/rules/getter-return&quot;&gt;&lt;code&gt;getter-return&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://eslint.org/docs/latest/rules/id-denylist&quot;&gt;&lt;code&gt;id-denylist&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://eslint.org/docs/latest/rules/id-match&quot;&gt;&lt;code&gt;id-match&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://eslint.org/docs/latest/rules/no-unused-labels&quot;&gt;&lt;code&gt;no-unused-labels&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://eslint.org/docs/latest/rules/no-unused-vars&quot;&gt;&lt;code&gt;no-unused-vars&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;bug-fixes&quot; tabindex=&quot;-1&quot;&gt;Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/18eb0a7e787b9fac3049ef3dad0e845d2bd940a4&quot;&gt;&lt;code&gt;18eb0a7&lt;/code&gt;&lt;/a&gt; fix: prevent ASI hazard in &lt;a href=&quot;https://eslint.org/docs/rules/no-unused-labels&quot;&gt;&lt;code&gt;no-unused-labels&lt;/code&gt;&lt;/a&gt; autofix (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21173&quot;&gt;#21173&lt;/a&gt;) (dongkyu lee)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/151ba3f5834a0909e8b9b1736f4889ac694c0104&quot;&gt;&lt;code&gt;151ba3f&lt;/code&gt;&lt;/a&gt; fix: false positives in &lt;a href=&quot;https://eslint.org/docs/rules/getter-return&quot;&gt;&lt;code&gt;getter-return&lt;/code&gt;&lt;/a&gt; and &lt;a href=&quot;https://eslint.org/docs/rules/accessor-pairs&quot;&gt;&lt;code&gt;accessor-pairs&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21163&quot;&gt;#21163&lt;/a&gt;) (Grit)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/6898df9364639ee64b9448a4cb6b08a30c16bd37&quot;&gt;&lt;code&gt;6898df9&lt;/code&gt;&lt;/a&gt; fix: ignore meta-property names in &lt;a href=&quot;https://eslint.org/docs/rules/id-denylist&quot;&gt;&lt;code&gt;id-denylist&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21166&quot;&gt;#21166&lt;/a&gt;) (Pixel)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/4d7db6628e2badf0857cb88734fe641c3874bce9&quot;&gt;&lt;code&gt;4d7db66&lt;/code&gt;&lt;/a&gt; fix: ignore meta-property names in &lt;a href=&quot;https://eslint.org/docs/rules/id-match&quot;&gt;&lt;code&gt;id-match&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21167&quot;&gt;#21167&lt;/a&gt;) (Pixel)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/677214e7eea83d8bc6e4b79eea871577e1369d5f&quot;&gt;&lt;code&gt;677214e&lt;/code&gt;&lt;/a&gt; fix: handle ASI hazards in &lt;a href=&quot;https://eslint.org/docs/rules/no-unused-vars&quot;&gt;no-unused-vars&lt;/a&gt; removeVar suggestion (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20935&quot;&gt;#20935&lt;/a&gt;) (kuldeep kumar)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;documentation&quot; tabindex=&quot;-1&quot;&gt;Documentation&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/7d0cbf81cfdb7526b5c4cb7b222ddc7f257db560&quot;&gt;&lt;code&gt;7d0cbf8&lt;/code&gt;&lt;/a&gt; docs: Update README (GitHub Actions Bot)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/0a05812adb12598b32e85297b98df5ad14501d60&quot;&gt;&lt;code&gt;0a05812&lt;/code&gt;&lt;/a&gt; docs: add missing backticks to [&lt;code&gt;no-duplicate-imports](/docs/rules/no-duplicate-imports).js&lt;/code&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21183&quot;&gt;#21183&lt;/a&gt;) (Lee Daeun)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/678c90b55da2889d4400cbf6e2584ab683faf202&quot;&gt;&lt;code&gt;678c90b&lt;/code&gt;&lt;/a&gt; docs: Update README (GitHub Actions Bot)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/8a104242e8e1c5614940fab7324346974cff7d26&quot;&gt;&lt;code&gt;8a10424&lt;/code&gt;&lt;/a&gt; docs: Update README (GitHub Actions Bot)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/69bb948061105426dbe6e3c931fcda783286e020&quot;&gt;&lt;code&gt;69bb948&lt;/code&gt;&lt;/a&gt; docs: Update README (GitHub Actions Bot)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;chores&quot; tabindex=&quot;-1&quot;&gt;Chores&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/0a148005051fded2ef1d14cc228ae505251b4b10&quot;&gt;&lt;code&gt;0a14800&lt;/code&gt;&lt;/a&gt; chore: update github/codeql-action action to v4.37.4 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21196&quot;&gt;#21196&lt;/a&gt;) (renovate[bot])&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/05adcb13542061dc7fadde5cd58d23d405a96d93&quot;&gt;&lt;code&gt;05adcb1&lt;/code&gt;&lt;/a&gt; test: fix failing ecosystem test for &lt;code&gt;eslint-plugin-unicorn&lt;/code&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21191&quot;&gt;#21191&lt;/a&gt;) (Lazizbek Ergashev)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/56110356652dd614b3cf0933538abb551fc6bd6f&quot;&gt;&lt;code&gt;5611035&lt;/code&gt;&lt;/a&gt; test: add error locations info to &lt;a href=&quot;https://eslint.org/docs/rules/no-void&quot;&gt;&lt;code&gt;no-void&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21185&quot;&gt;#21185&lt;/a&gt;) (Lee Daeun)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/ee47333aa681cfc3cb54df08c38f211ea219cc2a&quot;&gt;&lt;code&gt;ee47333&lt;/code&gt;&lt;/a&gt; ci: bump github/codeql-action from 4 to 4.37.3 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21176&quot;&gt;#21176&lt;/a&gt;) (dependabot[bot])&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/f131c034ad91bbf06bcbb6b5e931447a8e419a46&quot;&gt;&lt;code&gt;f131c03&lt;/code&gt;&lt;/a&gt; chore: improve ecosystem test failure reporting (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20937&quot;&gt;#20937&lt;/a&gt;) (crimsonjay0)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/1f6eddee609b369b50993eab08d437dda4700991&quot;&gt;&lt;code&gt;1f6edde&lt;/code&gt;&lt;/a&gt; chore: update ecosystem plugins (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21182&quot;&gt;#21182&lt;/a&gt;) (ESLint Bot)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/d3266fb26c719c6b90a6cbe54bb120c9335ad19c&quot;&gt;&lt;code&gt;d3266fb&lt;/code&gt;&lt;/a&gt; chore: unpin &lt;code&gt;webpack&lt;/code&gt; dependency (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21172&quot;&gt;#21172&lt;/a&gt;) (Francesco Trotta)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/65a6519cc8733b4688558a8611397cf9d01dd55d&quot;&gt;&lt;code&gt;65a6519&lt;/code&gt;&lt;/a&gt; chore: add allowScripts field to package.json (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21092&quot;&gt;#21092&lt;/a&gt;) (GiHoon Noh)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/22e52568536e0009d4493dc888736bc163220c4b&quot;&gt;&lt;code&gt;22e5256&lt;/code&gt;&lt;/a&gt; ci: add &lt;code&gt;triage:no&lt;/code&gt; label to Dependabot PRs (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21141&quot;&gt;#21141&lt;/a&gt;) (lumir)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/55c9038836c91b6bd5617f0c97bea2274c9cc0bf&quot;&gt;&lt;code&gt;55c9038&lt;/code&gt;&lt;/a&gt; ci: bump actions/labeler from 6 to 7 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21159&quot;&gt;#21159&lt;/a&gt;) (dependabot[bot])&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/7280e78183d4711a49916b6a49ba5efaa651a991&quot;&gt;&lt;code&gt;7280e78&lt;/code&gt;&lt;/a&gt; chore: update dependency prettier to v3.9.6 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21162&quot;&gt;#21162&lt;/a&gt;) (renovate[bot])&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/eddbad60158d8cda86830fbe934a9d2282273b32&quot;&gt;&lt;code&gt;eddbad6&lt;/code&gt;&lt;/a&gt; test: fix failing ecosystem test for &lt;code&gt;eslint-plugin-unicorn&lt;/code&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21156&quot;&gt;#21156&lt;/a&gt;) (Francesco Trotta)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/60a178d5ef1b0c471be0831031ed7347f8f81dc2&quot;&gt;&lt;code&gt;60a178d&lt;/code&gt;&lt;/a&gt; chore: update ecosystem plugins (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21150&quot;&gt;#21150&lt;/a&gt;) (ESLint Bot)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/f9f61dc6112836f46a58a410c38b8c2faf10973f&quot;&gt;&lt;code&gt;f9f61dc&lt;/code&gt;&lt;/a&gt; test: add error locations to &lt;a href=&quot;https://eslint.org/docs/rules/no-unreachable&quot;&gt;&lt;code&gt;no-unreachable&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21151&quot;&gt;#21151&lt;/a&gt;) (JIYEON)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/d08629382b0a6aaa042823b796e5100e60053b54&quot;&gt;&lt;code&gt;d086293&lt;/code&gt;&lt;/a&gt; test: add error locations to &lt;a href=&quot;https://eslint.org/docs/rules/no-undef&quot;&gt;&lt;code&gt;no-undef&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21147&quot;&gt;#21147&lt;/a&gt;) (JIYEON)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/cc01b67061bbf558aa25746883ea1cad847f7cf2&quot;&gt;&lt;code&gt;cc01b67&lt;/code&gt;&lt;/a&gt; test: add error locations to &lt;a href=&quot;https://eslint.org/docs/rules/no-useless-catch&quot;&gt;&lt;code&gt;no-useless-catch&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21144&quot;&gt;#21144&lt;/a&gt;) (devoil)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/688e75ede01b295d51f2f86c9d82da020a4c887e&quot;&gt;&lt;code&gt;688e75e&lt;/code&gt;&lt;/a&gt; chore: add missing backticks in JSDoc (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21143&quot;&gt;#21143&lt;/a&gt;) (Bo Hyun Kim)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/7c1e17543ad396f50f65b003cf9142d43d3c63b0&quot;&gt;&lt;code&gt;7c1e175&lt;/code&gt;&lt;/a&gt; test: add error locations to &lt;a href=&quot;https://eslint.org/docs/rules/require-await&quot;&gt;&lt;code&gt;require-await&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21145&quot;&gt;#21145&lt;/a&gt;) (Grit)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/588a26ddce3c5a20f5b3f3d51ba1353cce7b4b0c&quot;&gt;&lt;code&gt;588a26d&lt;/code&gt;&lt;/a&gt; test: add error locations to &lt;a href=&quot;https://eslint.org/docs/rules/no-extra-label&quot;&gt;&lt;code&gt;no-extra-label&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21139&quot;&gt;#21139&lt;/a&gt;) (dongkyu lee)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/059aa895743639e3ab53d14f9d944ff4be042233&quot;&gt;&lt;code&gt;059aa89&lt;/code&gt;&lt;/a&gt; test: add error locations to &lt;a href=&quot;https://eslint.org/docs/rules/no-useless-concat&quot;&gt;&lt;code&gt;no-useless-concat&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21140&quot;&gt;#21140&lt;/a&gt;) (dongkyu lee)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/5a452a8ba53917d65c9d83c3959ed35c2f890613&quot;&gt;&lt;code&gt;5a452a8&lt;/code&gt;&lt;/a&gt; test: add error locations to &lt;a href=&quot;https://eslint.org/docs/rules/no-const-assign&quot;&gt;&lt;code&gt;no-const-assign&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21138&quot;&gt;#21138&lt;/a&gt;) (dongkyu lee)&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  
  <entry>
    <title>ESLint v10.8.0 released</title>
    <link href="https://eslint.org/blog/2026/07/eslint-v10.8.0-released/"/>
    <updated>2026-07-24T00:00:00Z</updated>
    <id>https://eslint.org/blog/2026/07/eslint-v10.8.0-released/</id>
    <content type="html">&lt;h2 id=&quot;highlights&quot; tabindex=&quot;-1&quot;&gt;Highlights&lt;/h2&gt;
&lt;p&gt;In ESLint v10.8.0, the following rules have been updated to avoid incorrect or unexpected behavior in some edge cases:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://eslint.org/docs/latest/rules/class-methods-use-this&quot;&gt;&lt;code&gt;class-methods-use-this&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://eslint.org/docs/latest/rules/prefer-object-spread&quot;&gt;&lt;code&gt;prefer-object-spread&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://eslint.org/docs/latest/rules/prefer-template&quot;&gt;&lt;code&gt;prefer-template&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://eslint.org/docs/latest/rules/preserve-caught-error&quot;&gt;&lt;code&gt;preserve-caught-error&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://eslint.org/docs/latest/rules/no-unreachable-loop&quot;&gt;&lt;code&gt;no-unreachable-loop&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;features&quot; tabindex=&quot;-1&quot;&gt;Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/2fee9bb7416116cbed4d8c8100b1ae713b6356a1&quot;&gt;&lt;code&gt;2fee9bb&lt;/code&gt;&lt;/a&gt; feat: export &lt;code&gt;ConfigObject&lt;/code&gt; from &lt;code&gt;eslint/config&lt;/code&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21082&quot;&gt;#21082&lt;/a&gt;) (sethamus)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;bug-fixes&quot; tabindex=&quot;-1&quot;&gt;Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/6b8d2f7589b8a7c8b91b8ca2a2ef6d46178760d8&quot;&gt;&lt;code&gt;6b8d2f7&lt;/code&gt;&lt;/a&gt; fix: escape reserved characters in rule id in &lt;code&gt;html&lt;/code&gt; formatter (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21129&quot;&gt;#21129&lt;/a&gt;) (Francesco Trotta)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/90910715011211a20d011d807d398a7005127f35&quot;&gt;&lt;code&gt;9091071&lt;/code&gt;&lt;/a&gt; fix: prevent &lt;a href=&quot;https://eslint.org/docs/rules/no-unreachable-loop&quot;&gt;&lt;code&gt;no-unreachable-loop&lt;/code&gt;&lt;/a&gt; crash when all loop types are ignored (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21116&quot;&gt;#21116&lt;/a&gt;) (Pixel)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/e23fafe8d4b15355adef6cdebef414c3a2019454&quot;&gt;&lt;code&gt;e23fafe&lt;/code&gt;&lt;/a&gt; fix: &lt;a href=&quot;https://eslint.org/docs/rules/prefer-object-spread&quot;&gt;prefer-object-spread&lt;/a&gt; add semicolon when adding parenthesis (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21081&quot;&gt;#21081&lt;/a&gt;) (synthex-byte)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/20b5ad052360a443786a202e94624a3f81846511&quot;&gt;&lt;code&gt;20b5ad0&lt;/code&gt;&lt;/a&gt; fix: quadratic-time regex in &lt;a href=&quot;https://eslint.org/docs/rules/prefer-template&quot;&gt;&lt;code&gt;prefer-template&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21096&quot;&gt;#21096&lt;/a&gt;) (Milos Djermanovic)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/8b6f6c0b33411f34485512456d94f221daf7321f&quot;&gt;&lt;code&gt;8b6f6c0&lt;/code&gt;&lt;/a&gt; fix: apply ignore configs to computed methods in &lt;a href=&quot;https://eslint.org/docs/rules/class-methods-use-this&quot;&gt;class-methods-use-this&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21094&quot;&gt;#21094&lt;/a&gt;) (Pixel)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/b2c608c014a396800a24a89343265d0616bee2d8&quot;&gt;&lt;code&gt;b2c608c&lt;/code&gt;&lt;/a&gt; fix: NewExpression with parenthesized callee in &lt;a href=&quot;https://eslint.org/docs/rules/preserve-caught-error&quot;&gt;&lt;code&gt;preserve-caught-error&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21083&quot;&gt;#21083&lt;/a&gt;) (Francesco Trotta)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;documentation&quot; tabindex=&quot;-1&quot;&gt;Documentation&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/6ddf8587e5cfeeb7328332601bb76d98b8a198ea&quot;&gt;&lt;code&gt;6ddf858&lt;/code&gt;&lt;/a&gt; docs: fix broken Specify Parser Options anchor link (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21106&quot;&gt;#21106&lt;/a&gt;) (Minsu)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/784dfbe98f0222426fd200153a5ce2e5624151f0&quot;&gt;&lt;code&gt;784dfbe&lt;/code&gt;&lt;/a&gt; docs: Clarify &lt;a href=&quot;https://eslint.org/docs/rules/no-eq-null&quot;&gt;&lt;code&gt;no-eq-null&lt;/code&gt;&lt;/a&gt; description (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21120&quot;&gt;#21120&lt;/a&gt;) (Park Harin)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/7ec733a3ba5acb053a73ac656030a3879aa48fda&quot;&gt;&lt;code&gt;7ec733a&lt;/code&gt;&lt;/a&gt; docs: Fix typos and grammar in glossary (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21095&quot;&gt;#21095&lt;/a&gt;) (Marry (Subin Yang))&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/92bb13f13065db72d62454b9830d3ae52db15c76&quot;&gt;&lt;code&gt;92bb13f&lt;/code&gt;&lt;/a&gt; docs: replace quake link (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21108&quot;&gt;#21108&lt;/a&gt;) (Jung Hyeon Jun)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/68eb4a57572409dbdcfeb3bc5c92ddbba46bc770&quot;&gt;&lt;code&gt;68eb4a5&lt;/code&gt;&lt;/a&gt; docs: fix broken Specify Globals anchor links in rule pages (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21103&quot;&gt;#21103&lt;/a&gt;) (Minsu)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/d28f697e0d32d7446c825fd89c362db028450134&quot;&gt;&lt;code&gt;d28f697&lt;/code&gt;&lt;/a&gt; docs: replace Code Climate CLI links with Qlty CLI links (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21099&quot;&gt;#21099&lt;/a&gt;) (Jung Hyeon Jun)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/eccc68d42564e46bc9020d19ec52d2988f3b7bfa&quot;&gt;&lt;code&gt;eccc68d&lt;/code&gt;&lt;/a&gt; docs: correct --suppressions-location option description (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21093&quot;&gt;#21093&lt;/a&gt;) (Ga eun Lee)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/c5963f74bfa82a5b7ccc0607dcdcc695b8c97a31&quot;&gt;&lt;code&gt;c5963f7&lt;/code&gt;&lt;/a&gt; docs: Update README (GitHub Actions Bot)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;chores&quot; tabindex=&quot;-1&quot;&gt;Chores&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/4fbf46d140120ae838db08cbe49544c985956490&quot;&gt;&lt;code&gt;4fbf46d&lt;/code&gt;&lt;/a&gt; test: pin &lt;code&gt;webpack&lt;/code&gt; version to 5.108.4 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21137&quot;&gt;#21137&lt;/a&gt;) (Francesco Trotta)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/2d063e224e9bb0ccb0a28c120f7e380a8d62f320&quot;&gt;&lt;code&gt;2d063e2&lt;/code&gt;&lt;/a&gt; chore: update HTTP URLs to HTTPS in JSDoc and comments (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21101&quot;&gt;#21101&lt;/a&gt;) (Bo Hyun Kim)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/eccbe7bc9257a6c99880468e452c8dfafbf47f74&quot;&gt;&lt;code&gt;eccbe7b&lt;/code&gt;&lt;/a&gt; test: add error locations to &lt;a href=&quot;https://eslint.org/docs/rules/no-class-assign&quot;&gt;&lt;code&gt;no-class-assign&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21123&quot;&gt;#21123&lt;/a&gt;) (devoil)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/e7d1e4373bf626f8da76d62ce024c28928bc99bc&quot;&gt;&lt;code&gt;e7d1e43&lt;/code&gt;&lt;/a&gt; ci: bump actions/setup-go from 6 to 7 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21118&quot;&gt;#21118&lt;/a&gt;) (dependabot[bot])&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/e9d66d0cde1a7752c29dee53ab7b62632835a87a&quot;&gt;&lt;code&gt;e9d66d0&lt;/code&gt;&lt;/a&gt; ci: bump actions/setup-node from 6 to 7 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21119&quot;&gt;#21119&lt;/a&gt;) (dependabot[bot])&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/ee225b60c26f0cc5f4d71641888a5bd2ec5626d6&quot;&gt;&lt;code&gt;ee225b6&lt;/code&gt;&lt;/a&gt; test: Add error location details to &lt;a href=&quot;https://eslint.org/docs/rules/no-eq-null&quot;&gt;&lt;code&gt;no-eq-null&lt;/code&gt;&lt;/a&gt; rule (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21117&quot;&gt;#21117&lt;/a&gt;) (Park Harin)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/044a627fa3e28ee1410d515acc5378eb4b49f8ba&quot;&gt;&lt;code&gt;044a627&lt;/code&gt;&lt;/a&gt; chore: update minimatch to ^10.2.5 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21107&quot;&gt;#21107&lt;/a&gt;) (김채영)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/fb09aa8ff09730d3ccf68859e065f99666b52466&quot;&gt;&lt;code&gt;fb09aa8&lt;/code&gt;&lt;/a&gt; chore: update ecosystem plugins (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21115&quot;&gt;#21115&lt;/a&gt;) (ESLint Bot)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/5abd878740fe417fd8a910cac3741f2a0317b365&quot;&gt;&lt;code&gt;5abd878&lt;/code&gt;&lt;/a&gt; test: add error locations to &lt;a href=&quot;https://eslint.org/docs/rules/no-proto&quot;&gt;&lt;code&gt;no-proto&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21114&quot;&gt;#21114&lt;/a&gt;) (Gihyeon Jeong / 정기현)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/9715887ec94a5ff936447d7b680d039fbe2f0541&quot;&gt;&lt;code&gt;9715887&lt;/code&gt;&lt;/a&gt; test: Add error location details to &lt;a href=&quot;https://eslint.org/docs/rules/no-div-regex&quot;&gt;&lt;code&gt;no-div-regex&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21110&quot;&gt;#21110&lt;/a&gt;) (Park Harin)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/a746ec6ea4a2249b1eb3f512264da5f4d5f7c886&quot;&gt;&lt;code&gt;a746ec6&lt;/code&gt;&lt;/a&gt; test: add error locations to &lt;a href=&quot;https://eslint.org/docs/rules/no-new-wrappers&quot;&gt;&lt;code&gt;no-new-wrappers&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21109&quot;&gt;#21109&lt;/a&gt;) (Gihyeon Jeong / 정기현)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/8dde64570e240f3ef8af873d59a752db6d8519aa&quot;&gt;&lt;code&gt;8dde645&lt;/code&gt;&lt;/a&gt; test: add error locations to &lt;a href=&quot;https://eslint.org/docs/rules/no-ex-assign&quot;&gt;&lt;code&gt;no-ex-assign&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21102&quot;&gt;#21102&lt;/a&gt;) (devoil)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/13ab0ec447650c079d8a5e5d67222f79e69c741e&quot;&gt;&lt;code&gt;13ab0ec&lt;/code&gt;&lt;/a&gt; test: add error locations to &lt;a href=&quot;https://eslint.org/docs/rules/no-label-var&quot;&gt;&lt;code&gt;no-label-var&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21098&quot;&gt;#21098&lt;/a&gt;) (Gihyeon Jeong / 정기현)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/a99906ffb8342dde03336b5c6372b5658f21d5f2&quot;&gt;&lt;code&gt;a99906f&lt;/code&gt;&lt;/a&gt; test: Add error location details to &lt;a href=&quot;https://eslint.org/docs/rules/no-delete-var&quot;&gt;&lt;code&gt;no-delete-var&lt;/code&gt;&lt;/a&gt; rule (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21105&quot;&gt;#21105&lt;/a&gt;) (Park Harin)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/c47e8dc9bbfba797430db45ae08cb6f7392cfc9d&quot;&gt;&lt;code&gt;c47e8dc&lt;/code&gt;&lt;/a&gt; chore: add missing backticks to &lt;code&gt;languages/js/index.js&lt;/code&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21104&quot;&gt;#21104&lt;/a&gt;) (beeen)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/0174428dd7543d118cf67a823b98dd97032fe68c&quot;&gt;&lt;code&gt;0174428&lt;/code&gt;&lt;/a&gt; chore: add missing backticks to &lt;code&gt;translate-cli-options.js&lt;/code&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21097&quot;&gt;#21097&lt;/a&gt;) (dongkyu lee)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/3d36589a4917326500f0707bb41745160f387d00&quot;&gt;&lt;code&gt;3d36589&lt;/code&gt;&lt;/a&gt; chore: add missing backticks to &lt;code&gt;serialization.js&lt;/code&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21091&quot;&gt;#21091&lt;/a&gt;) (이규환)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/dcc9312c1081931de0fe1b555fbb6aa82fe696b9&quot;&gt;&lt;code&gt;dcc9312&lt;/code&gt;&lt;/a&gt; test: add error locations to &lt;a href=&quot;https://eslint.org/docs/rules/eqeqeq&quot;&gt;&lt;code&gt;eqeqeq&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21090&quot;&gt;#21090&lt;/a&gt;) (Ga eun Lee)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/2710b182472cd1a95e4aff6186cb2c4fbadb4ee0&quot;&gt;&lt;code&gt;2710b18&lt;/code&gt;&lt;/a&gt; ci: Add explicit permissions to rebuild-docs-sites workflow (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21089&quot;&gt;#21089&lt;/a&gt;) (Marry (Subin Yang))&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/5d2f8663ee60701e9036b0b0933a12efd9d93269&quot;&gt;&lt;code&gt;5d2f866&lt;/code&gt;&lt;/a&gt; chore: update dependency prettier to v3.9.5 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21086&quot;&gt;#21086&lt;/a&gt;) (renovate[bot])&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/d584e31098f262563b97dc5d5f23a63a187879a0&quot;&gt;&lt;code&gt;d584e31&lt;/code&gt;&lt;/a&gt; chore: fix failing ecosystem test for &lt;code&gt;eslint-plugin-unicorn&lt;/code&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21084&quot;&gt;#21084&lt;/a&gt;) (Francesco Trotta)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/bf3eda049bd690f1e9a5a0c4520a6329b3e4ec85&quot;&gt;&lt;code&gt;bf3eda0&lt;/code&gt;&lt;/a&gt; chore: update ecosystem plugins (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21079&quot;&gt;#21079&lt;/a&gt;) (ESLint Bot)&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  
  <entry>
    <title>Automating ESLint migrations with Codemod</title>
    <link href="https://eslint.org/blog/2026/07/eslint-codemod-migrations/"/>
    <updated>2026-07-16T00:00:00Z</updated>
    <id>https://eslint.org/blog/2026/07/eslint-codemod-migrations/</id>
    <content type="html">&lt;p&gt;We are excited to announce a partnership between ESLint and &lt;a href=&quot;https://codemod.com/&quot;&gt;Codemod&lt;/a&gt; to create a better migration experience for ESLint users, starting with the ESLint v8 to v9 and v9 to v10 migrations. All official ESLint codemods live in &lt;a href=&quot;https://github.com/eslint/codemods&quot;&gt;eslint/codemods&lt;/a&gt; and on the &lt;a href=&quot;https://codemod.link/eslint&quot;&gt;Codemod Registry&lt;/a&gt;. Community members are encouraged to open issues for missing codemods or contribute new ones through pull requests. Once reviewed and merged by maintainers, codemods are automatically published to the Codemod Registry through GitHub Actions.&lt;/p&gt;
&lt;h2 id=&quot;what-is-codemod%3F&quot; tabindex=&quot;-1&quot;&gt;What is Codemod?&lt;/h2&gt;
&lt;p&gt;Codemod is an open source platform for building, sharing, and running automated code migrations at scale. It is an &lt;a href=&quot;https://openjsf.org/&quot;&gt;OpenJS Foundation&lt;/a&gt; partner, and its tooling has been adopted by projects such as React, Node.js, Express, React Router, Nuxt.js, pnpm, Webpack, MSW, i18next, and more.&lt;/p&gt;
&lt;p&gt;Its platform includes JSSG (JS ast-grep), a codemod runtime and workflow engine that supports multi-step transformations and combines deterministic, compiler-aware transformations with AI-powered steps to deliver the right balance of reliability, efficiency, and flexibility. The source code for the Codemod CLI and engine is available on &lt;a href=&quot;https://github.com/codemod/codemod&quot;&gt;GitHub&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Key features of Codemod include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Workspace-wide semantic analysis&lt;/li&gt;
&lt;li&gt;Cross-file refactors&lt;/li&gt;
&lt;li&gt;Multi-language support&lt;/li&gt;
&lt;li&gt;Repository-scale performance&lt;/li&gt;
&lt;li&gt;A simple, agent-friendly API&lt;/li&gt;
&lt;li&gt;Built-in AST inspection through MCP&lt;/li&gt;
&lt;li&gt;Secure sandboxed execution&lt;/li&gt;
&lt;li&gt;Metrics and codebase mining&lt;/li&gt;
&lt;li&gt;Native support for multi-file transformations&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Check out the &lt;a href=&quot;https://docs.codemod.com/&quot;&gt;Codemod docs&lt;/a&gt; to learn more about JSSG (JS ast-grep), Codemod’s open source toolkit for building codemods, and explore its features.&lt;/p&gt;
&lt;h2 id=&quot;eslint-v8-to-v9-migration&quot; tabindex=&quot;-1&quot;&gt;ESLint v8 to v9 migration&lt;/h2&gt;
&lt;p&gt;For v8 to v9 migration, we’ve released two codemods: one to help upgrade ESLint config, and another for custom rules.&lt;/p&gt;
&lt;h3 id=&quot;migrating-configuration-with-%40eslint%2Fv8-to-v9-config&quot; tabindex=&quot;-1&quot;&gt;Migrating configuration with &lt;code&gt;@eslint/v8-to-v9-config&lt;/code&gt;&lt;/h3&gt;

&lt;div class=&quot;code-wrapper&quot;&gt;
    &lt;pre class=&quot;language-shell line-numbers-mode&quot;&gt;&lt;code class=&quot;language-shell&quot;&gt;npx codemod @eslint/v8-to-v9-config
&lt;/code&gt;&lt;div class=&quot;line-numbers-wrapper&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;line-number&quot;&gt;1&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;/pre&gt;
    &lt;button class=&quot;copy-btn&quot; aria-labelledby=&quot;copy-button-label&quot;&gt;
        &lt;span hidden=&quot;&quot; id=&quot;copy-button-label&quot;&gt;Copy code to clipboard&lt;/span&gt;
        &lt;svg width=&quot;20&quot; height=&quot;20&quot; viewBox=&quot;0 0 20 20&quot; role=&quot;img&quot; aria-label=&quot;copy&quot; fill=&quot;none&quot; focusable=&quot;false&quot;&gt;
            &lt;path d=&quot;M4.16667 12.5H3.33333C2.89131 12.5 2.46738 12.3244 2.15482 12.0118C1.84226 11.6993 1.66667 11.2754 1.66667 10.8333V3.33332C1.66667 2.8913 1.84226 2.46737 2.15482 2.15481C2.46738 1.84225 2.89131 1.66666 3.33333 1.66666H10.8333C11.2754 1.66666 11.6993 1.84225 12.0118 2.15481C12.3244 2.46737 12.5 2.8913 12.5 3.33332V4.16666M9.16667 7.49999H16.6667C17.5871 7.49999 18.3333 8.24618 18.3333 9.16666V16.6667C18.3333 17.5871 17.5871 18.3333 16.6667 18.3333H9.16667C8.24619 18.3333 7.5 17.5871 7.5 16.6667V9.16666C7.5 8.24618 8.24619 7.49999 9.16667 7.49999Z&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.66667&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/button&gt;
&lt;/div&gt;
&lt;p&gt;Unlike the original &lt;a href=&quot;https://npmjs.com/package/@eslint/migrate-config&quot;&gt;ESLint Configuration Migrator&lt;/a&gt;, this codemod runs as a workspace migration. It can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Extract &lt;code&gt;eslintConfig&lt;/code&gt; from &lt;code&gt;package.json&lt;/code&gt; and generate &lt;code&gt;eslint.config.mjs&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Clean up duplicate &lt;code&gt;/* eslint */&lt;/code&gt; comments and invalid &lt;code&gt;/* exported */&lt;/code&gt; comments in source files&lt;/li&gt;
&lt;li&gt;Remove deprecated &lt;code&gt;require-jsdoc&lt;/code&gt; and &lt;code&gt;valid-jsdoc&lt;/code&gt; rule references from inline comments&lt;/li&gt;
&lt;li&gt;Migrate those JSDoc rules to &lt;a href=&quot;https://www.npmjs.com/package/eslint-plugin-jsdoc&quot;&gt;&lt;code&gt;eslint-plugin-jsdoc&lt;/code&gt;&lt;/a&gt; using &lt;code&gt;jsdoc({ config: &amp;quot;flat/recommended&amp;quot;, ... })&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Add a &lt;code&gt;// TODO: Migrate settings manually&lt;/code&gt; comment when custom settings need review&lt;/li&gt;
&lt;li&gt;Handle several ESLint v9 rule option changes, including &lt;code&gt;no-unused-vars&lt;/code&gt;, &lt;code&gt;no-useless-computed-key&lt;/code&gt;, &lt;code&gt;no-sequences&lt;/code&gt;, &lt;code&gt;no-constructor-return&lt;/code&gt;, &lt;code&gt;camelcase&lt;/code&gt;, and &lt;code&gt;no-restricted-imports&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Convert &lt;code&gt;env&lt;/code&gt; to &lt;code&gt;languageOptions.globals&lt;/code&gt; using the &lt;a href=&quot;https://www.npmjs.com/package/globals&quot;&gt;&lt;code&gt;globals&lt;/code&gt;&lt;/a&gt; package&lt;/li&gt;
&lt;li&gt;Map &lt;code&gt;excludedFiles&lt;/code&gt; to per-config &lt;code&gt;ignores&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Move &lt;code&gt;noInlineConfig&lt;/code&gt; and &lt;code&gt;reportUnusedDisableDirectives&lt;/code&gt; to &lt;code&gt;linterOptions&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Import parser packages and plugins&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;defineConfig&lt;/code&gt; and &lt;code&gt;globalIgnores&lt;/code&gt; from &lt;a href=&quot;https://www.npmjs.com/package/@eslint/config-helpers&quot;&gt;&lt;code&gt;@eslint/config-helpers&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Merge ignore patterns from both &lt;code&gt;.eslintignore&lt;/code&gt; and &lt;code&gt;.gitignore&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For JavaScript config files, the codemod works from the AST and can resolve simple bindings such as &lt;code&gt;const&lt;/code&gt; values, identifiers, and spreads. More advanced logic, such as functions, conditionals, and dynamic &lt;code&gt;require()&lt;/code&gt; calls, still needs manual review. The workflow also supports options such as &lt;code&gt;--target&lt;/code&gt;, &lt;code&gt;eslintConfigCustomName&lt;/code&gt;, and &lt;code&gt;codeFormattingCommandEnabled&lt;/code&gt;, and prompts you to install required packages after it runs.&lt;/p&gt;
&lt;p&gt;The codemod does not migrate &lt;code&gt;--ext&lt;/code&gt; CLI usage, so you still need to &lt;a href=&quot;https://github.com/eslint/rewrite/tree/main/packages/migrate-config#--ext&quot;&gt;create a config entry&lt;/a&gt; for the file extensions you previously passed on the command line. Learn more on &lt;a href=&quot;https://app.codemod.com/registry/@eslint/v8-to-v9-config&quot;&gt;&lt;code&gt;@eslint/v8-to-v9-config&lt;/code&gt;’s registry page&lt;/a&gt; and in the &lt;a href=&quot;https://eslint.org/docs/latest/use/configure/migration-guide&quot;&gt;configuration migration guide&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;migrating-custom-rules-with-%40eslint%2Fv8-to-v9-custom-rules&quot; tabindex=&quot;-1&quot;&gt;Migrating custom rules with &lt;code&gt;@eslint/v8-to-v9-custom-rules&lt;/code&gt;&lt;/h3&gt;

&lt;div class=&quot;code-wrapper&quot;&gt;
    &lt;pre class=&quot;language-shell line-numbers-mode&quot;&gt;&lt;code class=&quot;language-shell&quot;&gt;npx codemod @eslint/v8-to-v9-custom-rules
&lt;/code&gt;&lt;div class=&quot;line-numbers-wrapper&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;line-number&quot;&gt;1&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;/pre&gt;
    &lt;button class=&quot;copy-btn&quot; aria-labelledby=&quot;copy-button-label&quot;&gt;
        &lt;span hidden=&quot;&quot; id=&quot;copy-button-label&quot;&gt;Copy code to clipboard&lt;/span&gt;
        &lt;svg width=&quot;20&quot; height=&quot;20&quot; viewBox=&quot;0 0 20 20&quot; role=&quot;img&quot; aria-label=&quot;copy&quot; fill=&quot;none&quot; focusable=&quot;false&quot;&gt;
            &lt;path d=&quot;M4.16667 12.5H3.33333C2.89131 12.5 2.46738 12.3244 2.15482 12.0118C1.84226 11.6993 1.66667 11.2754 1.66667 10.8333V3.33332C1.66667 2.8913 1.84226 2.46737 2.15482 2.15481C2.46738 1.84225 2.89131 1.66666 3.33333 1.66666H10.8333C11.2754 1.66666 11.6993 1.84225 12.0118 2.15481C12.3244 2.46737 12.5 2.8913 12.5 3.33332V4.16666M9.16667 7.49999H16.6667C17.5871 7.49999 18.3333 8.24618 18.3333 9.16666V16.6667C18.3333 17.5871 17.5871 18.3333 16.6667 18.3333H9.16667C8.24619 18.3333 7.5 17.5871 7.5 16.6667V9.16666C7.5 8.24618 8.24619 7.49999 9.16667 7.49999Z&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.66667&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/button&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Important:&lt;/strong&gt; Run this codemod only in directories containing ESLint rule files. It may incorrectly transform other JavaScript files that export functions.&lt;/p&gt;
&lt;p&gt;The codemod supports CommonJS (&lt;code&gt;module.exports = function (context) { ... }&lt;/code&gt;), ES Modules (&lt;code&gt;export default function (context) { ... }&lt;/code&gt;), indirect exports (&lt;code&gt;function rule() {}&lt;/code&gt; and &lt;code&gt;module.exports = rule&lt;/code&gt;), higher-order wrappers such as &lt;code&gt;wrapRule(function (context) { ... })&lt;/code&gt;, and rules created with &lt;code&gt;@typescript-eslint/utils&lt;/code&gt; &lt;code&gt;RuleCreator&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;It performs a comprehensive migration of custom ESLint rules from v8 to v9, including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Removed &lt;code&gt;context&lt;/code&gt; methods&lt;/strong&gt; — migrates calls to &lt;code&gt;sourceCode&lt;/code&gt; equivalents (for example, &lt;code&gt;context.getSource()&lt;/code&gt; → &lt;code&gt;sourceCode.getText()&lt;/code&gt;), including methods that moved with different signatures such as &lt;code&gt;getScope()&lt;/code&gt;, &lt;code&gt;getAncestors()&lt;/code&gt;, &lt;code&gt;getDeclaredVariables()&lt;/code&gt;, and &lt;code&gt;markVariableAsUsed()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;context&lt;/code&gt; methods becoming properties&lt;/strong&gt; — migrates &lt;code&gt;getSourceCode()&lt;/code&gt;, &lt;code&gt;getFilename()&lt;/code&gt;, &lt;code&gt;getPhysicalFilename()&lt;/code&gt;, and &lt;code&gt;getCwd()&lt;/code&gt; to their property equivalents with compatibility fallbacks&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Removed &lt;code&gt;context.getComments()&lt;/code&gt;&lt;/strong&gt; — converts node-specific calls to &lt;code&gt;getCommentsBefore&lt;/code&gt; / &lt;code&gt;getCommentsInside&lt;/code&gt; / &lt;code&gt;getCommentsAfter(node)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Removed &lt;code&gt;CodePath#currentSegments&lt;/code&gt;&lt;/strong&gt; — adds code path tracking logic (verify the result matches your rule’s needs)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Function-style rules are no longer supported&lt;/strong&gt; — converts to the object format with &lt;code&gt;meta&lt;/code&gt; and &lt;code&gt;create&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The codemod also moves &lt;code&gt;module.exports.schema&lt;/code&gt; into &lt;code&gt;meta&lt;/code&gt;, converts old-style &lt;code&gt;context.report(node, message)&lt;/code&gt; calls to object format, detects fixable rules, and adds &lt;code&gt;fixable: &amp;quot;code&amp;quot;&lt;/code&gt; to &lt;code&gt;meta&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;It does &lt;strong&gt;not&lt;/strong&gt; cover &lt;code&gt;context.parserOptions&lt;/code&gt; and &lt;code&gt;context.parserPath&lt;/code&gt;, because those properties are not removed until ESLint v10.0.0. Prefer &lt;code&gt;context.languageOptions&lt;/code&gt; (and &lt;code&gt;context.languageOptions.parser&lt;/code&gt; when you need the parser) instead.&lt;/p&gt;
&lt;p&gt;Not every change can be fully automated. After running the codemod:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Review TODO comments.&lt;/strong&gt; Search for &lt;code&gt;TODO&lt;/code&gt; in your migrated files. If a rule uses &lt;code&gt;context.options&lt;/code&gt;, the codemod may leave a placeholder like &lt;code&gt;schema: [] // TODO: Define schema - this rule uses context.options&lt;/code&gt; that you need to replace with a valid JSON schema.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Review comment method changes.&lt;/strong&gt; &lt;code&gt;getCommentsBefore()&lt;/code&gt;, &lt;code&gt;getCommentsInside()&lt;/code&gt;, and &lt;code&gt;getCommentsAfter()&lt;/code&gt; require a &lt;code&gt;node&lt;/code&gt; argument, and no-argument &lt;code&gt;context.getComments()&lt;/code&gt; calls should use &lt;code&gt;sourceCode.getAllComments()&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Review skipped higher-order wrappers.&lt;/strong&gt; If a wrapper passes configuration as the second argument (for example, &lt;code&gt;wrapRule(rule, config)&lt;/code&gt;), confirm whether any manual migration is needed.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Test your custom rules&lt;/strong&gt; by running your rule test suite (for example, &lt;code&gt;npm test&lt;/code&gt;).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Learn more on &lt;a href=&quot;https://app.codemod.com/registry/@eslint/v8-to-v9-custom-rules&quot;&gt;&lt;code&gt;@eslint/v8-to-v9-custom-rules&lt;/code&gt;’s registry page&lt;/a&gt;. For the full list of API changes and how to adopt them manually, see the &lt;a href=&quot;https://eslint.org/docs/latest/use/migrate-to-9.0.0&quot;&gt;ESLint v9 migration guide&lt;/a&gt; and the &lt;a href=&quot;https://eslint.org/blog/2023/09/preparing-custom-rules-eslint-v9/&quot;&gt;blog post for v9 custom rules&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;eslint-v9-to-v10-migration&quot; tabindex=&quot;-1&quot;&gt;ESLint v9 to v10 migration&lt;/h2&gt;
&lt;p&gt;Upgrade your ESLint project from v9 to v10 with the following codemod:&lt;/p&gt;

&lt;div class=&quot;code-wrapper&quot;&gt;
    &lt;pre class=&quot;language-shell line-numbers-mode&quot;&gt;&lt;code class=&quot;language-shell&quot;&gt;npx codemod @eslint/v9-to-v10
&lt;/code&gt;&lt;div class=&quot;line-numbers-wrapper&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;line-number&quot;&gt;1&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;/pre&gt;
    &lt;button class=&quot;copy-btn&quot; aria-labelledby=&quot;copy-button-label&quot;&gt;
        &lt;span hidden=&quot;&quot; id=&quot;copy-button-label&quot;&gt;Copy code to clipboard&lt;/span&gt;
        &lt;svg width=&quot;20&quot; height=&quot;20&quot; viewBox=&quot;0 0 20 20&quot; role=&quot;img&quot; aria-label=&quot;copy&quot; fill=&quot;none&quot; focusable=&quot;false&quot;&gt;
            &lt;path d=&quot;M4.16667 12.5H3.33333C2.89131 12.5 2.46738 12.3244 2.15482 12.0118C1.84226 11.6993 1.66667 11.2754 1.66667 10.8333V3.33332C1.66667 2.8913 1.84226 2.46737 2.15482 2.15481C2.46738 1.84225 2.89131 1.66666 3.33333 1.66666H10.8333C11.2754 1.66666 11.6993 1.84225 12.0118 2.15481C12.3244 2.46737 12.5 2.8913 12.5 3.33332V4.16666M9.16667 7.49999H16.6667C17.5871 7.49999 18.3333 8.24618 18.3333 9.16666V16.6667C18.3333 17.5871 17.5871 18.3333 16.6667 18.3333H9.16667C8.24619 18.3333 7.5 17.5871 7.5 16.6667V9.16666C7.5 8.24618 8.24619 7.49999 9.16667 7.49999Z&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.66667&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/button&gt;
&lt;/div&gt;
&lt;p&gt;This recipe includes four individual codemods, each of which can also be run independently:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;@eslint/v9-to-v10-config&lt;/code&gt;: Remove legacy env vars and CLI flags&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@eslint/v9-to-v10-custom-rules&lt;/code&gt;: Replace removed context and SourceCode methods&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@eslint/v9-to-v10-ruletester&lt;/code&gt;: Cleanup RuleTester test cases&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@eslint/v9-to-v10-linter-api&lt;/code&gt;: Fix Linter/ESLint API usage&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Check out &lt;a href=&quot;https://codemod.link/eslint&quot;&gt;Codemod Registry&lt;/a&gt; to learn more about this recipe and its codemods. For more details about what’s new in v10 and how to adopt the new features, refer to the &lt;a href=&quot;https://eslint.org/docs/latest/use/migrate-to-10.0.0&quot;&gt;official ESLint upgrade guide&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;conclusion&quot; tabindex=&quot;-1&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Upgrading across major ESLint versions has often meant carefully translating configs, custom rules, and related APIs by hand. With this partnership, official Codemod workflows give you a faster starting point for the v8 to v9 and v9 to v10 migrations, while still leaving room for the manual review steps that complex projects need.&lt;/p&gt;
&lt;p&gt;You can try the codemods today through the &lt;a href=&quot;https://codemod.link/eslint&quot;&gt;Codemod Registry&lt;/a&gt;, and find the source in &lt;a href=&quot;https://github.com/eslint/codemods&quot;&gt;eslint/codemods&lt;/a&gt;. If you run into a gap, open an issue or contribute a new codemod. For questions about the migrations themselves, see the &lt;a href=&quot;https://eslint.org/docs/latest/use/migrate-to-9.0.0&quot;&gt;v9&lt;/a&gt; and &lt;a href=&quot;https://eslint.org/docs/latest/use/migrate-to-10.0.0&quot;&gt;v10&lt;/a&gt; upgrade guides, or stop by &lt;a href=&quot;https://eslint.org/chat&quot;&gt;Discord&lt;/a&gt; to talk with the team.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>ESLint v9.39.5 released</title>
    <link href="https://eslint.org/blog/2026/07/eslint-v9.39.5-released/"/>
    <updated>2026-07-10T00:00:00Z</updated>
    <id>https://eslint.org/blog/2026/07/eslint-v9.39.5-released/</id>
    <content type="html">&lt;h2 id=&quot;highlights&quot; tabindex=&quot;-1&quot;&gt;Highlights&lt;/h2&gt;
&lt;p&gt;This release backports a fix originally released in &lt;a href=&quot;https://eslint.org/blog/2026/05/eslint-v10.3.0-released/&quot;&gt;v10.3.0&lt;/a&gt; that prevents ESLint from crashing in host environments where &lt;a href=&quot;https://nodejs.org/api/modules.html#requirecache&quot;&gt;&lt;code&gt;require.cache&lt;/code&gt;&lt;/a&gt; is unavailable, such as Yarn Plug’n’Play.&lt;/p&gt;
&lt;h2 id=&quot;bug-fixes&quot; tabindex=&quot;-1&quot;&gt;Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/253be16a79a4c78eec4e0eb461b574d60dbf6b11&quot;&gt;&lt;code&gt;253be16&lt;/code&gt;&lt;/a&gt; fix: handle unavailable require cache (backport of &lt;a href=&quot;https://github.com/eslint/eslint/issues/20812&quot;&gt;#20812&lt;/a&gt; to v9.x) (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21065&quot;&gt;#21065&lt;/a&gt;) (Eric)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;documentation&quot; tabindex=&quot;-1&quot;&gt;Documentation&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/74930edd1ce0d246819edc72705101ec271da50b&quot;&gt;&lt;code&gt;74930ed&lt;/code&gt;&lt;/a&gt; docs: switch build to Node.js 24 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20894&quot;&gt;#20894&lt;/a&gt;) (Milos Djermanovic)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/eaec8bb6b1ca4b36985ee0222c457d4730d47a20&quot;&gt;&lt;code&gt;eaec8bb&lt;/code&gt;&lt;/a&gt; docs: Add ESLint v9.x EOL notice (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20828&quot;&gt;#20828&lt;/a&gt;) (Milos Djermanovic)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;chores&quot; tabindex=&quot;-1&quot;&gt;Chores&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/458205f7d7a4769f32bec006eecc45c6a71be16a&quot;&gt;&lt;code&gt;458205f&lt;/code&gt;&lt;/a&gt; chore: update &lt;code&gt;@eslint/eslintrc&lt;/code&gt; and &lt;code&gt;@eslint/js&lt;/code&gt; for v9.39.5 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21077&quot;&gt;#21077&lt;/a&gt;) (Francesco Trotta)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/202117be549534715d687f988e17f29e1dcd0622&quot;&gt;&lt;code&gt;202117b&lt;/code&gt;&lt;/a&gt; chore: package.json update for @eslint/js release (Jenkins)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/d9eb6edcc93c1319ff1d2bb9aeb6d7d47bd73a79&quot;&gt;&lt;code&gt;d9eb6ed&lt;/code&gt;&lt;/a&gt; test: disable warning for &lt;code&gt;vm.constants.USE_MAIN_CONTEXT_DEFAULT_LOADER&lt;/code&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21074&quot;&gt;#21074&lt;/a&gt;) (Francesco Trotta)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/7b431a7b19c345b8db56040b1888a3b531c3e64c&quot;&gt;&lt;code&gt;7b431a7&lt;/code&gt;&lt;/a&gt; chore: override &lt;code&gt;re2&lt;/code&gt; dependency for &lt;code&gt;@metascraper/helpers&lt;/code&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21068&quot;&gt;#21068&lt;/a&gt;) (Milos Djermanovic)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/daf77911de33be163503c6568ccb159741f4b018&quot;&gt;&lt;code&gt;daf7791&lt;/code&gt;&lt;/a&gt; chore: pin fflate@0.8.2 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20895&quot;&gt;#20895&lt;/a&gt;) (Milos Djermanovic)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/daee8ba3082afbc94d3b69ddc129d4dc664716f2&quot;&gt;&lt;code&gt;daee8ba&lt;/code&gt;&lt;/a&gt; ci: use pnpm in &lt;code&gt;eslint-flat-config-utils&lt;/code&gt; type integration test (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20829&quot;&gt;#20829&lt;/a&gt;) (Milos Djermanovic)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/116d4bec7c0ddaeaa75f92fb1271a4ab70d24ce3&quot;&gt;&lt;code&gt;116d4be&lt;/code&gt;&lt;/a&gt; ci: unpin Node.js 25.x in CI (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20619&quot;&gt;#20619&lt;/a&gt;) (Copilot)&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  
  <entry>
    <title>ESLint v10.7.0 released</title>
    <link href="https://eslint.org/blog/2026/07/eslint-v10.7.0-released/"/>
    <updated>2026-07-10T00:00:00Z</updated>
    <id>https://eslint.org/blog/2026/07/eslint-v10.7.0-released/</id>
    <content type="html">&lt;h2 id=&quot;highlights&quot; tabindex=&quot;-1&quot;&gt;Highlights&lt;/h2&gt;
&lt;h3 id=&quot;new-option-checkconstructorcallcallbacks-in-max-nested-callbacks&quot; tabindex=&quot;-1&quot;&gt;New option &lt;code&gt;checkConstructorCallCallbacks&lt;/code&gt; in &lt;code&gt;max-nested-callbacks&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;The &lt;a href=&quot;https://eslint.org/docs/latest/rules/max-nested-callbacks&quot;&gt;&lt;code&gt;max-nested-callbacks&lt;/code&gt;&lt;/a&gt; rule now supports a &lt;code&gt;checkConstructorCallCallbacks&lt;/code&gt; option.
When enabled, the rule also counts callback functions passed to constructor calls with &lt;code&gt;new&lt;/code&gt;, such as &lt;code&gt;new Promise((resolve) =&amp;gt; {})&lt;/code&gt;, when calculating nesting depth.&lt;/p&gt;
&lt;p&gt;For example, with &lt;code&gt;{ &amp;quot;max&amp;quot;: 1, &amp;quot;checkConstructorCallCallbacks&amp;quot;: true }&lt;/code&gt;, the rule reports the following code as exceeding the allowed callback nesting depth:&lt;/p&gt;

&lt;div class=&quot;code-wrapper&quot;&gt;
    &lt;pre class=&quot;language-js line-numbers-mode&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token function&quot;&gt;run&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Promise&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;resolve&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;resolve&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;div class=&quot;line-numbers-wrapper&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;line-number&quot;&gt;1&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;2&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;3&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;/pre&gt;
    &lt;button class=&quot;copy-btn&quot; aria-labelledby=&quot;copy-button-label&quot;&gt;
        &lt;span hidden=&quot;&quot; id=&quot;copy-button-label&quot;&gt;Copy code to clipboard&lt;/span&gt;
        &lt;svg width=&quot;20&quot; height=&quot;20&quot; viewBox=&quot;0 0 20 20&quot; role=&quot;img&quot; aria-label=&quot;copy&quot; fill=&quot;none&quot; focusable=&quot;false&quot;&gt;
            &lt;path d=&quot;M4.16667 12.5H3.33333C2.89131 12.5 2.46738 12.3244 2.15482 12.0118C1.84226 11.6993 1.66667 11.2754 1.66667 10.8333V3.33332C1.66667 2.8913 1.84226 2.46737 2.15482 2.15481C2.46738 1.84225 2.89131 1.66666 3.33333 1.66666H10.8333C11.2754 1.66666 11.6993 1.84225 12.0118 2.15481C12.3244 2.46737 12.5 2.8913 12.5 3.33332V4.16666M9.16667 7.49999H16.6667C17.5871 7.49999 18.3333 8.24618 18.3333 9.16666V16.6667C18.3333 17.5871 17.5871 18.3333 16.6667 18.3333H9.16667C8.24619 18.3333 7.5 17.5871 7.5 16.6667V9.16666C7.5 8.24618 8.24619 7.49999 9.16667 7.49999Z&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.66667&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/button&gt;
&lt;/div&gt;
&lt;h3 id=&quot;new-option-errorclassnames-in-preserve-caught-error&quot; tabindex=&quot;-1&quot;&gt;New option &lt;code&gt;errorClassNames&lt;/code&gt; in &lt;code&gt;preserve-caught-error&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;The &lt;a href=&quot;https://eslint.org/docs/latest/rules/preserve-caught-error&quot;&gt;&lt;code&gt;preserve-caught-error&lt;/code&gt;&lt;/a&gt; rule now supports an &lt;code&gt;errorClassNames&lt;/code&gt; option.
This option lets you specify additional custom error class names that must preserve the original caught error by passing it as a cause.&lt;/p&gt;
&lt;p&gt;For example, with &lt;code&gt;{ &amp;quot;errorClassNames&amp;quot;: [&amp;quot;MyError&amp;quot;] }&lt;/code&gt;, the following code is reported because the thrown &lt;code&gt;MyError&lt;/code&gt; does not include the original error as a cause, just like built-in error types must:&lt;/p&gt;

&lt;div class=&quot;code-wrapper&quot;&gt;
    &lt;pre class=&quot;language-js line-numbers-mode&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;try&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;doSomething&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;catch&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;error&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;MyError&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;something went wrong&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;div class=&quot;line-numbers-wrapper&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;line-number&quot;&gt;1&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;2&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;3&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;4&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;line-number&quot;&gt;5&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;/pre&gt;
    &lt;button class=&quot;copy-btn&quot; aria-labelledby=&quot;copy-button-label&quot;&gt;
        &lt;span hidden=&quot;&quot; id=&quot;copy-button-label&quot;&gt;Copy code to clipboard&lt;/span&gt;
        &lt;svg width=&quot;20&quot; height=&quot;20&quot; viewBox=&quot;0 0 20 20&quot; role=&quot;img&quot; aria-label=&quot;copy&quot; fill=&quot;none&quot; focusable=&quot;false&quot;&gt;
            &lt;path d=&quot;M4.16667 12.5H3.33333C2.89131 12.5 2.46738 12.3244 2.15482 12.0118C1.84226 11.6993 1.66667 11.2754 1.66667 10.8333V3.33332C1.66667 2.8913 1.84226 2.46737 2.15482 2.15481C2.46738 1.84225 2.89131 1.66666 3.33333 1.66666H10.8333C11.2754 1.66666 11.6993 1.84225 12.0118 2.15481C12.3244 2.46737 12.5 2.8913 12.5 3.33332V4.16666M9.16667 7.49999H16.6667C17.5871 7.49999 18.3333 8.24618 18.3333 9.16666V16.6667C18.3333 17.5871 17.5871 18.3333 16.6667 18.3333H9.16667C8.24619 18.3333 7.5 17.5871 7.5 16.6667V9.16666C7.5 8.24618 8.24619 7.49999 9.16667 7.49999Z&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;1.66667&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;/path&gt;
        &lt;/svg&gt;
    &lt;/button&gt;
&lt;/div&gt;
&lt;h3 id=&quot;suggestions-for-no-compare-neg-zero&quot; tabindex=&quot;-1&quot;&gt;Suggestions for &lt;code&gt;no-compare-neg-zero&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;The &lt;a href=&quot;https://eslint.org/docs/latest/rules/no-compare-neg-zero&quot;&gt;&lt;code&gt;no-compare-neg-zero&lt;/code&gt;&lt;/a&gt; rule now supports suggestions. Where appropriate, it suggests replacing &lt;code&gt;-0&lt;/code&gt; with &lt;code&gt;0&lt;/code&gt; or using &lt;code&gt;Object.is()&lt;/code&gt; instead of operators such as &lt;code&gt;===&lt;/code&gt; or &lt;code&gt;!==&lt;/code&gt;.
For example, for an expression such as &lt;code&gt;x === -0&lt;/code&gt;, the rule suggests &lt;code&gt;x === 0&lt;/code&gt; to preserve the existing comparison behavior, and &lt;code&gt;Object.is(x, -0)&lt;/code&gt; to distinguish &lt;code&gt;-0&lt;/code&gt; from &lt;code&gt;+0&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;features&quot; tabindex=&quot;-1&quot;&gt;Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/cf2a9bf2d982642f760370c15f1196f4658f4e27&quot;&gt;&lt;code&gt;cf2a9bf&lt;/code&gt;&lt;/a&gt; feat: add errorClassNames option to &lt;a href=&quot;https://eslint.org/docs/rules/preserve-caught-error&quot;&gt;preserve-caught-error&lt;/a&gt; rule (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21032&quot;&gt;#21032&lt;/a&gt;) (sethamus)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/f8b873aae53610b80b5c1005606716e05ed3b91f&quot;&gt;&lt;code&gt;f8b873a&lt;/code&gt;&lt;/a&gt; feat: &lt;a href=&quot;https://eslint.org/docs/rules/max-nested-callbacks&quot;&gt;max-nested-callbacks&lt;/a&gt; option for constructor callbacks (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21063&quot;&gt;#21063&lt;/a&gt;) (fnx)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/557fde8bc633d26ea4fe287d4483f287e8e6080f&quot;&gt;&lt;code&gt;557fde8&lt;/code&gt;&lt;/a&gt; feat: support computed &lt;code&gt;Number.parseInt&lt;/code&gt; member access in &lt;a href=&quot;https://eslint.org/docs/rules/radix&quot;&gt;&lt;code&gt;radix&lt;/code&gt;&lt;/a&gt; rule (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21041&quot;&gt;#21041&lt;/a&gt;) (Pixel)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/0b4a73b65808f5a8fd192f15db2bf5e47002b9f7&quot;&gt;&lt;code&gt;0b4a73b&lt;/code&gt;&lt;/a&gt; feat: add suggestions to &lt;a href=&quot;https://eslint.org/docs/rules/no-compare-neg-zero&quot;&gt;no-compare-neg-zero&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21034&quot;&gt;#21034&lt;/a&gt;) (den$)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/96cdd427db5f26c6403fba92b0f7ae4556c595ec&quot;&gt;&lt;code&gt;96cdd42&lt;/code&gt;&lt;/a&gt; feat: report invalid signed numeric &lt;a href=&quot;https://eslint.org/docs/rules/radix&quot;&gt;radix&lt;/a&gt; values in &lt;a href=&quot;https://eslint.org/docs/rules/radix&quot;&gt;&lt;code&gt;radix&lt;/code&gt;&lt;/a&gt; rule (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21030&quot;&gt;#21030&lt;/a&gt;) (Pixel)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;bug-fixes&quot; tabindex=&quot;-1&quot;&gt;Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/3e7bf15e69e6d3a2c8832356bcc2e9903cc4eede&quot;&gt;&lt;code&gt;3e7bf15&lt;/code&gt;&lt;/a&gt; fix: apply &lt;code&gt;ignoreClassesWithImplements&lt;/code&gt; to class expressions (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21069&quot;&gt;#21069&lt;/a&gt;) (Pixel)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/0d7d70cf013ec5bf1e4f5a0fcf7128bdf059b2d4&quot;&gt;&lt;code&gt;0d7d70c&lt;/code&gt;&lt;/a&gt; fix: insert cause outside wrapping parens in &lt;a href=&quot;https://eslint.org/docs/rules/preserve-caught-error&quot;&gt;preserve-caught-error&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21062&quot;&gt;#21062&lt;/a&gt;) (Mahin Anowar)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/75ec753226010867270787b412f3dae412e421e6&quot;&gt;&lt;code&gt;75ec753&lt;/code&gt;&lt;/a&gt; fix: handle static template literals in &lt;a href=&quot;https://eslint.org/docs/rules/eqeqeq&quot;&gt;&lt;code&gt;eqeqeq&lt;/code&gt;&lt;/a&gt; rule (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21058&quot;&gt;#21058&lt;/a&gt;) (Pixel)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/b717a22e2408389a2ad40af66543e46390669eb6&quot;&gt;&lt;code&gt;b717a22&lt;/code&gt;&lt;/a&gt; fix: prevent &lt;a href=&quot;https://eslint.org/docs/rules/eqeqeq&quot;&gt;&lt;code&gt;eqeqeq&lt;/code&gt;&lt;/a&gt; null option from reporting non-equality operators (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21057&quot;&gt;#21057&lt;/a&gt;) (Pixel)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/e35b05f1961dcd691611bd68b6ff8a87072d6f76&quot;&gt;&lt;code&gt;e35b05f&lt;/code&gt;&lt;/a&gt; fix: avoid &lt;a href=&quot;https://eslint.org/docs/rules/no-invalid-regexp&quot;&gt;&lt;code&gt;no-invalid-regexp&lt;/code&gt;&lt;/a&gt; false positive for shadowed RegExp (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21051&quot;&gt;#21051&lt;/a&gt;) (Pixel)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/a3172b69c7db63ea0321355543e3f527c7d8b76a&quot;&gt;&lt;code&gt;a3172b6&lt;/code&gt;&lt;/a&gt; fix: avoid &lt;a href=&quot;https://eslint.org/docs/rules/no-control-regex&quot;&gt;&lt;code&gt;no-control-regex&lt;/code&gt;&lt;/a&gt; false positive for shadowed RegExp (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21050&quot;&gt;#21050&lt;/a&gt;) (Pixel)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/d1f637eca27e523d613991c6bea5b8726b810e4c&quot;&gt;&lt;code&gt;d1f637e&lt;/code&gt;&lt;/a&gt; fix: parenthesize sequence expression operands in &lt;a href=&quot;https://eslint.org/docs/rules/no-implicit-coercion&quot;&gt;no-implicit-coercion&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21045&quot;&gt;#21045&lt;/a&gt;) (spokodev)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/8859bafb018e2b23b5110d52e491b69b94ad890a&quot;&gt;&lt;code&gt;8859baf&lt;/code&gt;&lt;/a&gt; fix: avoid &lt;a href=&quot;https://eslint.org/docs/rules/prefer-numeric-literals&quot;&gt;prefer-numeric-literals&lt;/a&gt; false positive for shadowed globals (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21047&quot;&gt;#21047&lt;/a&gt;) (한국)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/a9e5961050676ef29dba9649dfcd7233d21760c7&quot;&gt;&lt;code&gt;a9e5961&lt;/code&gt;&lt;/a&gt; fix: &lt;a href=&quot;https://eslint.org/docs/rules/use-isnan&quot;&gt;use-isnan&lt;/a&gt; false positive on shadowed NaN/Number (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20958&quot;&gt;#20958&lt;/a&gt;) (sethamus)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/8a240a76108f30f2476e61a925e4d32d378cce5e&quot;&gt;&lt;code&gt;8a240a7&lt;/code&gt;&lt;/a&gt; fix: avoid false positives in &lt;a href=&quot;https://eslint.org/docs/rules/radix&quot;&gt;&lt;code&gt;radix&lt;/code&gt;&lt;/a&gt; rule for spread arguments (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21044&quot;&gt;#21044&lt;/a&gt;) (Pixel)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;documentation&quot; tabindex=&quot;-1&quot;&gt;Documentation&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/c30d80801ca561bdf65c6c3eba4ee57dced278cf&quot;&gt;&lt;code&gt;c30d808&lt;/code&gt;&lt;/a&gt; docs: Update README (GitHub Actions Bot)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/5139800b23e77fdd1a76664e1b36f478942eae55&quot;&gt;&lt;code&gt;5139800&lt;/code&gt;&lt;/a&gt; docs: document ESLint migration codemods in v9 and v10 guides (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20980&quot;&gt;#20980&lt;/a&gt;) (Alex Bit)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/04174cbfaac1f9555400b5332d69056e6aab9cc6&quot;&gt;&lt;code&gt;04174cb&lt;/code&gt;&lt;/a&gt; docs: Update README (GitHub Actions Bot)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/026e1304080512bcddfd2af3557fff86474ff949&quot;&gt;&lt;code&gt;026e130&lt;/code&gt;&lt;/a&gt; docs: update semver policy for bug fixes (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21048&quot;&gt;#21048&lt;/a&gt;) (Milos Djermanovic)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/9d42fefb0e05ecd0b256c2ebed479fc868862f0c&quot;&gt;&lt;code&gt;9d42fef&lt;/code&gt;&lt;/a&gt; docs: Update README (GitHub Actions Bot)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/b23015955c8d6e6516076190730f538c86927f26&quot;&gt;&lt;code&gt;b230159&lt;/code&gt;&lt;/a&gt; docs: Update README (GitHub Actions Bot)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/0129972ba122e95bece6040fda44d20f6799246a&quot;&gt;&lt;code&gt;0129972&lt;/code&gt;&lt;/a&gt; docs: correct &lt;code&gt;**/.js&lt;/code&gt; glob to &lt;code&gt;**/*.js&lt;/code&gt; in config files guide (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21036&quot;&gt;#21036&lt;/a&gt;) (EduardF1)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;chores&quot; tabindex=&quot;-1&quot;&gt;Chores&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/948937986f2aa3cccb27a4c80694a85e5b0a5f64&quot;&gt;&lt;code&gt;9489379&lt;/code&gt;&lt;/a&gt; chore: update dependency @eslint/eslintrc to ^3.3.6 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21076&quot;&gt;#21076&lt;/a&gt;) (renovate[bot])&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/81a4774a928211bd0c01a06a1517736ece594522&quot;&gt;&lt;code&gt;81a4774&lt;/code&gt;&lt;/a&gt; chore: updates for v9.39.5 release (Jenkins)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/983541491393323d17717683f6a2e6dbef4bc3f4&quot;&gt;&lt;code&gt;9835414&lt;/code&gt;&lt;/a&gt; chore: enable &lt;code&gt;$ExpectType&lt;/code&gt; annotations in all TypeScript files (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21071&quot;&gt;#21071&lt;/a&gt;) (Francesco Trotta)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/72adf6bd214c142b38aabb4b8f6f908079c5301a&quot;&gt;&lt;code&gt;72adf6b&lt;/code&gt;&lt;/a&gt; chore: restrict &lt;code&gt;markdownlint-cli2&lt;/code&gt; updates in renovate (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21067&quot;&gt;#21067&lt;/a&gt;) (lumir)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/833ec10fd702644e94334edd3cd2aa313174a958&quot;&gt;&lt;code&gt;833ec10&lt;/code&gt;&lt;/a&gt; chore: update dependency prettier to v3.9.4 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21061&quot;&gt;#21061&lt;/a&gt;) (renovate[bot])&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/7ea106ddcb6af7db8f36d62a28dbaba94d33598e&quot;&gt;&lt;code&gt;7ea106d&lt;/code&gt;&lt;/a&gt; chore: update ecosystem plugins (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21059&quot;&gt;#21059&lt;/a&gt;) (ESLint Bot)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/8fb550e7c257fbdc4108fc8e63db43c1d914d472&quot;&gt;&lt;code&gt;8fb550e&lt;/code&gt;&lt;/a&gt; chore: add prettier update commit to &lt;code&gt;.git-blame-ignore-revs&lt;/code&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21056&quot;&gt;#21056&lt;/a&gt;) (lumir)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/e4e11668ead6b950328c71e894563a13ef72bf84&quot;&gt;&lt;code&gt;e4e1166&lt;/code&gt;&lt;/a&gt; chore: update dependency prettier to v3.9.1 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21055&quot;&gt;#21055&lt;/a&gt;) (renovate[bot])&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/0493f53f3fcec4ed69a1808dffa153dcff1380d3&quot;&gt;&lt;code&gt;0493f53&lt;/code&gt;&lt;/a&gt; chore: update prettier to v3.9.0 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21054&quot;&gt;#21054&lt;/a&gt;) (Pixel)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/1056a996c657b377dc16a58c28890d2940394408&quot;&gt;&lt;code&gt;1056a99&lt;/code&gt;&lt;/a&gt; chore: update dependency prettier to v3.8.5 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21049&quot;&gt;#21049&lt;/a&gt;) (renovate[bot])&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/4d4155df4a21d711e8dd21a467de085e770bad35&quot;&gt;&lt;code&gt;4d4155d&lt;/code&gt;&lt;/a&gt; ci: run ecosystem tests on pull requests (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21027&quot;&gt;#21027&lt;/a&gt;) (sethamus)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/993539fd45d3d01aad3fbc13963e2245fdf7ee0d&quot;&gt;&lt;code&gt;993539f&lt;/code&gt;&lt;/a&gt; chore: update dependency @eslint/json to ^2.0.1 (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21042&quot;&gt;#21042&lt;/a&gt;) (renovate[bot])&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/53f8b69c15af7398c989071ee4788b88edd48bdd&quot;&gt;&lt;code&gt;53f8b69&lt;/code&gt;&lt;/a&gt; test: add error locations to &lt;a href=&quot;https://eslint.org/docs/rules/no-constant-binary-expression&quot;&gt;&lt;code&gt;no-constant-binary-expression&lt;/code&gt;&lt;/a&gt; (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21039&quot;&gt;#21039&lt;/a&gt;) (lumir)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/5ab71d52f9d860df04e626fcd819a36257f21f9e&quot;&gt;&lt;code&gt;5ab71d5&lt;/code&gt;&lt;/a&gt; refactor: clean up &lt;a href=&quot;https://eslint.org/docs/rules/radix&quot;&gt;radix&lt;/a&gt; rule internals (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21015&quot;&gt;#21015&lt;/a&gt;) (Pixel)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/a80a9a461478838930c5545f840473840b26b0e6&quot;&gt;&lt;code&gt;a80a9a4&lt;/code&gt;&lt;/a&gt; chore: update ecosystem plugins (&lt;a href=&quot;https://github.com/eslint/eslint/issues/21035&quot;&gt;#21035&lt;/a&gt;) (ESLint Bot)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/eslint/eslint/commit/7c9a02933cf1c231237babb8a7a32150ab72e263&quot;&gt;&lt;code&gt;7c9a029&lt;/code&gt;&lt;/a&gt; ci: add Node.js 26 to CI (&lt;a href=&quot;https://github.com/eslint/eslint/issues/20847&quot;&gt;#20847&lt;/a&gt;) (lumir)&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  
  <entry>
    <title>CodeRabbit becomes ESLint gold sponsor</title>
    <link href="https://eslint.org/blog/2026/07/coderabbit-gold-sponsor-eslint/"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <id>https://eslint.org/blog/2026/07/coderabbit-gold-sponsor-eslint/</id>
    <content type="html">&lt;p&gt;&lt;img src=&quot;https://eslint.org/assets/images/blog-covers/sponsorship-coderabbit.png&quot; alt=&quot;CodeRabbit Donates to ESLint&quot; /&gt;&lt;/p&gt;
&lt;p&gt;We are happy to share that &lt;a href=&quot;https://coderabbit.ai/&quot;&gt;CodeRabbit&lt;/a&gt; has become an ESLint gold sponsor, donating $1,000 each month for the ongoing maintenance and development of ESLint! CodeRabbit is an AI-powered code review platform that provides fast, context-aware feedback on pull requests. It helps development teams automate and accelerate the code review process, catch bugs and logic errors early, and improve code quality and velocity.&lt;/p&gt;
&lt;p&gt;Here’s what Santosh Yadav, Principal Developer Advocate at CodeRabbit, had to say about ESLint:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“We love Open Source and ESLint is critical for the ecosystem. We want to make Open Source more sustainable for maintainers. ESLint is shipped as part of the CodeRabbit tools, and we love to support our dependencies.”&lt;/p&gt;
&lt;p&gt;– Santosh Yadav, Principal Developer Advocate, CodeRabbit&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;ESLint is extremely grateful for the support of the CodeRabbit team. Donations from sponsors like CodeRabbit allow ESLint to pay contributors for ongoing maintenance and development, helping to make the open-source ecosystem more sustainable for everyone.&lt;/p&gt;
</content>
  </entry>
</feed>
