Skip to content
PluginStats

@ospm/eslint-plugin-react-unhookify weekly downloads statistics

By ospm · npm · ESLint plugins

ESLint plugin to remove React hooks (useMemo, useCallback) and memo HOC for cleaner React code

View on npm Fresh · Oct 31, 2026

@ospm/eslint-plugin-react-unhookify has 29,448 recorded weekly downloads on npm, an increase of 182% over the past 30 days, ranking #828 of 2,710 tracked listings.

Weekly downloads
29,448
Official API · Oct 31, 2026
7-day growth
+64.5%
+11.5K weekly downloads
30-day growth
+182%
+19K weekly downloads
90-day growth
+223%
+20.3K weekly downloads
Rank
#828
Among tracked npm listings

About @ospm/eslint-plugin-react-unhookify

eslint-plugin-react-unhookify

ESLint plugin to remove React hooks (useMemo, useCallback) and memo HOC for cleaner React code.

Note: With React Compiler 1.0 now stable, automatic memoization is handled at build time. This plugin is most useful for:

  • Projects using React Compiler
  • Codebases where manual memoization was over-used
  • Migrating legacy code before adopting React Compiler

Philosophy

This plugin follows the philosophy that:

  1. Memoization should be intentional: Only use memoization when you have measured performance problems
  2. Code simplicity matters: Unnecessary memoization adds complexity without benefits
  3. React is fast: Modern React is already optimized, and premature optimization can hurt more than help
  4. Developer experience: Cleaner code is easier to read, maintain, and debug

React Compiler 1.0 Context

React Compiler 1.0 (released October 2025) provides automatic memoization at build time, making manual useMemo, useCallback, and React.memo unnecessary in most cases.

Key Benefits of React Compiler
  • Automatic optimization: Analyzes component data flow and memoizes automatically
  • Better than manual: Can memoize in cases where hooks cannot be used (e.g., after early returns)
  • Production proven: Battle-tested at Meta with 12% faster loads and 2.5× faster interactions
  • Zero code changes: Works without requiring code rewrites
When to Use This Plugin vs React Compiler
ScenarioRecommended Approach
New projectsUse React Compiler 1.0
Existing projectsAdopt React Compiler incrementally, use this plugin to clean up over-memoization
Legacy codebasesUse this plugin to remove unnecessary memoization before compiler adoption
Performance-critical codeUse React Compiler + manual memoization only as escape hatches
React Compiler Recommendations

For new code: Rely on the compiler for memoization and use useMemo/useCallback only when you need precise control.

For existing code: Either leave existing memoization in place (removing it can change compilation output) or carefully test before removing.

Rules

remove-use-memo

Removes React.useMemo calls and inlines the computed value to simplify code by eliminating unnecessary memoization.

❌ Incorrect

const expensiveValue = React.useMemo(() => computeExpensiveValue(a, b), [a, b]);
const memoizedResult = useMemo(() => a + b, [a, b]);

✅ Correct

const expensiveValue = computeExpensiveValue(a, b);
const result = a + b;

Edge Cases (will NOT be flagged):

  • useMemo calls containing other React hooks (for safety)
  • Complex functions with multiple statements
  • Incorrect useMemo signatures
remove-use-callback

Removes React.useCallback calls and inlines the function to simplify code by eliminating unnecessary memoization.

❌ Incorrect

const handleClick = React.useCallback(() => {
  doSomething();
}, [doSomething]);

const handleChange = useCallback((event) => {
  console.log(event.target.value);
}, []);

✅ Correct

const handleClick = () => {
  doSomething();
};

const handleChange = (event) => {
  console.log(event.target.value);
};
remove-memo

Removes React.memo HOC calls and uses the component directly to simplify code by eliminating unnecessary memoization.

❌ Incorrect

const MyComponent = React.memo(() => {
  return <div>Hello</div>;
});

const MemoizedComponent = memo(({ name }) => {
  return <div>Hello {name}</div>;
});

✅ Correct

const MyComponent = () => {
  return <div>Hello</div>;
};

Installation

Option 1: React Compiler 1.0 (Recommended for new projects)
npm install --save-dev --save-exact babel-plugin-react-compiler@latest
npm install --save-dev eslint-plugin-react-hooks@latest
Option 2: This Plugin (For legacy cleanup or pre-compiler migration)
npm install @ospm/eslint-plugin-react-unhookify --save-dev
Option 3: Combined Approach

Use React Compiler for automatic optimization and this plugin to clean up legacy memoization:

npm install --save-dev --save-exact babel-plugin-react-compiler@latest
npm install --save-dev eslint-plugin-react-hooks@latest
npm install @ospm/eslint-plugin-react-unhookify --save-dev

Comparison: React Compiler vs Manual Memoization

