# eslint-config-deepcrawl

> ESLint rules recommended by Lumar (formerly DeepCrawl).

Latest version **17.0.0** (published 2026-10-02) · MIT license · 0 weekly downloads

## Install

```sh
npm install eslint-config-deepcrawl
pnpm add eslint-config-deepcrawl
yarn add eslint-config-deepcrawl
bun add eslint-config-deepcrawl
```

## Health

**Score 60/100 (C)** — status: active.

Positive: esm support; no vulnerabilities; recently updated; high maintenance score.

Warnings: low downloads; no types.

## Facts

| | |
|---|---|
| Version | 17.0.0 |
| Published | 2026-10-02 |
| First published | 2020-08-14 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | ESM + CommonJS |
| Dependencies | 14 |
| Unpacked size | 17.2 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 3 |
| Author | Lumar |
| Maintainers | deepcrawl-tech |

## Links

- npm: https://www.npmjs.com/package/eslint-config-deepcrawl
- Repository: https://github.com/deepcrawl/eslint-config
- Issues: https://github.com/deepcrawl/eslint-config/issues
- npm.io page: https://npm.io/package/eslint-config-deepcrawl

## Dependencies (14)

- [@eslint/js](https://npm.io/package/@eslint/js.md) ^10.0.1
- [eslint-plugin-n](https://npm.io/package/eslint-plugin-n.md) ^18.4.0
- [typescript-eslint](https://npm.io/package/typescript-eslint.md) ^8.71.0
- [@vitest/eslint-plugin](https://npm.io/package/@vitest/eslint-plugin.md) ^1.6.27
- [eslint-plugin-promise](https://npm.io/package/eslint-plugin-promise.md) ^7.3.0
- [eslint-plugin-sonarjs](https://npm.io/package/eslint-plugin-sonarjs.md) ^4.2.2
- [eslint-config-prettier](https://npm.io/package/eslint-config-prettier.md) ^10.1.8
- [eslint-plugin-import-x](https://npm.io/package/eslint-plugin-import-x.md) ^4.17.1
- [eslint-plugin-no-loops](https://npm.io/package/eslint-plugin-no-loops.md) ^0.4.0
- [@stylistic/eslint-plugin](https://npm.io/package/@stylistic/eslint-plugin.md) ^5.10.0
- [eslint-plugin-array-func](https://npm.io/package/eslint-plugin-array-func.md) ^5.1.1
- [eslint-plugin-package-json](https://npm.io/package/eslint-plugin-package-json.md) ^1.10.1
- [@typescript-eslint/eslint-plugin](https://npm.io/package/@typescript-eslint/eslint-plugin.md) ^8.71.0
- [eslint-import-resolver-typescript](https://npm.io/package/eslint-import-resolver-typescript.md) ^4.4.5

## Recent versions

- 17.0.0 (latest) — 2026-10-02
- 16.1.0 — 2026-07-27
- 16.0.5 — 2026-05-22
- 16.0.4 — 2026-05-22
- 16.0.3 — 2026-05-22
- 16.0.2 — 2026-05-22
- 16.0.1 — 2026-05-22
- 16.0.0 — 2026-05-21
- 15.0.0 — 2026-05-21
- 14.16.0 — 2026-04-27
- 14.15.0 — 2026-03-26
- 14.14.0 — 2026-03-04
- 14.13.0 — 2026-03-04
- 14.10.0 — 2026-01-29
- 14.9.0 — 2025-11-21
- … 49 more at https://npm.io/package/eslint-config-deepcrawl/versions

## README

# eslint-config

ESLint rules used by Lumar (formerly DeepCrawl).

## Installation

Add `eslint-config-deepcrawl` and its peer dependencies to your `package.json`:

```shell
yarn add --dev \
  eslint-config-deepcrawl \
  eslint@^10.0.0
```

## Usage

Update your `eslint.config.mjs` file:

```js
import eslintConfigDeepcrawl from "eslint-config-deepcrawl";

export default [...eslintConfigDeepcrawl];
```

## Recommendations

### TypeScript

Have these options enabled in your `tsconfig.json` file:

```json
{
  "compilerOptions": {
    "noImplicitAny": true,
    "strictPropertyInitialization": true
  }
}
```

or enable `@typescript-eslint/typedef` rule.

### Prettier

Apart from ESLint, it is recommended to use the following Prettier configuration:

```json
{
  "arrowParens": "avoid",
  "bracketSpacing": true,
  "endOfLine": "lf",
  "plugins": ["prettier-plugin-packagejson"],
  "printWidth": 120,
  "quoteProps": "as-needed",
  "semi": true,
  "singleQuote": false,
  "tabWidth": 2,
  "trailingComma": "all",
  "useTabs": false
}
```

with `lint-staged` pre-commit hook done via `husky`.

## Migrating from v16

v17 replaces `eslint-plugin-jest` with `@vitest/eslint-plugin`. To upgrade:

1. Rename every `jest/*` rule reference in your `eslint.config.*` to
   `vitest/*`. For example, `"jest/expect-expect"` becomes
   `"vitest/expect-expect"`. ESLint silently ignores unknown rule names
   set to `"off"`, so if you miss a rename, your override stops working
   without an error.
2. If you still use Jest, the same rules lint Jest tests, because the test
   APIs are largely compatible. However, these rules are gone:
   `no-deprecated-functions`, `no-export` and `no-jasmine-globals` have no
   Vitest equivalent, and `vitest/no-done-callback` is deprecated because
   Vitest does not support `done` callbacks. The Jest-only globals (`jest`,
   `fit`, `xit`, `xtest`, `xdescribe`) are no longer declared either.
3. `@typescript-eslint/unbound-method` is replaced by
   `vitest/unbound-method` in TypeScript files. The Vitest rule reports
   the same problems but allows passing a method to `expect()` (for
   example `expect(client.getAccount).toHaveBeenCalled()`) and to
   `vi.mocked()`. Rename any `eslint-disable` comments and config overrides
   for `@typescript-eslint/unbound-method` to `vitest/unbound-method`.
   Remove the disable comments that only worked around mock expectations.
   Old disable comments are reported as unused.
4. Vitest globals are required. `vitest/no-importing-vitest-globals`
   reports imports of `describe`, `it`, `expect`, `vi` and the other
   globals from `vitest`. Type imports such as `Mock` are still allowed.
   Enable globals in your Vitest config and add the global types to your
   `tsconfig.json`:

   ```ts
   // vitest.config.ts
   export default defineConfig({ test: { globals: true } });
   ```

   ```json
   { "compilerOptions": { "types": ["vitest/globals"] } }
   ```

   `eslint --fix` removes the imports.

5. Tests must use `it`, not `test`, both at the top level and inside
   `describe` (`vitest/consistent-test-it`). `eslint --fix` renames them.
6. These rules are new. Most of them can be fixed with `eslint --fix`:
   - From the Vitest recommended preset: `vitest/no-import-node-test`,
     `vitest/no-unneeded-async-expect-function`,
     `vitest/prefer-called-exactly-once-with` and
     `vitest/require-local-test-context-for-concurrent-snapshots`.
   - Added by this config: `vitest/no-test-return-statement`,
     `vitest/prefer-comparison-matcher`, `vitest/prefer-equality-matcher`,
     `vitest/prefer-hooks-in-order`, `vitest/prefer-hooks-on-top`,
     `vitest/prefer-mock-promise-shorthand`, `vitest/prefer-to-contain`,
     `vitest/prefer-to-have-length`, `vitest/prefer-todo`,
     `vitest/prefer-vi-mocked` and `vitest/require-awaited-expect-poll`.

## Migrating from v15

v16.0.0 fixed the `@stylistic/max-len` ignore pattern, which had been
exempting every line, so long lines started to report errors. v16.0.1 then
removed `@stylistic/max-len` altogether and left line length to Prettier.
If you upgrade straight to v16.0.1 or later, you don't need to change
anything. If you added overrides to work around v16.0.0, you can remove them.

## Migrating from v14

v15 upgrades to ESLint 10 and replaces `eslint-plugin-import` with its
maintained fork `eslint-plugin-import-x`. To upgrade:

1. Bump `eslint` to `^10.0.0` (drop ESLint 9).
2. Rename every `import/*` rule reference in your `eslint.config.*` to
   `import-x/*` — e.g. `"import/no-default-export"` →
   `"import-x/no-default-export"`. ESLint silently ignores unknown rule
   names set to `"off"`, so a missed rename turns into a silent loss of
   your override.
3. Remove `@types/eslint__js` from your `devDependencies` if you have it
   — `@eslint/js@10` now ships its own type definitions.

No other consumer changes are required; the rest of the ruleset is
unchanged.

---
_Source: https://npm.io/package/eslint-config-deepcrawl · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
