| 
1 |  | ----  | 
2 |  | -title: Roadmap  | 
3 |  | ----  | 
 | 1 | +# Milestone 2.0  | 
4 | 2 | 
 
  | 
5 |  | -## Milestone 2.0  | 
6 |  | - | 
7 |  | -### System Requirements  | 
 | 3 | +## System Requirements  | 
8 | 4 | 
 
  | 
9 | 5 | Minimum supported versions:  | 
10 | 6 | 
 
  | 
11 | 7 | - [x] Node.js: 20.19.0  | 
12 |  | -- [x] ESLint: 9.24.0  | 
13 |  | -- [x] TypeScript: 4.9.5  | 
 | 8 | +- [x] ESLint: 9.36.0  | 
 | 9 | +- [x] TypeScript: 5.9.2  | 
14 | 10 | 
 
  | 
15 |  | -### Package Distribution  | 
 | 11 | +## Package Distribution  | 
16 | 12 | 
 
  | 
17 | 13 | - [x] Publish ESM-Only packages  | 
18 | 14 | 
 
  | 
19 |  | -### Plugins (with ecological niche explanation)  | 
 | 15 | +## Plugins (with ecological niche explanation)  | 
20 | 16 | 
 
  | 
21 | 17 | - [x] `eslint-plugin-react-x` - X Rules (renderer-agnostic, compatible with x-platform)  | 
22 | 18 | - [x] `eslint-plugin-react-dom` - DOM Specific rules for React DOM  | 
23 | 19 | - [x] `eslint-plugin-react-web-api` - Rules for interacting with Web APIs  | 
24 |  | -- [x] `eslint-plugin-react-hooks` - Extra Hooks rules for React  | 
 | 20 | +- [x] `eslint-plugin-react-hooks-extra` - Extra Hooks rules for React  | 
25 | 21 | - [x] `eslint-plugin-react-naming-convention` - Naming convention rules designed for React projects  | 
26 | 22 | - ... (Free to combine with other plugins from the community)  | 
27 | 23 | 
 
  | 
28 |  | -### Add codemod feature to rules that can be transformed (using auto-fix) safely  | 
 | 24 | +## Add codemod feature to rules that can be transformed (using auto-fix) safely  | 
29 | 25 | 
 
  | 
30 |  | -- [x] `no-component-did-update`  | 
31 |  | -- [x] `no-component-will-receive-props`  | 
32 |  | -- [x] `no-component-will-update`  | 
33 |  | -- [x] `no-context-provider`  | 
34 |  | -- [x] `no-forward-ref`  | 
35 |  | -- [x] `no-string-refs`  | 
 | 26 | +- [x] `react-x/no-component-did-update`  | 
 | 27 | +- [x] `react-x/no-component-will-receive-props`  | 
 | 28 | +- [x] `react-x/no-component-will-update`  | 
 | 29 | +- [x] `react-x/no-context-provider`  | 
 | 30 | +- [x] `react-x/no-forward-ref`  | 
 | 31 | +- [x] `react-x/no-string-refs`  | 
36 | 32 | 
 
  | 
37 |  | -### Add auto-fix feature to rules that can be auto-fixed safely  | 
 | 33 | +## Add auto-fix feature to rules that can be auto-fixed safely  | 
38 | 34 | 
 
  | 
39 |  | -- [ ] `function-component-definition`  | 
40 |  | -- [x] `prefer-namespace-import`  | 
 | 35 | +- [x] `react-x/prefer-namespace-import`  | 
 | 36 | +- [x] `react-dom/prefer-namespace-import`  | 
41 | 37 | 
 
  | 
42 |  | -### Add suggestion-fix feature to rules that can be fixed interactively  | 
 | 38 | +## Add suggestion-fix feature to rules that can be fixed interactively  | 
43 | 39 | 
 
  | 
44 |  | -- [x] `dom/no-missing-button-type`  | 
45 |  | -- [x] `dom/no-missing-iframe-sandbox`  | 
46 |  | -- [ ] `dom/no-unsafe-iframe-sandbox`  | 
47 |  | -- [x] `dom/no-unsafe-target-blank`  | 
 | 40 | +- [x] `react-dom/no-missing-button-type`  | 
 | 41 | +- [x] `react-dom/no-missing-iframe-sandbox`  | 
 | 42 | +- [x] `react-dom/no-unsafe-target-blank`  | 
48 | 43 | 
 
  | 
49 |  | -### New Rules  | 
 | 44 | +## New Rules  | 
50 | 45 | 
 
  | 
