> ## Documentation Index
> Fetch the complete documentation index at: https://docs.qlty.sh/llms.txt
> Use this file to discover all available pages before exploring further.

# JavaScript Language Support

## Summary

<table className="pretty-table">
  <thead>
    <tr>
      <th style={{ width: "35%" }}>Feature</th>
      <th style={{ width: "20%" }}>Status</th>
      <th style={{ width: "45%" }}>Notes</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>[Maintainability](/cloud/maintainability/metrics)</td>
      <td>✔</td>
      <td>Complexity, duplication, code smells</td>
    </tr>

    <tr>
      <td>[Linting](/linting)</td>
      <td>✔</td>

      <td />
    </tr>

    <tr>
      <td>[Auto-formatting](/auto-formatting)</td>
      <td>✔</td>

      <td />
    </tr>

    <tr>
      <td>[Custom checks](/custom-checks)</td>
      <td>✔</td>

      <td />
    </tr>

    <tr>
      <td>[Security scanning](/cloud/security/framework)</td>
      <td>✔</td>
      <td>AppSec, dependencies, and secrets</td>
    </tr>

    <tr>
      <td>[Code metrics](/cloud/maintainability/metrics)</td>
      <td>✔</td>

      <td />
    </tr>

    <tr>
      <td>[Code coverage](/coverage)</td>
      <td>✔</td>

      <td />
    </tr>
  </tbody>
</table>

## Details

<table className="pretty-table">
  <tbody>
    <tr className="divider-row">
      <td style={{ width: "35%" }}>Maintainability</td>

      <td style={{ width: "20%" }} />

      <td style={{ width: "45%" }} />
    </tr>

    <tr>
      <td>[Complexity](/complexity)</td>
      <td>✔</td>
      <td>Aka cognitive complexity</td>
    </tr>

    <tr>
      <td>[Cyclomatic complexity](/complexity#difference-from-cyclomatic-complexity)</td>
      <td>✔</td>

      <td />
    </tr>

    <tr>
      <td>[Identical code duplication](/duplication)</td>
      <td>✔</td>

      <td />
    </tr>

    <tr>
      <td>[Similar code duplication](/duplication)</td>
      <td>✔</td>

      <td />
    </tr>

    <tr>
      <td>[Code smells](/code-smells)</td>
      <td>✔</td>

      <td />
    </tr>

    <tr className="divider-row">
      <td>Linters</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>[ESLint](https://eslint.org/)</td>
      <td>✔</td>
      <td>Pluggable linter for JavaScript</td>
    </tr>

    <tr>
      <td>[OXC](https://oxc-project.github.io/)</td>
      <td>✔</td>
      <td>Fast JavaScript linter</td>
    </tr>

    <tr>
      <td>[Knip](https://github.com/webpro/knip)</td>
      <td>✔</td>
      <td>Find unused files, dependencies and exports</td>
    </tr>

    <tr>
      <td>[Biome](https://biomejs.dev/)</td>
      <td>✔</td>
      <td>Unified toolkit for web projects</td>
    </tr>

    <tr className="divider-row">
      <td>Auto-formatters</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>[Prettier](https://prettier.io/)</td>
      <td>✔</td>
      <td>Opinionated code formatter</td>
    </tr>

    <tr>
      <td>[Biome](https://biomejs.dev/)</td>
      <td>✔</td>
      <td>Includes formatting capabilities</td>
    </tr>

    <tr className="divider-row">
      <td>Custom checks</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>[ast-grep](https://github.com/ast-grep/ast-grep)</td>
      <td>✔</td>

      <td />
    </tr>

    <tr>
      <td>[Semgrep](https://semgrep.dev)</td>
      <td>✔</td>

      <td />
    </tr>

    <tr>
      <td>[ripgrep](https://github.com/BurntSushi/ripgrep)</td>
      <td>✔</td>

      <td />
    </tr>

    <tr className="divider-row">
      <td>Security scanning</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>
        [ESLint with security
        rules](https://github.com/eslint-community/eslint-plugin-security)
      </td>

      <td>✔</td>
      <td>AppSec (SAST)</td>
    </tr>

    <tr>
      <td>[Gitleaks](https://gitleaks.io/)</td>
      <td>✔</td>
      <td>Secrets scanning</td>
    </tr>

    <tr>
      <td>[OSV-Scanner](https://google.github.io/osv-scanner/)</td>
      <td>✔</td>
      <td>Dependency scanning (SCA)</td>
    </tr>

    <tr>
      <td>[Semgrep](https://semgrep.dev)</td>
      <td>✔</td>
      <td>AppSec (SAST)</td>
    </tr>

    <tr>
      <td>[Trivy](https://trivy.dev)</td>
      <td>✔</td>
      <td>Dependency scanning (SCA)</td>
    </tr>

    <tr>
      <td>[TruffleHog](https://trufflesecurity.com/trufflehog)</td>
      <td>✔</td>
      <td>Secrets scanning</td>
    </tr>

    <tr className="divider-row">
      <td>Code coverage</td>

      <td />

      <td />
    </tr>

    <tr>
      <td>[Jest](https://jestjs.io/)</td>
      <td>✔</td>

      <td />
    </tr>

    <tr>
      <td>[Vitest](https://vitest.dev/)</td>
      <td>✔</td>

      <td />
    </tr>

    <tr>
      <td>[Mocha](https://mochajs.org/)</td>
      <td>✔</td>

      <td />
    </tr>

    <tr>
      <td>LCOV coverage format</td>
      <td>✔</td>

      <td />
    </tr>

    <tr>
      <td>Cobertura coverage format</td>
      <td>✔</td>

      <td />
    </tr>
  </tbody>
</table>

## File extensions

By default, JavaScript files are defined as:

```
[file_types.javascript]
globs = ["*.js", "*.mjs", "*.cjs", "**/Jakefile"]
interpreters = [
  "rhino",
  "gjs",
  "qjs",
  "js",
  "chakra",
  "v8-shell",
  "v8",
  "node",
  "d8",
]

[file_types.jsx]
globs = ["*.jsx", "*.mjsx", "*.cjsx"]
```

These patterns can be overridden from `qlty.toml`.

## Supported JavaScript versions

We support modern JavaScript (ES2015+) for maintainability checks and code coverage. Each plugin may have its own version requirements.

## See also

* [TypeScript](/languages/typescript)
