Skip to content
PluginStats

@adonisjs/eslint-plugin weekly downloads statistics

By adonisjs · npm · ESLint plugins

ESLint plugin to enforce AdonisJS app specific linting rules

View on npm Stale · Oct 17, 2026

@adonisjs/eslint-plugin has 49,417 recorded weekly downloads on npm, a decrease of 20.2% over the past 30 days, ranking #565 of 2,306 tracked listings.

Weekly downloads
49,417
Official API · Oct 18, 2026
7-day growth
-62.6%
-82.6K weekly downloads
30-day growth
-20.2%
-12.5K weekly downloads
90-day growth
-7.6%
-4.1K weekly downloads
Rank
#565
Among tracked npm listings

About @adonisjs/eslint-plugin

@adonisjs/eslint-plugin

Compatible with ESLint>=9.0 and TypeScript >=5.4

<hr> <br /> <div align="center"> <h3>ESLint plugin for AdonisJS applications</h3> <p> The plugin forces your application to use lazy imports for controllers and event listeners. <strong>Lazy imports are a must when you are using HMR mode in AdonisJS</strong>. </p> </div> <br /> <div align="center">

[![gh-workflow-image]][gh-workflow-url] [![typescript-image]][typescript-url] [![npm-image]][npm-url] [![license-image]][license-url]

</div>

Installation

The package comes pre-configured with the @adonisjs/eslint-config preset and hence manual installation is not required.

However, you can install and configure it as follows.

npm i -D @adonisjs/eslint-plugin@beta

# Install peer dependencies
npm i -D eslint@9 typescript typescript-eslint

Usage

After installation, you can register the following as follows. Make sure to also setup the typescript-eslint parser in order for the rules to work.

// eslint.config.js
import adonisJSPlugin from '@adonisjs/eslint-plugin'

export default [
  {
    plugins: {
      '@adonisjs': adonisJSPlugin,
    },
    rules: {
      '@adonisjs/prefer-lazy-controller-import': 'error',
      '@adonisjs/prefer-lazy-listener-import': 'error',
    },
  },
]

prefer-lazy-controller-import

[!IMPORTANT] The HMR mode of AdonisJS only works with Lazy loaded controllers

The @adonisjs/prefer-lazy-controller-import rule complains when you import a controller using the import expression and assign it to a route. For example:

import router from '@adonisjs/core/services/router'
// ❌ Error: Replace standard import with lazy controller import
import UsersController from '#controllers/user_controller'

router.get('users', [UsersController, 'index'])

The rule is auto fixable, therefore you can apply the fix depending upon the shortcuts provided by your code editor.

import router from '@adonisjs/core/services/router'
// ✅ Fixed
const UsersController = () => import('#controllers/user_controller')

router.get('users', [UsersController, 'index'])

prefer-lazy-listener-import

[!IMPORTANT] The HMR mode of AdonisJS only works with Lazy loaded event listeners

The @adonisjs/prefer-lazy-listener-import rule complains when you import an event listener using the import expression and assign it to an event. For example:

import emitter from '@adonisjs/core/services/emitter'
// ❌ Error: Replace standard import with lazy controller import
import SendVerificationEmail from '#listeners/send_verification_email'

emitter.on('user:created', [SendVerificationEmail, 'handle'])

The rule is auto fixable, therefore you can apply the fix depending upon the shortcuts provided by your code editor.

import emitter from '@adonisjs/core/services/emitter'
// ✅ Fixed
const SendVerificationEmail = () => import('#listeners/send_verification_email')

emitter.on('user:created', [SendVerificationEmail, 'handle'])

prefer-adonisjs-inertia-link

[!NOTE] This rule is for AdonisJS 7+ projects using @adonisjs/inertia v4+.

The @adonisjs/prefer-adonisjs-inertia-link rule warns when you import the Link component from @inertiajs/react or @inertiajs/vue3 instead of using the typesafe version from @adonisjs/inertia.

// ❌ Warning: Prefer importing Link from @adonisjs/inertia/react for typesafe routing
import { Link } from '@inertiajs/react'
// ✅ Correct
import { Link } from '@adonisjs/inertia/react'

prefer-adonisjs-inertia-form

[!NOTE] This rule is for AdonisJS 7+ projects using @adonisjs/inertia v4+. You must enable it manually.

The @adonisjs/prefer-adonisjs-inertia-form rule warns when you import the Form component from @inertiajs/react or @inertiajs/vue3 instead of using the typesafe version from @adonisjs/inertia.

// ❌ Warning: Prefer importing Form from @adonisjs/inertia/react for typesafe routing
import { Form } from '@inertiajs/react'
// ✅ Correct
import { Form } from '@adonisjs/inertia/react'

no-backend-import-in-frontend

The @adonisjs/no-backend-import-in-frontend rule prevents importing backend code in your frontend files located in the inertia/ directory.

The rule detects both:

  • Subpath imports (#models/user) - automatically reads your package.json imports field
  • Relative imports (../../app/models/user) - checks if the resolved path is outside inertia/
// inertia/pages/users.tsx

// ❌ Error: Importing backend code in frontend files is not allowed
import User from '#models/user'
import { UserService } from '../../app/services/user_service'
// inertia/pages/users.tsx

// ✅ Correct - type-only imports are allowed
import type { User } from '#models/user'
import type { UserService } from '../../app/services/user_service'

// ✅ Correct - imports pointing to inertia/ are allowed
import { Button } from '#components/button' // if #components/* -> ./inertia/components/*
import { utils } from '../utils'
Sharing code between frontend and backend

If you have shared code (e.g., enums, constants, utility types) in your backend that you want to import in your frontend, you can use the allowed option to whitelist specific paths:

// eslint.config.js
export default [
  {
    rules: {
      '@adonisjs/no-backend-import-in-frontend': [
        'error',
        {
          allowed: [
            '#shared/*', // allows #shared/enums, #shared/constants, etc.
            '#shared/**', // allows #shared/utils/helpers (deep nested)
            '#enums', // exact match
          ],
        },
      ],
    },
  },
]

The allowed option uses micromatch for glob pattern matching.

// inertia/pages/users.tsx

// ✅ Correct - #shared/* is in the allowed list
import { UserStatus } from '#shared/enums'
```…

Description from the npm listing.

  • eslint
  • adonisjs
  • eslint-plugin

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

@adonisjs/eslint-plugin weekly downloads on npm, last 90 days: 62,653 weekly downloads as of Oct 18, 2026, +16.8% over 90 days.@adonisjs/eslint-pluginWeekly downloads on npm · Last 90 days62,653downloads / week+16.8% over 90 days050K100K150K200KJul 20Aug 4Aug 19Sep 3Sep 18Oct 3Oct 18downloads / weekobservedarchived (Internet Archive)no observationsJul 22, 2026 – Oct 18, 2026 · 89 observations · Updated Oc…pluginstats.com
@adonisjs/eslint-plugin weekly downloads on npm, last 90 days: 62,653 weekly downloads as of Oct 18, 2026, +16.8% over 90 days.

7/30/90-day growth

@adonisjs/eslint-plugin weekly downloads growth on npm: -46.2% over 7 days, +1.3% over 30 days, +16.8% over 90 days.@adonisjs/eslint-pluginWeekly downloads growth on npm62,653downloads / week now7-day growth-53,776 weekly downloads-46.2%30-day growth+812 weekly downloads+1.3%90-day growth+8,995 weekly downloads+16.8%Growth vs. nearest observation to each baseline date · Updated Oct 17, 2026pluginstats.com
@adonisjs/eslint-plugin weekly downloads growth on npm: -46.2% over 7 days, +1.3% over 30 days, +16.8% over 90 days.

Ranking history

@adonisjs/eslint-plugin npm ranking history: currently #565 (by weekly downloads).@adonisjs/eslint-pluginnpm ranking · by weekly downloads · Last 90 days#565current rank#100#200#300#400#500#600Jul 21Aug 5Aug 20Sep 4Sep 19Oct 4Oct 19rankOct 17, 2026 – Oct 19, 2026 · 3 observations · Updated Oct 17, 2026pluginstats.com
@adonisjs/eslint-plugin npm ranking history: currently #565 (by weekly downloads).

Listing placement

All npm2,256 listings · 113 pages · 1,129 shown · page 29, #5 (overall #565)
All npm: every listing in weekly downloads order

Listing placement

ESLint plugins253 listings · 13 pages · page 7, #17 (overall #137)
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 (544)
Recent weekly downloads observations for @adonisjs/eslint-plugin
Date (UTC)Weekly downloadsChange vs. previous
62,653+13.2K
49,417-10.7K
60,109+1.9K
58,234-23.6K
81,860-24.5K
106,3780
106,378-10.1K
116,429-15.6K
131,981-4.9K
136,870-4.1K
140,995-9.5K
150,450-4K
154,436-25K
179,465—

Similar npm ESLint plugins plugins

All 20 @adonisjs/eslint-plugin alternatives

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/@adonisjs/eslint-plugin. First seen Oct 16, 2026; last successful collection Oct 20, 2026. See the methodology.