
Linting Neostandard Eslint9
- 890 installs
- 1.9k repo stars
- Updated August 3, 2026
- mcollina/skills
linting-neostandard-eslint9 is a Claude Code skill that integrates neostandard with ESLint v9 across editors, pre-commit hooks, and CI for developers who need consistent JavaScript and TypeScript lint enforcement.
About
linting-neostandard-eslint9 is a CI-and-editor integration skill from mcollina/skills that standardizes neostandard and ESLint v9 across local editing, git commits, and continuous integration. The skill prescribes running `npm run lint` as a required CI step without auto-fix, aligning Node.js versions with project engines, and configuring lint-staged to run `eslint --fix` only on changed `*.{js,mjs,cjs,ts,mts,cts}` files before commit. Developers reach for linting-neostandard-eslint9 when adopting ESLint v9 flat config with neostandard and need repeatable patterns for VS Code, pre-commit, and pipeline enforcement without divergent local versus CI behavior.
- Integrates neostandard and ESLint v9 with CI pipelines as a required non-auto-fixing step
- Uses lint-staged for pre-commit hooks that only lint changed files
- Provides explicit VS Code workspace settings with editor.codeActionsOnSave set to explicit
- Prefers flat eslint.config.js/mjs with neostandard as the baseline configuration
- Keeps CI Node.js version aligned with local development and package.json engines
Linting Neostandard Eslint9 by the numbers
- 890 all-time installs (skills.sh)
- +28 installs in the week ending Aug 5, 2026 (Skillselion tracking)
- Ranked #165 of 1,352 Code Review & Quality skills by installs in the Skillselion catalog
- Security screen: MEDIUM risk (skills.sh audit)
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/mcollina/skills --skill linting-neostandard-eslint9Add your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 890 |
|---|---|
| repo stars | ★ 1.9k |
| Security audit | 2 / 3 scanners passed |
| Last updated | August 3, 2026 |
| Repository | mcollina/skills ↗ |
How do you integrate ESLint v9 neostandard with CI and pre-commit?
Enforce consistent JavaScript and TypeScript code quality across local editing, git commits, and continuous integration.
Who is it for?
JavaScript and TypeScript teams adopting neostandard on ESLint v9 who want editor, git hook, and CI linting to behave identically.
Skip if: Projects still on ESLint v8 legacy config or teams that only need one-off rule fixes without CI or hook integration.
When should I use this skill?
A developer asks to set up neostandard, ESLint v9, lint-staged pre-commit hooks, or required CI lint steps for a JS/TS repository.
What you get
CI lint step config, lint-staged pre-commit JSON, and aligned Node.js engine settings for local and pipeline runs.
- lint-staged configuration
- CI lint step pattern
- editor integration guidance
By the numbers
- Targets 6 file extensions: js, mjs, cjs, ts, mts, cts
Files
When to use
Use this skill when you need to:
- Set up linting in a JavaScript or TypeScript project
- Use
neostandardas a Standard-like ESLint v9 flat-config baseline - Configure
eslint@9with the flat config system (eslint.config.js/eslint.config.mjs) - Migrate from
standardtoneostandardor ESLint v9 - Migrate from legacy
.eslintrc*configuration to ESLint v9 - Run linting consistently in CI and local development
Quick start: basic neostandard setup
Install dependencies and create a minimal eslint.config.js:
npm install --save-dev eslint@9 neostandard// eslint.config.js
import neostandard from 'neostandard'
export default neostandard()Verify the config works:
npx eslint .Common setup workflow (new project)
1. Install eslint@9 and neostandard (see Quick start above) 2. Create eslint.config.js with neostandard() as the base 3. Add any project-specific rule overrides on top 4. Run npx eslint . to confirm no config errors 5. Add a lint script to package.json: "lint": "eslint ." 6. Integrate into CI with a non-fix run; use --fix only in local workflows
How to use
Read individual rule files for implementation details and examples:
- rules/neostandard.md - Install, configure, and extend neostandard with ESLint
- rules/eslint-v9-flat-config.md - Build ESLint v9 flat config for JS/TS projects
- rules/migration-from-standard.md - Migrate from
standardtoneostandardor ESLint v9 - rules/migration-from-legacy-eslint.md - Migrate from
.eslintrc*to flat config safely - rules/ci-and-editor-integration.md - CI scripts, pre-commit, and editor setup
Core principles
- Prefer reproducible linting with pinned major versions
- Keep config minimal and explicit
- Use flat config for ESLint v9 projects
- Treat lint failures as quality gates in CI
- Enable auto-fix for local workflows, but validate with non-fix CI runs
CI guidance
- Run lint in CI as a required step:
npm run lint- Do not use auto-fix in CI.
- Keep CI Node.js version aligned with local development and project engines.
Pre-commit hook pattern
Use lint-staged (or equivalent) to lint only changed files before commit.
{
"lint-staged": {
"*.{js,mjs,cjs,ts,mts,cts}": [
"eslint --fix"
]
}
}When using neostandard, keep pre-commit execution on eslint --fix because ESLint is the actual runner.
VS Code integration
- Install ESLint extension
- Enable flat config support if required by extension version
- Use
editor.codeActionsOnSavefor explicit, predictable auto-fixes
Example workspace settings:
{
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit"
},
"eslint.validate": ["javascript", "typescript"]
}ESLint v9 uses flat config by default. Prefer eslint.config.js or eslint.config.mjs over legacy .eslintrc* files.
Preferred setup in this skill: neostandard baseline
Install:
npm install --save-dev eslint neostandardCreate config (ESM helper):
npx neostandard --esm > eslint.config.jsRun lint:
npx eslint .Manual flat config (when not using neostandard)
Install (example):
npm install --save-dev eslint @eslint/js typescript-eslintBasic eslint.config.mjs (JS + TS):
import js from '@eslint/js'
import tseslint from 'typescript-eslint'
export default [
js.configs.recommended,
...tseslint.configs.recommended,
{
files: ['**/*.{js,mjs,cjs,ts,mts,cts}'],
languageOptions: {
ecmaVersion: 'latest',
sourceType: 'module'
},
rules: {
'no-unused-vars': 'off',
'@typescript-eslint/no-unused-vars': ['error', { argsIgnorePattern: '^_' }]
}
}
]Package scripts
{
"scripts": {
"lint": "eslint .",
"lint:fix": "eslint . --fix"
}
}Good practices
- Use a single root flat config unless package-level variance is required
- Keep TypeScript-aware rules scoped to TS files
- Avoid duplicate JS/TS rules; disable base rule when TS extension rule is used
- Keep CI on non-fix lint runs; reserve
--fixfor local workflows
Use this checklist to migrate with low risk.
Migration checklist
1. Upgrade ESLint major version:
npm install --save-dev eslint@^92. Create eslint.config.js or eslint.config.mjs 3. Translate legacy extends, plugins, and overrides into flat-config entries 4. Remove .eslintrc* and deprecated ignore files once parity is verified 5. Run lint and compare issue count before/after migration 6. Fix rule parity gaps explicitly in config 7. Update CI scripts to call eslint .
Pitfalls to avoid
- Mixing legacy and flat config in the same project
- Forgetting to disable base rules when TS variants are enabled
- Assuming plugin presets are flat-config compatible without checking docs
- Migrating config and rule semantics in a single large change without validation
Use this when a project currently runs standard and you want modern ESLint v9 + flat config while keeping a Standard-like baseline.
Canonical migration flow
1. Install dependencies:
npm install --save-dev neostandard eslint2. (Optional preflight) verify helper command works:
npx neostandard --help3. Generate migrated config from existing package.json "standard" settings:
npx neostandard --migrate > eslint.config.js4. Replace lint scripts/CI commands from standard to eslint:
{
"scripts": {
"lint": "eslint .",
"lint:fix": "eslint . --fix"
}
}5. Cleanup old setup:
npm uninstall standardThen remove obsolete top-level "standard" config and editor integrations specific to standard (for example vscode-standard).
Semicolon and TypeScript variants
- semistandard-like migration:
npx neostandard --semi --migrate > eslint.config.js- TypeScript support in resulting config: set
ts: true(or regenerate/configure accordingly).
Behavioral differences to expect
- neostandard is built for ESLint 9 flat config (no
standard-enginewrapper) - rule implementation uses modern flat-config/plugin model
- some rules differ from legacy standard/
eslint-config-standardbehavior - on neostandard v1+, import rules from
eslint-plugin-import-xare not bundled by default
If you relied heavily on import linting in your old setup, either:
- add
eslint-plugin-import-xexplicitly, or - rely on
tsc --noEmit(recommended for TypeScript-heavy projects)
Run lint and fix incrementally after migration; keep tooling migration separate from rule-tuning commits.
neostandard is a shared ESLint flat config and config generator, not a standalone replacement linter command.
Key model
- You install both
neostandardandeslint - You generate or author
eslint.config.js/eslint.config.mjs - You run linting via
eslint(eslint .,eslint . --fix)
Install
npm install --save-dev neostandard eslintCreate config
Generate ESM config:
npx neostandard --esm > eslint.config.jsGenerate CommonJS config:
npx neostandard > eslint.config.jsOr author manually (ESM):
import neostandard from 'neostandard'
export default neostandard({
ts: true
})Run lint
{
"scripts": {
"lint": "eslint .",
"lint:fix": "eslint . --fix"
}
}Common options
ts: true— lint*.tsand*.d.tssemi: true— semicolon mode (semistandard-style)noStyle: true— disable style rules (useful with Prettier/dprint)noJsx: true— disable JSX rulesignores,files,filesTs,env,globals
Version caveat (v1+)
As of neostandard v1+, eslint-plugin-import-x is no longer bundled.
- If you need deep import/export lint rules, add
eslint-plugin-import-xexplicitly - For many TypeScript projects, prefer
tsc --noEmitfor module/import correctness checks
Useful export
Use .gitignore patterns as ESLint ignores:
import neostandard, { resolveIgnoresFromGitignore } from 'neostandard'
export default neostandard({
ignores: resolveIgnoresFromGitignore()
})Important migration note
For projects moving from standard, keep neostandard as the config source but run lint through eslint.
{
"name": "mcollina/linting-neostandard-eslint9",
"version": "0.1.0",
"private": false,
"summary": "Configures ESLint v9 flat config and neostandard for JavaScript and TypeScript projects, including migrating from legacy `.eslintrc*` files or the `standard` package. Use when you need to set up or fix linting with `eslint.config.js` or `eslint.config.mjs`, troubleshoot lint errors, configure neostandard rules, migrate from `.eslintrc` to flat config, or integrate linting into CI pipelines and pre-commit hooks.",
"skills": {
"linting-neostandard-eslint9": {
"path": "SKILL.md"
}
}
}
Related skills
How it compares
Pick this over generic ESLint setup guides when the stack is specifically neostandard on ESLint v9 and you need CI, pre-commit, and editor patterns in one workflow.
FAQ
Should CI auto-fix with ESLint neostandard?
linting-neostandard-eslint9 instructs developers to run `npm run lint` as a required CI step and explicitly avoid auto-fix in CI. Pre-commit hooks via lint-staged may run `eslint --fix` on changed files only before commit.
Which file globs does lint-staged target?
linting-neostandard-eslint9 recommends lint-staged patterns for `*.{js,mjs,cjs,ts,mts,cts}` running `eslint --fix`. That limits pre-commit linting to changed JavaScript and TypeScript source files.
Is Linting Neostandard Eslint9 safe to install?
skills.sh reports 2 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.