FeatureReact Compiler 1.0Manual MemoizationThis Plugin
Automatic optimization✅ Build-time analysis❌ Manual implementation❌ Manual cleanup
Performance12% faster loads, 2.5× interactionsVaries by implementationRemoves unnecessary overhead
Code simplicity✅ No manual hooks needed❌ Adds boilerplate✅ Cleaner code
ControlLimited (escape hatches available)✅ Full control✅ Selective removal
Learning curveLow (install and enable)High (need to understand patterns)Low (auto-fix available)
Best forMost applicationsPerformance-critical casesLegacy code cleanup

Usage

Flat config (ESLint 9+)
import reactUnhookify from '@ospm/eslint-plugin-react-unhookify';

export default [
  {
    plugins: {
      'react-unhookify': reactUnhookify,
    },
    rules: {
      'react-unhookify/remove-use-memo': 'error',
      'react-unhookify/remove-use-callback': 'error',
      'react-unhookify/remove-memo': 'error',
    },
  },
];
Legacy config (ESLint 8)
module.exports = {
  plugins: ['react-unhookify'],
  rules: {
    'react-unhookify/remove-use-memo': 'error',
    'react-unhookify/remove-use-callback': 'error',
    'react-unhookify/remove-memo': 'error',
  },
};

Recommended Configuration

This plugin exports a recommended configuration that enables all rules.

Flat config…

Description from the npm listing.

  • eslint
  • eslint-plugin
  • react
  • react-hooks
  • usememo
  • usecallback
  • memo
  • performance
  • optimization
  • cleanup

README badge

Show your rank in a README or on your website. The badge updates automatically.

Charts

Images: 30d · 1y · all time · 1600×900 dark

Adoption over time

@ospm/eslint-plugin-react-unhookify weekly downloads on npm, last 90 days: 29,448 weekly downloads as of Oct 31, 2026, +223% over 90 days.@ospm/eslint-plugin-react-unhookifyWeekly downloads on npm · Last 90 days29,448downloads / week+223% over 90 days05K10K15K20K25K30K35K40KAug 2Aug 17Sep 1Sep 16Oct 1Oct 16Oct 31downloads / weekobservedarchived (Internet Archive)no observationsAug 3, 2026 – Oct 31, 2026 · 90 observations · Updated Oct…pluginstats.com
@ospm/eslint-plugin-react-unhookify weekly downloads on npm, last 90 days: 29,448 weekly downloads as of Oct 31, 2026, +223% over 90 days.

7/30/90-day growth

@ospm/eslint-plugin-react-unhookify weekly downloads growth on npm: +64.5% over 7 days, +182% over 30 days, +223% over 90 days.@ospm/eslint-plugin-react-unhookifyWeekly downloads growth on npm29,448downloads / week now7-day growth+11,546 weekly downloads+64.5%30-day growth+18,987 weekly downloads+182%90-day growth+20,334 weekly downloads+223%Growth vs. nearest observation to each baseline date · Updated Oct 31, 2026pluginstats.com
@ospm/eslint-plugin-react-unhookify weekly downloads growth on npm: +64.5% over 7 days, +182% over 30 days, +223% over 90 days.

Ranking history

@ospm/eslint-plugin-react-unhookify npm ranking history: currently #828 (by weekly downloads).@ospm/eslint-plugin-react-unhookifynpm ranking · by weekly downloads · Last 90 days#828current rank#825#830#835#840#845#850#855Aug 3Aug 18Sep 2Sep 17Oct 2Oct 17Nov 1rankOct 31, 2026 – Nov 1, 2026 · 2 observations · Updated Oct 31, 2026pluginstats.com
@ospm/eslint-plugin-react-unhookify npm ranking history: currently #828 (by weekly downloads).

Listing placement

All npm2,710 listings · 136 pages · 1,357 shown · page 42, #8 (overall #828)
All npm: every listing in weekly downloads order

Listing placement

ESLint plugins278 listings · 14 pages · page 11, #16 (overall #216)
ESLint plugins: every listing in weekly downloads order

Filled points are observed values; hollow points come from Internet Archive snapshots of the listing page. Dashed segments span periods with no observations — values between points are not interpolated.

Each band is one page of 20. Weekly downloads on a linear scale. Placement is projected from weekly downloads, so it can differ from the marketplace's own sort order. Hover a dot to see the listing.

Recent observations

Full history (121)
Recent weekly downloads observations for @ospm/eslint-plugin-react-unhookify
Date (UTC)Weekly downloadsChange vs. previous
29,448-2.4K
31,868-2.9K
34,770-363
35,133+4.3K
30,859+7K
23,843+8.8K
15,066-2.8K
17,902+974
16,928+809
16,119+6.3K
9,8170
9,8170
9,817-2.9K
12,699—

Data source

Weekly downloads (trailing 7 complete days) come from the official npm downloads API. Downloads include CI and mirrors and are not equivalent to installs or users. npm publishes no ratings.

Listing: https://www.npmjs.com/package/@ospm/eslint-plugin-react-unhookify. First seen Oct 31, 2026; last successful collection Oct 31, 2026. See the methodology.