mrkeyoor.com_
Sat 19 Sept 15:54 UTC
npmCLI & Toolingupdated 19 Sept 2026

@biomejs/biome review

We installed Biome 2.5.10 and found a command-line formatter, linter, and code-action engine rather than a JavaScript API. It handles JavaScript, TypeScript, JSX, JSON, CSS, GraphQL, and several component-file formats through one native executable. The npm wrapper has no direct dependencies, yet the installed platform binary brought the sandbox footprint to 66 MB. Version 2.5.10 concentrates on Astro parsing fixes, corrects Vue binding analysis, plugs an LSP memory leak, and adds early JavaScript-plugin and TypeScript-erasure work behind developing interfaces.

Verdict

Install Biome when its built-in rules cover your repo and one CLI can replace two configuration stacks. Keep ESLint where plugin-defined policy is the reason the lint setup exists.

We installed it

Lab card: what happened when we installed @biomejs/biomeScreenshot of @biomejs/biome documentation
Install✓ · 4.9s2 packages on disk · 66 MB
ImportESM import fails · require() fails · CommonJS package
Browsern/acould not be bundled for the browser (Node-only code, most likely)
Typesno TypeScript types found
Known vulns00 critical · 0 high · 0 moderate · 0 low (npm audit)

Answers from our run

Does @biomejs/biome install cleanly?

Yes. In a fresh container with an empty cache, npm install @biomejs/biome finished in 5 seconds, leaving 2 packages and 66 MB on disk. npm audit reported no known vulnerabilities.

Can @biomejs/biome run in a browser?

Not directly: esbuild could not bundle it for the browser in our run, which normally means it depends on Node built-ins. Use it on the server, or find a browser-targeted alternative.

Does @biomejs/biome work with both ESM and CommonJS?

Neither plain import nor require succeeded in our sandbox, so it needs a bundler or extra setup.

Does @biomejs/biome include TypeScript types?

No type declarations were found in our install, so TypeScript users need their own declarations.

@biomejs/biome or eslint: which should you use?

eslint: Choose it when custom rules, framework plugins, or the broadest JavaScript lint ecosystem matter more than one-tool configuration. Install Biome when its built-in rules cover your repo and one CLI can replace two configuration stacks.

When should you not use @biomejs/biome?

Your policy depends on custom ESLint plugins: Biome cannot load an ESLint plugin's JavaScript rules, and migration only maps rules it knows

API stability4/5The everyday commands in the current reference remain clear: format, lint, check, ci, init, and migrate. The 2.x configuration model is documented and the CLI can migrate older files. A perfect score would ignore active experimental surfaces: 2.5.10 release notes place JavaScript plugins behind unstable support, while formatter output and rule behavior can still change in patch releases as parser bugs are corrected.
Docs5/5The official site has a searchable CLI reference, configuration schema, migration guides, editor setup, a playground, and an individual page for each lint rule with examples. The README states the supported languages and gives exact install and CI commands. Release 2.5.10 also documents its Astro edge cases with failing and corrected code, so readers can tell whether a parser fix applies to their files.
Maintenance5/5Version 2.5.10 reached npm on 2026-08-21, the repository was pushed again on 2026-08-24, and the release follows 2.5.9 by four days. Its notes name fixes across Astro, Vue, Svelte, the LSP server, GritQL plugins, and lint performance. GitHub reports 524 open issues and pull requests, a sizable queue, but the short release interval and current repository activity show that fixes are shipping.
Ecosystem4/5The package recorded 13,620,104 npm downloads for the week ending 2026-08-23, and the repository has 25,631 stars. First-party editor extensions and an LSP cover common editors, while migration commands understand ESLint and Prettier configuration. It loses one point because ESLint plugins cannot simply run inside Biome, and the JavaScript plugin interface mentioned in 2.5.10 is still under unstable development.

Use it if

  • Your JavaScript or TypeScript repo needs formatting, lint rules, and import organization from one pinned command
  • Editor feedback and CI should read the same biome.json instead of maintaining separate ESLint and Prettier settings
  • You want a native executable that can run without a Node.js runtime after manual installation
  • Your Astro or Vue project needs the parser fixes shipped in 2.5.10, including comment-only Astro expressions and Vue same-name bindings
Skip it if

Setup reality

Our clean npm install of 2.5.10 finished in 4.9 seconds. It left 2 packages using 66 MB and npm audit reported 0 known vulnerabilities. The wrapper itself is 780 KB unpacked, declares no direct or peer dependencies, and requires Node 14.21.3 or newer for npm-based use. It is CommonJS with no exports map, but require() and ESM import both failed on Node 22.23.2. There are no TypeScript declarations because there is no supported module API.

Pin the dev dependency exactly, then run npx biome init if you want a biome.json. Biome also works with defaults. Existing projects can run biome migrate eslint --write and biome migrate prettier --write; inspect the result because an ESLint plugin rule with no Biome mapping cannot come across. Enable VCS integration if files.includes should respect .gitignore. Editors need the official extension or another LSP client, and competing format-on-save providers should be disabled for the same files.

The executable is selected for the host platform during installation, which explains why the on-disk result is far larger than the npm wrapper. A browser build failed in our esbuild check, so do not send it through an application bundler. biome check --write applies formatting, lint fixes, and assist actions. Unsafe fixes require an explicit option and deserve a diff review. For CI, use biome ci; it reports changes without writing them.

On a large repository, scope the input paths and use --changed --since=main when a full scan is unnecessary. Biome can read files ignored by Git unless VCS support is configured. Version 2.5.10 fixed an LSP memory leak, so editor users should update rather than leaving a long-running 2.5.9 server in place. Astro support also changed materially in this patch: comments between attributes, fragment shorthand, raw script content, and comment-only expressions now parse correctly.

Patterns

Pin the CLI in a project install-pinned

npm install --save-dev --save-exact @biomejs/biome@2.5.10

An exact version keeps formatter output and diagnostics identical on developer machines and CI. The npm package selects a native executable for the current platform.

Create the initial configuration initialize-config

npx biome init

This writes biome.json with a schema reference. You can run Biome without it, but committing the file makes project choices explicit.

Format source files in place format-source

npx biome format --write ./src

Remove --write when you only want a check. Passing a directory avoids scanning unrelated fixtures or generated files outside that path.

Apply lint fixes marked safe lint-safe-fixes

npx biome lint --write ./src

This leaves unsafe fixes untouched. Add --unsafe only in a reviewed cleanup branch because those edits may change program behavior.

Run formatting, linting, and assists together run-all-checks

npx biome check --write ./src

check is the combined local command. With --write it can change formatting, apply safe lint fixes, and perform enabled source actions such as organizing imports.

Report violations without editing CI files check-in-ci

npx biome ci ./src

The ci command does not write changes. A diagnostic produces a failing exit, which keeps an unformatted file or lint error out of the merge.

Inspect files changed since the main branch check-changed-files

npx biome check --changed --since=main

This depends on VCS integration and repository history being available. Shallow CI clones may need a deeper fetch before Biome can compare against main.

Translate ESLint and Prettier settings migrate-existing-tools

npx biome migrate eslint --write
npx biome migrate prettier --write

Read the generated configuration before deleting old tools. Plugin rules and settings without a Biome equivalent need a manual decision.

Include source while excluding generated output scope-project-files

{
  "files": {
    "includes": ["src/**", "!src/generated/**", "!**/*.min.js"]
  }
}

Biome 2 expresses exclusions as negated entries inside files.includes. Put broad inclusions first, followed by the paths that should stay untouched.

Use Git ignore files during discovery respect-gitignore

{
  "vcs": {
    "enabled": true,
    "clientKind": "git",
    "useIgnoreFile": true
  }
}

This prevents Git-ignored build output from entering a normal scan. Explicit command-line paths can still deserve their own file scoping rules.

Set a rule severity in biome.json configure-lint-rule

{
  "linter": {
    "enabled": true,
    "rules": {
      "recommended": true,
      "suspicious": { "noExplicitAny": "warn" }
    }
  }
}

Rules are nested under their group. Use off, warn, or error deliberately because error-level findings affect the command exit status.

Explain a local rule suppression suppress-one-diagnostic

// biome-ignore lint/suspicious/noExplicitAny: vendor payload has no schema
const payload: any = readVendorMessage();

Name the full rule and give a concrete reason. A narrow suppression survives review better than disabling the rule for every file.

Alternatives

PackageRegistryPick it when
eslintnpmChoose it when custom rules, framework plugins, or the broadest JavaScript lint ecosystem matter more than one-tool configuration.
prettiernpmChoose it when formatting is the only job or when Markdown and YAML must share the formatter.
oxlintnpmChoose it for a native JavaScript linter when you are happy to keep a separate formatter.

More cli & tooling guides

commander · chalk · typescript · esbuild · yargs · click · the whole shelf →

How this guide is made: grounded in the library's documentation, release notes, changelog, and issue history, on a fixed rubric — not a hands-on install of every release. The 50 most-downloaded entries are additionally install-verified in clean containers. Corrections: contact the desk.