Skip to content
PluginStats

eslint-plugin-ember weekly downloads statistics

By ember-cli (3 listings) · npm · ESLint plugins

ESLint plugin for Ember.js apps

View on npm Fresh · Oct 17, 2026

eslint-plugin-ember has 105,323 recorded weekly downloads on npm, a decrease of 52.0% over the past 30 days.

It ranks #444 of 2,256 tracked npm listings by weekly downloads.

Over 90 days, weekly downloads changed by -51.5%.

PluginStats has 542 daily observations since Apr 24, 2025; the latest is from Oct 17, 2026.

Weekly downloads
105,323
Official API · Oct 17, 2026
7-day growth
-53.5%
-121.1K weekly downloads
30-day growth
-52.0%
-114.1K weekly downloads
90-day growth
-51.5%
-111.6K weekly downloads
Rank
#444
Among tracked npm listings

About eslint-plugin-ember

eslint-plugin-ember

An ESLint plugin that provides a set of rules for Ember applications based on commonly known good practices.

❗️Requirements

• ESLint >= 8.40.0 • Node.js >= 20.19

🚀 Usage

1. Install plugin

2. Update your config

or

gts/gjs

lint files having First-Class Component Templates (fcct)

learn more at ember-template-imports

[!NOTE] special care should be used when setting up parsers, since they cannot be overwritten. thus they should be used in override only and specific to file types

gjs/gts support is provided by the ember-eslint-parser

[!NOTE] if you import .gts files in .ts files, then ember-eslint-parser is required for .ts as well to enable typed linting

rules applied to fcct templates

• semi rule, same as prettier plugin • no-undef rule will take effect for template vars (includes js scope) • no-unused rule will take effect for template block params

rules in templates can be disabled with eslint directives with mustache or html comments:

Migrating from ember-template-lint

If you are replacing ember-template-lint with this plugin, use the template-lint-migration config to get the equivalent set of rules:

template-lint-migration mirrors the ember-template-lint recommended preset.

Linting .hbs files

ESLint flat config only picks up .hbs files when a files glob names them. Add a dedicated block so they route to the Handlebars parser:

Make sure no earlier @typescript-eslint/parser block's files glob reaches .hbs — narrow it to ['**/*.{js,ts,gjs,gts}'] (or similar). Flat config merges rules across every matching block, so even if our HBS block overrides the parser, type-info rules from a matching TS block still layer on and fail with errors like:

Parsing error: … was not found by the project service because the extension for the file (.hbs) is non-standard.

or

Error while loading rule @typescript-eslint/await-thenable: You have used a rule which requires type information.

Replacing template-lint-disable comments

Inline disable directives need to be rewritten to ESLint's syntax, prefixed with ember/template-. For now, only two scopes are supported: the next line, or the rest of the file. For example, replace:

with:

The template-no-template-lint-directives rule (enabled by the template-lint-migration config) does this rewrite for you: run eslint --fix once and it converts every template-lint-disable / template-lint-enable comment in your templates.

To disable a rule for an entire .gjs/.gts file, use a regular ESLint file-level directive in the JS region — it applies to the contents as well:

🧰 Configurations

| | Name |

| | base | | ✅ | recommended | | | recommended-gjs | | | recommended-gts | | 📋 | template-lint-migration |

🍟 Rules

💼 Configurations enabled in.\ ✅ Set in the recommended configuration.\ Set in the recommended-gjs configuration.\ Set in the recommended-gts configuration.\ 📋 Set in the template-lint-migration configuration.\ 🔧 Automatically fixable by the --fix CLI option.\ 💡 Manually fixable by editor suggestions.

Accessibility

| Name | Description | 💼 | 🔧 | 💡 |

| template-link-href-attributes | require href attribute on link elements | 📋 | | | | template-no-abstract-roles | disallow abstract ARIA roles | 📋 | | | | template-no-accesskey-attribute | disallow accesskey attribute | 📋 | 🔧 | | | template-no-aria-hidden-body | disallow aria-hidden on body element | 📋 | 🔧 | | | template-no-aria-unsupported-elements | disallow ARIA roles, states, and properties on elements that do not support them | 📋 | | | | template-no-autofocus-attribute | disallow autofocus attribute | 📋 | 🔧 | | | template-no-duplicate-landmark-elements | disallow duplicate landmark elements without unique labels | 📋 | | | | template-no-empty-headings | disallow empty heading elements | 📋 | | | | template-no-heading-inside-button | disallow heading elements inside button elements | 📋 | | | | template-no-invalid-aria-attributes | disallow invalid aria-* attributes | 📋 | | | | template-no-invalid-interactive | disallow non-interactive elements with interactive handlers | 📋 | | | | template-no-invalid-link-text | disallow invalid or uninformative link text content | 📋 | | | | template-no-invalid-link-title | disallow invalid title attributes on link elements | 📋 | | | | template-no-invalid-role | disallow invalid ARIA roles | 📋 | | | | template-no-nested-interactive | disallow nested interactive elements | 📋 | | | | template-no-nested-landmark | disallow nested landmark elements | 📋 | | | | template-no-pointer-down-event-binding | disallow pointer down event bindings | 📋 | | | | template-no-positive-tabindex | disallow positive tabindex values | 📋 | | | | template-no-redundant-role | disallow redundant role attributes | 📋 | 🔧 | | | template-no-unsupported-role-attributes | disallow ARIA attributes that are not supported by the element role | 📋 | 🔧 | | | template-no-whitespace-within-word | disallow excess whitespace within words (e.g. "W e l c o m e") | 📋 | | | | template-require-aria-activedescendant-tabindex | require non-interactive elements with aria-activedescendant to have tabindex | 📋 | 🔧 | | | template-require-context-role | require ARIA roles to be used in appropriate context | 📋 | | | | template-require-iframe-title | require iframe elements to have a title attribute | 📋 | | | | template-require-input-label | require label for form input elements | 📋 | | | | template-require-lang-attribute | require lang attribute on html element | 📋 | | | | template-require-mandatory-role-attributes | require mandatory ARIA attributes for ARIA roles | 📋 | | | | template-require-media-caption | require captions for audio and video elements | 📋 | | | | template-require-presentational-children | require presentational elements to only contain presentational children | 📋 | | | | template-require-valid-alt-text | require valid alt text for images and other elements | 📋 | | | | template-require-valid-form-groups | require grouped form…

Description from the npm listing.

  • eslint
  • eslintplugin
  • eslint-plugin
  • ember
  • ember.js
  • plugin
  • styleguide
  • rules

Where eslint-plugin-ember sits in the listing

Each band is one page of 20. Weekly downloads on a log 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.

All npm2,256 listings · 113 pages · page 23, #4 (overall #444)
All npm: every listing in weekly downloads order
PNG SVG
ESLint plugins253 listings · 13 pages · page 5, #17 (overall #97)
ESLint plugins: every listing in weekly downloads order
PNG SVG

Charts

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

Adoption over time

eslint-plugin-ember weekly downloads on npm, last 90 days: 105,323 weekly downloads as of Oct 17, 2026, -51.5% over 90 days.eslint-plugin-emberWeekly downloads on npm · Last 90 days105,323downloads / week-51.5% over 90 days100K120K140K160K180K200K220K240K260K280KJul 19Aug 3Aug 18Sep 2Sep 17Oct 2Oct 17downloads / weekobservedarchived (Internet Archive)no observationsJul 21, 2026 – Oct 17, 2026 · 89 observations · Updated Oc…pluginstats.com
eslint-plugin-ember weekly downloads on npm, last 90 days: 105,323 weekly downloads as of Oct 17, 2026, -51.5% over 90 days.
PNG SVG

7/30/90-day growth

eslint-plugin-ember weekly downloads growth on npm: -53.5% over 7 days, -52.0% over 30 days, -51.5% over 90 days.eslint-plugin-emberWeekly downloads growth on npm105,323downloads / week now7-day growth-121,148 weekly downloads-53.5%30-day growth-114,083 weekly downloads-52.0%90-day growth-111,627 weekly downloads-51.5%Growth vs. nearest observation to each baseline date · Updated Oct 17, 2026pluginstats.com
eslint-plugin-ember weekly downloads growth on npm: -53.5% over 7 days, -52.0% over 30 days, -51.5% over 90 days.
PNG SVG

Ranking history

eslint-plugin-ember npm ranking history: currently #444 (by weekly downloads).eslint-plugin-embernpm ranking · by weekly downloads · Last 90 days#444current rank#150#200#250#300#350#400#450Jul 21Aug 5Aug 20Sep 4Sep 19Oct 4Oct 19rankOct 17, 2026 – Oct 19, 2026 · 3 observations · Updated Oct 17, 2026pluginstats.com
eslint-plugin-ember npm ranking history: currently #444 (by weekly downloads).
PNG SVG

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.

Recent observations

Full history (542)
Recent weekly downloads observations for eslint-plugin-ember
Date (UTC)Weekly downloadsChange vs. previous
105,323-22.8K
128,130+3K
125,082-53.4K
178,529-46.5K
225,0620
225,062-5.3K
230,348+3.9K
226,471+6K
220,425+4.6K
215,836+7.8K
208,080-6.5K
214,551-46.9K
261,487+1.9K
259,633—

Similar npm ESLint plugins plugins

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