51 |  | -- [x] `jsx-no-comment-textnodes` - Disallow text nodes with comments in JSX (Replaces `no-comment-textnodes`)  | 
52 |  | -- [x] `no-context-provider` - Replaces usages of `<Context.Provider>` with `<Context>` (React 19)  | 
53 |  | -- [x] `no-forward-ref` - Replaces usages of `forwardRef` with passing `ref` as a prop (React 19)  | 
54 |  | -- [x] `no-use-context` - Replaces usages of `useContext` with `use` (React 19)  | 
55 |  | -- [x] `prefer-namespace-import` - Enforces the use of namespace imports for React (Replaces `prefer-react-namespace-import`)  | 
56 |  | -- [ ] `react-dom/no-unmount-component-at-node` - Replaces usages of `ReactDom.unmountComponentAtNode()` with `root.unmount()` (React 19)  | 
 | 46 | +- [x] `react-x/jsx-no-comment-textnodes` - Disallow text nodes with comments in JSX (Replaces `no-comment-textnodes`)  | 
 | 47 | +- [x] `react-x/no-context-provider` - Replaces usages of `<Context.Provider>` with `<Context>` (React 19)  | 
 | 48 | +- [x] `react-x/no-forward-ref` - Replaces usages of `forwardRef` with passing `ref` as a prop (React 19)  | 
 | 49 | +- [x] `react-x/no-use-context` - Replaces usages of `useContext` with `use` (React 19)  | 
 | 50 | +- [x] `react-x/prefer-namespace-import` - Enforces the use of namespace imports for React (Replaces `prefer-react-namespace-import`)  | 
57 | 51 | - [x] `react-dom/no-hydrate` - Replaces usages of `ReactDom.hydrate()` with `hydrateRoot()` (React 19)  | 
58 | 52 | - [x] `react-dom/no-render` - Replaces usages of `ReactDom.render()` with `createRoot(node).render()` (React 19)  | 
59 | 53 | - [x] `react-dom/no-use-form-state` - Replaces the usages of `useFormState()` to use `useActionState()` (React 19)  | 
60 | 54 | - [x] `react-dom/prefer-namespace-import` - Enforces the use of namespace imports for ReactDOM  | 
61 | 55 | - [x] `naming-convention/context-name` - Enforces context name to be a valid component name with the suffix `Context` (React 19)  | 
62 |  | -- [ ] `function-component-definition` - Enforce the definition of function components ([Rel1cx/eslint-react#739](https://github.com/Rel1cx/eslint-react/issues/739))  | 
63 |  | -- [ ] `no-circular-effect` - Detect circular `set` (and `dispatch`) functions and deps patterns in `useEffect` like Hooks ([Rel1cx/eslint-react#755](https://github.com/Rel1cx/eslint-react/issues/755))  | 
64 |  | - | 
65 |  | -### Removed Rules  | 
66 |  | - | 
67 |  | -- [x] `avoid-shorthand-boolean` - Replaced by `jsx-shorthand-boolean`  | 
68 |  | -- [x] `avoid-shorthand-fragment` - Replaced by `jsx-shorthand-fragment`  | 
69 |  | -- [x] `no-comment-textnodes` - Replaced by `jsx-no-comment-textnodes`  | 
70 |  | -- [x] `prefer-react-namespace-import` - Replaced by `prefer-namespace-import`  | 
71 |  | -- [x] `prefer-shorthand-boolean` - Replaced by `jsx-shorthand-boolean`  | 
72 |  | -- [x] `prefer-shorthand-fragment` - Replaced by `jsx-shorthand-fragment`  | 
73 |  | -- [x] `hooks-extra/no-direct-set-state-in-use-layout-effect` - Merged into `hooks-extra/no-direct-set-state-in-use-effect`  | 
 | 56 | + | 
 | 57 | +## Removed Rules  | 
 | 58 | + | 
 | 59 | +- [x] `react-x/avoid-shorthand-boolean` - Replaced by `jsx-shorthand-boolean`  | 
 | 60 | +- [x] `react-x/avoid-shorthand-fragment` - Replaced by `jsx-shorthand-fragment`  | 
 | 61 | +- [x] `react-x/no-comment-textnodes` - Replaced by `jsx-no-comment-textnodes`  | 
 | 62 | +- [x] `react-x/prefer-react-namespace-import` - Replaced by `prefer-namespace-import`  | 
 | 63 | +- [x] `react-x/prefer-shorthand-boolean` - Replaced by `jsx-shorthand-boolean`  | 
 | 64 | +- [x] `react-x/prefer-shorthand-fragment` - Replaced by `jsx-shorthand-fragment`  | 
 | 65 | +- [x] `react-hooks-extra/no-direct-set-state-in-use-layout-effect` - Merged into `hooks-extra/no-direct-set-state-in-use-effect`  | 
0 commit comments