Install
Requires Node.js 24 or 26+. Install the plugin in your workspace:eslint.config.mjs imports eslint/config, install eslint directly too
so that import resolves with package managers that isolate dependencies.
Define a lint command
Add a lint target to an existing project:isox init @isox-sh/js unless --linter=none is set.
If there is no root ESLint config, it creates eslint.config.mjs with recommended
JavaScript and TypeScript rules, Node.js globals, and ignores for build output,
coverage, and Isox state. The root package.json gets dev dependencies for
@isox-sh/eslint, eslint, @eslint/js, typescript-eslint, typescript, and
globals. Run your package manager’s install command before linting.
Existing configs are preserved, including JavaScript, TypeScript, and legacy
formats; existing dependency versions and dependency classifications are retained.
When a config already exists, only the executor plugin and ESLint dependencies
are ensured. Legacy configs produce a migration warning because ESLint 10 uses
flat config. Running add again also repairs missing workspace setup when a
lint target already exists.
isox lint my-app. The fully scoped executor name is
@isox-sh/eslint:lint.
Apply automatic fixes from the CLI:
fix from the target’s options or selected configuration.
Other plugin options work the same way, such as --max-warnings=5 or
--config-file=eslint.custom.mjs; the CLI forwards unrecognized flags to the executor.
For multi-project runs, it applies to the requested target, leaving pre/post
targets’ options unchanged. Use --no-fix to disable configured fixes for a run.
Options
ESLint runs from the workspace root, and default linting selects only the current
project. Globs are passed directly to ESLint without shell expansion. Lint errors,
excess warnings, unmatched patterns, and configuration failures fail the command.
Cancellation stops the child process through Isox’s shared process runner.
Cache lint results
Add workspace defaults inisox.json to cache successful lint results and terminal
output without declaring any build artifacts:
configFile, or additional
lintFilePatterns outside the project in inputs too. When --fix changes an
input file, that run is not cached. Source edits are never restored as artifacts.
Use --skip-cache to force linting. See local task caching.
For array-valued options, use JSON to preserve the array even with one pattern: