Skip to content

Biome v2.1

The brand of the project. It says "Biome, toolchain of the web" The brand of the project. It says "Biome, toolchain of the web"

Biome 2.0 was released less than a month ago, and since then we have seen an amazing uptake! Our Discord is buzzing, our downloads are spiking, and bugs are rolling in :)

Probably the main point of contention is that Biome 2.0 introduced a new scanner, which we use for discovering nested configuration files as well as for populating our module graph, if project rules are enabled. The reason for this contention is that having a scanner makes things slower, while people want Biome to be fast.

To mitigate the impact, we already made the project rules opt-in for 2.0, so that users can choose between features and speed for themselves. But ideally, we’d have both. And unfortunately, even without project rules, the scanner still caused some noticeable overhead.

For Biome 2.1 we’re changing the logic for how the “light scanner” (the one where project rules are disabled) works. Previously, it would always scan the entire project from its root, whereas now it will use the files and folders that you ask Biome to operate on as a hint for which parts of the project should be scanned.

This means if you run Biome without any arguments from the project root, you are not going to notice a difference. But if you specify specific files to check, or if you run Biome inside a nested folder, the scanner will know which parts of the project you are interested in, and only scan those.

Note that if you have enabled project rules, these improvements don’t apply. This is because project rules often need to pull information from other files, including ones you didn’t specify, so we still scan the entire project for now.

When we released Biome 2.0, we mentioned that our type inference was able to detect ~75% of cases that our noFloatingPromises rule should ideally detect. Since then, we’ve been able to improve this to ~85%, and cases such as these can now be successfully inferred:

// We know that this evaluates to a `Promise`:
true && Promise.reject("logical operator bypass");
// But this doesn't:
false && Promise.reject("logical operator bypass");
// Similarly, we now detect that this may return a `Promise`:
const condition = Math.random() > -1; // Always true, but dynamic to linter
condition ? Promise.reject("ternary bypass") : null;
// On the other hand, we know the following is never a `Promise`:
const alwaysFalsy = 0;
alwaysFalsy ? Promise.reject("ternary bypass") : null;
// This will now get flagged because the `Promise`s are not handled:
[1, 2, 3].map(async (x) => x + 1);

Additionally, we have added support for getters, call signatures, comma operators, and more. Our goal is for you to not have to worry about which parts of TypeScript are supported, and the vast majority of cases to “just work”. It’s still a work in progress, but we’re happy with the progress we are seeing.

And finally we have also added the related rule noMisusedPromises.

The following new rules have been added in 2.1.0:

Other notable change:

  • If you ignore a nested configuration file from your root configuration, it will now be properly ignored.
  • When extending a configuration from another, we now correctly ignore the root of the other configuration. This one led to some confusion in several use cases.

It’s still early days in our 2.x journey. Both the scanner are type inference are likely to see further improvements. Additionally, our Core Contributors will focus on moving forward the Roadmap for 2025, and focus on the following features:

  • Make HTML support stable.
  • Expand HTML to support other frameworks such as Vue, Svelte, Astro and, hopefully, Angular too.
  • Work on Markdown support, starting from the parser.
  • and more!

Install or update the @biomejs/biome package. If you upgrade the package, run the migrate command.

Terminal window
npm install --save-dev --save-exact @biomejs/biome
npx @biomejs/biome migrate --write

The migrate command takes care of breaking changes of the configuration, so you don’t have to.

I like where this is going, how can I help?

Section titled “I like where this is going, how can I help?”

Biome is a project led by volunteers who like programming, open-source, and embrace the Biome philosophy, so any help is welcome 😁

If you are familiar with Biome and would like to contribute to its outreach, you can assist us by translating the website into your native language. In this dashboard, you can check the supported languages and if they are up to date.

Join our Discord server, and engage with the community. Chatting with the community and being part of the community is a form of contribution.

If you like the technical aspects of the project, and you want to make your way into the Rust language, or practice your knowledge around parsers, compilers, analysers, etc., Biome is the project that does for you!

There are numerous aspects to explore; I assure you that you won’t get bored. Here is a small list of the things you can start with:

If you believe in the future of the project, you can also help with a financial contribution, via Open Collective or GitHub Sponsors.

Additionally, the project provides an enterprise support program where as a company you can contract one of the core contributors to work on a specific aspect of the Biome toolchain.