{"id":20973,"date":"2025-10-26T11:59:00","date_gmt":"2025-10-26T11:59:00","guid":{"rendered":"https:\/\/pokecon.jp\/job\/?p=20973"},"modified":"2025-10-26T11:59:00","modified_gmt":"2025-10-26T11:59:00","slug":"biome-v2-3-lets-bring-the-ecosystem-closer","status":"publish","type":"post","link":"https:\/\/pokecon.jp\/job\/20973\/","title":{"rendered":"Biome v2.3\u2014Let&#8217;s bring the ecosystem closer"},"content":{"rendered":"\n<\/p>\n<div>\n<figure class=\"astro-t3k2vwtr\"> <img src=\"https:\/\/biomejs.dev\/_astro\/hero-dark.BHlFYJoe_nBG8K.webp\" alt=\"The image, on the right, shows the mascot of the Biome project named Cookie, which is the Biome logo with eyes. On the left, the Vue, Svelte and Astro logos. The mascot has hearts on her, which shows that is in love with the three frameworks.\" loading=\"eager\" decoding=\"async\" fetchpriority=\"auto\" width=\"1247\" height=\"580\" class=\"astro-t3k2vwtr light:sl-hidden\"\/> <img src=\"https:\/\/biomejs.dev\/_astro\/hero-light.DhiMcEiS_Z1AGGoo.webp\" alt=\"The image, on the right, shows the mascot of the Biome project named Cookie, which is the Biome logo with eyes. On the left, the Vue, Svelte and Astro logos. The mascot has hearts on her, which shows that is in love with the three frameworks.\" loading=\"eager\" decoding=\"async\" fetchpriority=\"auto\" width=\"1247\" height=\"580\" class=\"astro-t3k2vwtr dark:sl-hidden\"\/> <\/figure>\n<div class=\"metadata not-content astro-mgfltwa4\">\n<p> <time datetime=\"2025-10-07T00:00:00.000Z\" class=\"astro-mgfltwa4\"> Oct 7, 2025 <\/time>  <span class=\"metadata-alt astro-mgfltwa4\">  &#8211; 9 min read <\/span>  <\/p>\n<div class=\"authors astro-mgfltwa4\"> <a target=\"_blank\" href=\"https:\/\/bsky.app\/profile\/ematipico.xyz\" class=\"author astro-q6yfcoal\"><img src=\"https:\/\/biomejs.dev\/_astro\/ematipico_1h2AyQ.webp\" alt=\"Emanuele Stoppa\" loading=\"eager\" decoding=\"async\" fetchpriority=\"auto\" width=\"40\" height=\"40\" class=\"astro-q6yfcoal\"\/> <\/a> <\/p>\n<div class=\"author astro-q6yfcoal\"><img src=\"https:\/\/biomejs.dev\/img\/logo-avatar.png\" alt=\"Biome Core Team, Biome Maintainers\" loading=\"eager\" decoding=\"async\" fetchpriority=\"auto\" width=\"40\" height=\"40\" class=\"astro-q6yfcoal\"\/><\/p>\n<div class=\"text astro-q6yfcoal\">\n<p>Biome Core Team, Biome Maintainers<\/p>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<p>We\u2019re excited to announce the release of Biome 2.3, bringing several features that have been highly requested by the community. This release marks a significant milestone in our journey to support the broader web ecosystem.<\/p>\n<p>Once you have upgraded to Biome v2.3.0, migrate your Biome configuration to the new version by running the <code dir=\"auto\">migrate<\/code> command:<\/p>\n<p>Biome 2.3 introduces full support for Vue, Svelte, and Astro files. This means you can now format and lint the JavaScript and TypeScript code inside <code dir=\"auto\"><script\/><\/code> tags, as well as the CSS inside <code dir=\"auto\"\/> tags in these frameworks. The HTML\/template portions of these files are also parsed and formatted according to Biome\u2019s HTML formatting rules.<\/p>\n<p>This achievement wouldn\u2019t have been possible without the great efforts of <span class=\"avatar astro-vjqwbl62\"> <span class=\"astro-vjqwbl62\">Core Contributor<\/span> <a target=\"_blank\" href=\"https:\/\/github.com\/ematipico\" title=\"Member @ematipico\" class=\"astro-vjqwbl62\"> <img src=\"https:\/\/biomejs.dev\/_astro\/ematipico_1yuKlk.webp\" alt=\"Member @ematipico\" loading=\"lazy\" decoding=\"async\" fetchpriority=\"auto\" width=\"25\" height=\"25\" class=\"astro-vjqwbl62\"\/> <span class=\"astro-vjqwbl62\">@ematipico<\/span> <\/a> <\/span>  and <span class=\"avatar astro-vjqwbl62\"> <span class=\"astro-vjqwbl62\">Core Contributor<\/span> <a target=\"_blank\" href=\"https:\/\/github.com\/dyc3\" title=\"Member @dyc3\" class=\"astro-vjqwbl62\"> <img src=\"https:\/\/biomejs.dev\/_astro\/dyc3_2jNgdt.webp\" alt=\"Member @dyc3\" loading=\"lazy\" decoding=\"async\" fetchpriority=\"auto\" width=\"25\" height=\"25\" class=\"astro-vjqwbl62\"\/> <span class=\"astro-vjqwbl62\">@dyc3<\/span> <\/a> <\/span> .<\/p>\n<p>This is a feature that many developers have been asking for, and we\u2019re thrilled to finally deliver it. Achieving this has had its challenges, and it required extensive trials to get the architecture right based on the constraints of the toolchain.<\/p>\n<p>However, this feature is marked as <strong>experimental<\/strong> for several important reasons. First, these frameworks have their own specific syntaxes and idioms that extend beyond standard HTML, CSS, and JavaScript. While we\u2019ve done extensive work to handle many patterns, there are cases and framework-specific syntaxes that may not yet be fully supported (for example Svelte control-flow syntax, or Astro JSX-like syntax). We encourage you to avail of this new feature, and fine-tune it based on your needs and possible limitations found.<\/p>\n<p>Please open a discussion if you find something that hasn\u2019t been implemented, or an issue if there\u2019s a parsing error that should be handled correctly.<\/p>\n<p>To enable the feature, you\u2019ll have to opt in the new <code dir=\"auto\">html.experimentalFullSupportEnabled<\/code> option:<\/p>\n<div class=\"expressive-code\">\n<figure class=\"frame has-title not-content\">\n<pre data-language=\"json\"><code><div class=\"ec-line highlight ins\"><p><span class=\"indent\">    <\/span><span style=\"--0:#7FDBCA;--1:#075457\">\"<\/span><span style=\"--0:#7FDBCA;--1:#075457\">\"<\/span><span style=\"--0:#D6DEEB;--1:#403F53\">: <\/span><span style=\"--0:#ff99aa;--1:#7a3636\">true<\/span><\/p><\/div><\/code><\/pre>\n<\/figure>\n<\/div>\n<aside aria-label=\"Note\" class=\"starlight-aside starlight-aside--note\">\n<p class=\"starlight-aside__title\" aria-hidden=\"true\"><svg viewbox=\"0 0 24 24\" width=\"16\" height=\"16\" fill=\"currentColor\" class=\"starlight-aside__icon\"><path d=\"M12 11C11.7348 11 11.4804 11.1054 11.2929 11.2929C11.1054 11.4804 11 11.7348 11 12V16C11 16.2652 11.1054 16.5196 11.2929 16.7071C11.4804 16.8946 11.7348 17 12 17C12.2652 17 12.5196 16.8946 12.7071 16.7071C12.8946 16.5196 13 16.2652 13 16V12C13 11.7348 12.8946 11.4804 12.7071 11.2929C12.5196 11.1054 12.2652 11 12 11ZM12.38 7.08C12.1365 6.97998 11.8635 6.97998 11.62 7.08C11.4973 7.12759 11.3851 7.19896 11.29 7.29C11.2017 7.3872 11.1306 7.49882 11.08 7.62C11.024 7.73868 10.9966 7.86882 11 8C10.9992 8.13161 11.0245 8.26207 11.0742 8.38391C11.124 8.50574 11.1973 8.61656 11.29 8.71C11.3872 8.79833 11.4988 8.86936 11.62 8.92C11.7715 8.98224 11.936 9.00632 12.099 8.99011C12.2619 8.97391 12.4184 8.91792 12.5547 8.82707C12.691 8.73622 12.8029 8.61328 12.8805 8.46907C12.9582 8.32486 12.9992 8.16378 13 8C12.9963 7.73523 12.8927 7.48163 12.71 7.29C12.6149 7.19896 12.5028 7.12759 12.38 7.08ZM12 2C10.0222 2 8.08879 2.58649 6.4443 3.6853C4.79981 4.78412 3.51809 6.3459 2.76121 8.17317C2.00433 10.0004 1.8063 12.0111 2.19215 13.9509C2.578 15.8907 3.53041 17.6725 4.92894 19.0711C6.32746 20.4696 8.10929 21.422 10.0491 21.8079C11.9889 22.1937 13.9996 21.9957 15.8268 21.2388C17.6541 20.4819 19.2159 19.2002 20.3147 17.5557C21.4135 15.9112 22 13.9778 22 12C22 10.6868 21.7413 9.38642 21.2388 8.17317C20.7363 6.95991 19.9997 5.85752 19.0711 4.92893C18.1425 4.00035 17.0401 3.26375 15.8268 2.7612C14.6136 2.25866 13.3132 2 12 2ZM12 20C10.4178 20 8.87104 19.5308 7.55544 18.6518C6.23985 17.7727 5.21447 16.5233 4.60897 15.0615C4.00347 13.5997 3.84504 11.9911 4.15372 10.4393C4.4624 8.88743 5.22433 7.46197 6.34315 6.34315C7.46197 5.22433 8.88743 4.4624 10.4393 4.15372C11.9911 3.84504 13.5997 4.00346 15.0615 4.60896C16.5233 5.21447 17.7727 6.23984 18.6518 7.55544C19.5308 8.87103 20 10.4177 20 12C20 14.1217 19.1572 16.1566 17.6569 17.6569C16.1566 19.1571 14.1217 20 12 20Z\"\/><\/svg>Note<\/p>\n<div class=\"starlight-aside__content\">\n<p>We plan to fade out this option and make it the default. The option will be removed once the HTML parser becomes stable and supports more language-specific features.<\/p>\n<\/div>\n<\/aside>\n<p>Additionally, you can configure specific formatting options for HTML content, such as whether to indent the content of <code dir=\"auto\"><script\/><\/code> and <code dir=\"auto\"\/> tags:<\/p>\n<div class=\"expressive-code\">\n<figure class=\"frame has-title not-content\">\n<pre data-language=\"json\"><code><div class=\"ec-line highlight ins\"><p><span class=\"indent\">      <\/span><span style=\"--0:#7FDBCA;--1:#075457\">\"<\/span><span style=\"--0:#7FDBCA;--1:#075457\">\"<\/span><span style=\"--0:#D6DEEB;--1:#403F53\">: <\/span><span style=\"--0:#ff99aa;--1:#7a3636\">true<\/span><\/p><\/div><\/code><\/pre>\n<\/figure>\n<\/div>\n<p>By default, <code dir=\"auto\">indentScriptAndStyle<\/code> is set to <code dir=\"auto\">false<\/code> to match Prettier\u2019s behavior.<\/p>\n<p>With this release, we step into something new that needs to be addressed and discussed. In Biome you can configure each language as you see fit, which means that a project <em>might end up with different formatting (as example)<\/em>.<\/p>\n<p>In the following configuration file, JavaScript files are formatted using double quotes, while CSS files are formatted using single quotes.<\/p>\n<div class=\"expressive-code\">\n<figure class=\"frame not-content\">\n<pre data-language=\"json\"><code><div class=\"ec-line\"><p><span class=\"indent\">    <\/span><span style=\"--0:#7FDBCA;--1:#096E72\">\"formatter\"<\/span><span style=\"--0:#D6DEEB;--1:#403F53\">: { <\/span><span style=\"--0:#7FDBCA;--1:#096E72\">\"enabled\"<\/span><span style=\"--0:#D6DEEB;--1:#403F53\">: <\/span><span style=\"--0:#FF6A83;--1:#A24848\">true<\/span><span style=\"--0:#D6DEEB;--1:#403F53\"> },<\/span><\/p><\/div><div class=\"ec-line\"><p><span class=\"indent\">    <\/span><span style=\"--0:#7FDBCA;--1:#096E72\">\"experimentalFullSupportEnabled\"<\/span><span style=\"--0:#D6DEEB;--1:#403F53\">: <\/span><span style=\"--0:#FF6A83;--1:#A24848\">true<\/span><\/p><\/div><\/code><\/pre>\n<\/figure>\n<\/div>\n<p>Why would someone want that? That\u2019s not for us to answer, however with a configuration like this you would end with <strong>different quotes inside your HTML-ish files<\/strong>.<br \/>\nThis could cause inconsistencies inside the same. We created a <a target=\"_blank\" href=\"https:\/\/github.com\/biomejs\/biome\/discussions\/7754\">GitHub discussion<\/a> to understand if this is a problem, and if so, how Biome should solve it. Please let us know what do you think.<\/p>\n<p>Biome 2.3 introduces a refined syntax for ignoring paths in your project, addressing important problems that arose since the introduction of multi file analysis and TypeScript inference.<\/p>\n<p>When Biome 2.0 came out, we internally introduced the concept of \u201cpaths being indexed\u201d. When a path is indexed, Biome parses it and updates the module graph and the type inference, if enabled.<\/p>\n<p>However, we slowly came to the realization that multi-file analysis and type inference are very complex problems that can get out of hand easily.<\/p>\n<p>For example, type inference can enter a very nasty loop where tons of types are recursively indexed, consuming a lot of memory.<\/p>\n<p>As for multi-file analysis, the <code dir=\"auto\">node_modules\/<\/code> folder can be a rabbit hole, full of symbolic links with high depths and path names that exceed the maximum allowed characters.<\/p>\n<p>Solving these complex problems takes time, a lot of testing and patience from us and the community. With this new syntax, users have now more control over what Biome can and can\u2019t do.<\/p>\n<p>With this release, two syntaxes are now available:<\/p>\n<ul>\n<li><code dir=\"auto\">!<\/code> (single exclamation mark): Ignores the path from linting and formatting, but still allows it to be indexed by the type system. This is useful for generated files or third-party code that you don\u2019t want to format or lint, but still need for type inference and imports.<\/li>\n<li><code dir=\"auto\">!!<\/code> (double exclamation mark): Completely ignores the path from all Biome operations, including type indexing. This is useful for files that should be entirely excluded from Biome\u2019s analysis, such as <code dir=\"auto\">dist\/<\/code> folders.<\/li>\n<\/ul>\n<p>This distinction is particularly important when working with TypeScript projects that rely on type inference from dependencies or generated code. By using <code dir=\"auto\">!<\/code>, you can exclude these files from formatting and linting while still maintaining correct type information across your project.<\/p>\n<p>Here\u2019s an example configuration:<\/p>\n<p>In this configuration, files in the <code dir=\"auto\">generated\/<\/code> directory are ignored for formatting and linting but remain indexed for types and module graph, while files in <code dir=\"auto\">dist\/<\/code> directory are completely excluded from all Biome operations.<\/p>\n<p>This is an important tool <strong>at your disposal<\/strong> that allows you to control Biome, and <a target=\"_blank\" href=\"https:\/\/github.com\/biomejs\/biome\/issues\/7173\">avoid<\/a> <a target=\"_blank\" href=\"https:\/\/github.com\/biomejs\/biome\/issues\/7240\">possible<\/a> <a target=\"_blank\" href=\"https:\/\/github.com\/biomejs\/biome\/issues\/7007\">slowness<\/a> and <a target=\"_blank\" href=\"https:\/\/github.com\/biomejs\/biome\/issues\/6797\">memory<\/a> <a target=\"_blank\" href=\"https:\/\/github.com\/biomejs\/biome\/issues\/7020\">leaks<\/a>.<\/p>\n<p>As result, the option <code dir=\"auto\">files.experimentalScannerIgnores<\/code> has been <strong>deprecated<\/strong>. We plan to remove this option in the next releases. Run the <code dir=\"auto\">biome migrate<\/code> command update your configuration file.<\/p>\n<p>Great shoutout to <span class=\"avatar astro-vjqwbl62\"> <span class=\"astro-vjqwbl62\">Core Contributor<\/span> <a target=\"_blank\" href=\"https:\/\/github.com\/arendjr\" title=\"Member @arendjr\" class=\"astro-vjqwbl62\"> <img src=\"https:\/\/biomejs.dev\/_astro\/arendjr_Z17IfhR.webp\" alt=\"Member @arendjr\" loading=\"lazy\" decoding=\"async\" fetchpriority=\"auto\" width=\"25\" height=\"25\" class=\"astro-vjqwbl62\"\/> <span class=\"astro-vjqwbl62\">@arendjr<\/span> <\/a> <\/span>  for implementing this new feature.<\/p>\n<p><span class=\"avatar astro-vjqwbl62\"> <span class=\"astro-vjqwbl62\">Core Contributor<\/span> <a target=\"_blank\" href=\"https:\/\/github.com\/dyc3\" title=\"Member @dyc3\" class=\"astro-vjqwbl62\"> <img src=\"https:\/\/biomejs.dev\/_astro\/dyc3_2jNgdt.webp\" alt=\"Member @dyc3\" loading=\"lazy\" decoding=\"async\" fetchpriority=\"auto\" width=\"25\" height=\"25\" class=\"astro-vjqwbl62\"\/> <span class=\"astro-vjqwbl62\">@dyc3<\/span> <\/a> <\/span>  worked really hard, and he shipped for us <strong>native support<\/strong> of tailwind files!<\/p>\n<p>This is a opt-in feature of the CSS parser, and you can enable it using the new <code dir=\"auto\">css.parser.tailwindDirectives<\/code> option:<\/p>\n<div class=\"expressive-code\">\n<figure class=\"frame has-title not-content\">\n<pre data-language=\"json\"><code><div class=\"ec-line highlight ins\"><p><span class=\"indent\">      <\/span><span style=\"--0:#7FDBCA;--1:#075457\">\"tailwindDirectives\"<\/span><span style=\"--0:#D6DEEB;--1:#403F53\">: <\/span><span style=\"--0:#ff99aa;--1:#7a3636\">true<\/span><\/p><\/div><\/code><\/pre>\n<\/figure>\n<\/div>\n<ul>\n<li>Promoted <code dir=\"auto\">noNonNullAssertedOptionalChain<\/code> to the suspicious group<\/li>\n<li>Promoted <code dir=\"auto\">useReactFunctionComponents<\/code> to the <code dir=\"auto\">style<\/code> group<\/li>\n<li>Promoted <code dir=\"auto\">useImageSize<\/code> to the <code dir=\"auto\">correctness<\/code> group<\/li>\n<li>Promoted <code dir=\"auto\">useConsistentTypeDefinitions<\/code> to the <code dir=\"auto\">style<\/code> group<\/li>\n<li>Promoted <code dir=\"auto\">useQwikClasslist<\/code> to the <code dir=\"auto\">correctness<\/code> group<\/li>\n<li>Promoted <code dir=\"auto\">noSecrets<\/code> to the <code dir=\"auto\">security<\/code> group<\/li>\n<\/ul>\n<p>Removed nursery lint rule <code dir=\"auto\">useAnchorHref<\/code>, because its use case is covered by <code dir=\"auto\">useValidAnchor<\/code>.<\/p>\n<p>The following rules are now a part of the <code dir=\"auto\">react<\/code> domain, and they won\u2019t be enabled automatically unless you enabled the domain, or Biome detects <code dir=\"auto\">react<\/code> as a dependency of your closest <code dir=\"auto\">package.json<\/code>:<\/p>\n<p>The flags <code dir=\"auto\">--skip<\/code> and <code dir=\"auto\">--only<\/code> have been enhanced, and they can accept <a target=\"_blank\" href=\"https:\/\/biomejs.dev\/linter\/domains\">lint domains<\/a> too.<\/p>\n<p>In the following example, the <code dir=\"auto\">lint<\/code> command runs only the rules that belong to the <code dir=\"auto\">project<\/code> domain:<\/p>\n<div class=\"expressive-code\">\n<figure class=\"frame is-terminal not-content\">\n<pre data-language=\"shell\"><code><div class=\"ec-line\"><p><span style=\"--0:#82AAFF;--1:#3B61B0\">biome<\/span><span style=\"--0:#D6DEEB;--1:#403F53\"> <\/span><span style=\"--0:#ECC48D;--1:#3B61B0\">lint<\/span><span style=\"--0:#D6DEEB;--1:#403F53\"> <\/span><span style=\"--0:#82AAFF;--1:#3B61B0\">--only=project<\/span><\/p><\/div><\/code><\/pre>\n<\/figure>\n<\/div>\n<p>In the following example, the <code dir=\"auto\">lint<\/code> command runs all the rules that you configured, expect for the rules that belong to the <code dir=\"auto\">test<\/code> domain:<\/p>\n<p>The <code dir=\"auto\">init<\/code> command now checks if the project contains ignore files and <code dir=\"auto\">dist\/<\/code> folders. If supported ignore files are found, Biome will<br \/>\nenable the <a target=\"_blank\" href=\"https:\/\/biomejs.dev\/guides\/integrate-in-vcs\">VCS integration<\/a>, and if <code dir=\"auto\">dist\/<\/code> folder is found, it will exclude it using the new ignore syntax. This should help reducing<br \/>\nthe friction when starting with Biome:<\/p>\n<p>Two new CLI reporters have been added:<\/p>\n<p>We added the new CLI flags to better control Biome without relying on the configuration file. Here\u2019s the list:<\/p>\n<ul>\n<li><code dir=\"auto\">--format-with-errors<\/code>: CLI flag that allows to format code that contains parse errors.<\/li>\n<li><code dir=\"auto\">--css-parse-css-modules<\/code>: CLI flag to control whether CSS Modules syntax is enabled.<\/li>\n<li><code dir=\"auto\">--css-parse-tailwind-directives<\/code>: CLI flag to control whether Tailwind CSS 4.0 directives and functions are enabled.<\/li>\n<li><code dir=\"auto\">--json-parse-allow-comments<\/code>: CLI flag to control whether comments are allowed in JSON files.<\/li>\n<li><code dir=\"auto\">--json-parse-allow-trailing-commas<\/code>: CLI flag to control whether trailing commas are allowed in JSON files.<\/li>\n<\/ul>\n<p>The option <code dir=\"auto\">lineEnding<\/code> now has a variant called <code dir=\"auto\">auto<\/code> to match the operating system\u2019s expected<br \/>\nline-ending style: on Windows, this will be CRLF (<code dir=\"auto\">\\r\\n<\/code>), and on macOS \/ Linux, this will<br \/>\nbe LF (<code dir=\"auto\">\\n<\/code>).<\/p>\n<p>This allows for cross-platform projects that use Biome not to have to<br \/>\nforce one option or the other, which aligns better with Git\u2019s default behavior<br \/>\non these platforms.<\/p>\n<div class=\"expressive-code\">\n<figure class=\"frame is-terminal not-content\">\n<pre data-language=\"bash\"><code><div class=\"ec-line\"><p><span style=\"--0:#82AAFF;--1:#3B61B0\">biome<\/span><span style=\"--0:#D6DEEB;--1:#403F53\"> <\/span><span style=\"--0:#ECC48D;--1:#3B61B0\">format<\/span><span style=\"--0:#D6DEEB;--1:#403F53\"> <\/span><span style=\"--0:#82AAFF;--1:#3B61B0\">--line-ending<\/span><span style=\"--0:#D6DEEB;--1:#403F53\"> <\/span><span style=\"--0:#ECC48D;--1:#3B61B0\">auto<\/span><\/p><\/div><\/code><\/pre>\n<\/figure>\n<\/div>\n<p>More features and fixes have been shipped, like React v19 support, <code dir=\"auto\">baseUrl<\/code> support inside <code dir=\"auto\">tsconfig.json<\/code>, and moore. Refer to the changelog page for a <a target=\"_blank\" href=\"https:\/\/biomejs.dev\/internals\/changelog\/version\/2-3-0\/\">detailed breakdown of the features<\/a>.<\/p>\n<p>I want to remind you that Biome is a project led by volunteers who like programming, open-source, and embrace the Biome philosophy, so any help is welcome \ud83d\ude01<\/p>\n<p>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 <a target=\"_blank\" href=\"https:\/\/biomejs.dev\/i18n-dashboard\/\">dashboard<\/a>, you can check the supported languages and if they are up to date.<\/p>\n<p>Join our <a target=\"_blank\" href=\"https:\/\/biomejs.dev\/chat\">Discord server<\/a>, and engage with the community. Chatting with the community and being part of the community is a form of contribution.<\/p>\n<p>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!<\/p>\n<p>There are numerous aspects to explore; I assure you that you won\u2019t get bored. Here is a small list of the things you can start with:<\/p>\n<p>If you believe in the future of the project, you can also help with a financial contribution, via <a target=\"_blank\" href=\"https:\/\/opencollective.com\/biome\">Open Collective<\/a> or <a target=\"_blank\" href=\"https:\/\/github.com\/sponsors\/biomejs\">GitHub Sponsors<\/a>.<\/p>\n<p>Additionally, the project provides an <a target=\"_blank\" href=\"https:\/\/biomejs.dev\/enterprise\">enterprise support program <\/a> where a company you can employ one of the core contributors to work a specific aspect of the Biome toolchain.<\/p>\n<\/p><\/div>\n\n<br \/><a href=\"https:\/\/biomejs.dev\/blog\/biome-v2-3\/\">\u5143\u306e\u8a18\u4e8b\u3092\u78ba\u8a8d\u3059\u308b <\/a><\/p>\n","protected":false},"excerpt":{"rendered":"Oct 7, 2025 &#8211; 9 min read Biome Core Team, Biome Maintainers We\u2019re excited to announce the release of Bio [&hellip;]","protected":false},"author":1,"featured_media":20974,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[2],"tags":[],"class_list":["post-20973","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-hatena-blog"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Biome v2.3\u2014Let&#039;s bring the ecosystem closer - \u30dd\u30b1\u30b3\u30f3<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/biomejs.dev\/blog\/biome-v2-3\/\" \/>\n<meta property=\"og:locale\" content=\"ja_JP\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Biome v2.3\u2014Let&#039;s bring the ecosystem closer - \u30dd\u30b1\u30b3\u30f3\" \/>\n<meta property=\"og:description\" content=\"Oct 7, 2025 &#8211; 9 min read Biome Core Team, Biome Maintainers We\u2019re excited to announce the release of Bio [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/biomejs.dev\/blog\/biome-v2-3\/\" \/>\n<meta property=\"og:site_name\" content=\"\u30dd\u30b1\u30b3\u30f3\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-26T11:59:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/10\/biome-v2-3.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"info@pokecon.jp\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u57f7\u7b46\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"info@pokecon.jp\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593\" \/>\n\t<meta name=\"twitter:data2\" content=\"8\u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/biomejs.dev\\\/blog\\\/biome-v2-3\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/20973\\\/\"},\"author\":{\"name\":\"info@pokecon.jp\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#\\\/schema\\\/person\\\/16c9f07b1ba984d165d9aee259bda997\"},\"headline\":\"Biome v2.3\u2014Let&#8217;s bring the ecosystem closer\",\"datePublished\":\"2025-10-26T11:59:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/20973\\\/\"},\"wordCount\":1245,\"image\":{\"@id\":\"https:\\\/\\\/biomejs.dev\\\/blog\\\/biome-v2-3\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/10\\\/biome-v2-3.png\",\"articleSection\":[\"\u306f\u3066\u306a\u30d6\u30ed\u30b0\"],\"inLanguage\":\"ja\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/20973\\\/\",\"url\":\"https:\\\/\\\/biomejs.dev\\\/blog\\\/biome-v2-3\\\/\",\"name\":\"Biome v2.3\u2014Let's bring the ecosystem closer - \u30dd\u30b1\u30b3\u30f3\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/biomejs.dev\\\/blog\\\/biome-v2-3\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/biomejs.dev\\\/blog\\\/biome-v2-3\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/10\\\/biome-v2-3.png\",\"datePublished\":\"2025-10-26T11:59:00+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#\\\/schema\\\/person\\\/16c9f07b1ba984d165d9aee259bda997\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/biomejs.dev\\\/blog\\\/biome-v2-3\\\/#breadcrumb\"},\"inLanguage\":\"ja\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/biomejs.dev\\\/blog\\\/biome-v2-3\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\\\/\\\/biomejs.dev\\\/blog\\\/biome-v2-3\\\/#primaryimage\",\"url\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/10\\\/biome-v2-3.png\",\"contentUrl\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/10\\\/biome-v2-3.png\",\"width\":1200,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/biomejs.dev\\\/blog\\\/biome-v2-3\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u30db\u30fc\u30e0\",\"item\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Biome v2.3\u2014Let&#8217;s bring the ecosystem closer\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#website\",\"url\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/\",\"name\":\"\u30dd\u30b1\u30b3\u30f3\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ja\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#\\\/schema\\\/person\\\/16c9f07b1ba984d165d9aee259bda997\",\"name\":\"info@pokecon.jp\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g\",\"caption\":\"info@pokecon.jp\"},\"url\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/author\\\/infopokecon-jp\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Biome v2.3\u2014Let's bring the ecosystem closer - \u30dd\u30b1\u30b3\u30f3","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/biomejs.dev\/blog\/biome-v2-3\/","og_locale":"ja_JP","og_type":"article","og_title":"Biome v2.3\u2014Let's bring the ecosystem closer - \u30dd\u30b1\u30b3\u30f3","og_description":"Oct 7, 2025 &#8211; 9 min read Biome Core Team, Biome Maintainers We\u2019re excited to announce the release of Bio [&hellip;]","og_url":"https:\/\/biomejs.dev\/blog\/biome-v2-3\/","og_site_name":"\u30dd\u30b1\u30b3\u30f3","article_published_time":"2025-10-26T11:59:00+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/10\/biome-v2-3.png","type":"image\/png"}],"author":"info@pokecon.jp","twitter_card":"summary_large_image","twitter_misc":{"\u57f7\u7b46\u8005":"info@pokecon.jp","\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593":"8\u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/biomejs.dev\/blog\/biome-v2-3\/#article","isPartOf":{"@id":"https:\/\/pokecon.jp\/job\/20973\/"},"author":{"name":"info@pokecon.jp","@id":"https:\/\/pokecon.jp\/job\/#\/schema\/person\/16c9f07b1ba984d165d9aee259bda997"},"headline":"Biome v2.3\u2014Let&#8217;s bring the ecosystem closer","datePublished":"2025-10-26T11:59:00+00:00","mainEntityOfPage":{"@id":"https:\/\/pokecon.jp\/job\/20973\/"},"wordCount":1245,"image":{"@id":"https:\/\/biomejs.dev\/blog\/biome-v2-3\/#primaryimage"},"thumbnailUrl":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/10\/biome-v2-3.png","articleSection":["\u306f\u3066\u306a\u30d6\u30ed\u30b0"],"inLanguage":"ja"},{"@type":"WebPage","@id":"https:\/\/pokecon.jp\/job\/20973\/","url":"https:\/\/biomejs.dev\/blog\/biome-v2-3\/","name":"Biome v2.3\u2014Let's bring the ecosystem closer - \u30dd\u30b1\u30b3\u30f3","isPartOf":{"@id":"https:\/\/pokecon.jp\/job\/#website"},"primaryImageOfPage":{"@id":"https:\/\/biomejs.dev\/blog\/biome-v2-3\/#primaryimage"},"image":{"@id":"https:\/\/biomejs.dev\/blog\/biome-v2-3\/#primaryimage"},"thumbnailUrl":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/10\/biome-v2-3.png","datePublished":"2025-10-26T11:59:00+00:00","author":{"@id":"https:\/\/pokecon.jp\/job\/#\/schema\/person\/16c9f07b1ba984d165d9aee259bda997"},"breadcrumb":{"@id":"https:\/\/biomejs.dev\/blog\/biome-v2-3\/#breadcrumb"},"inLanguage":"ja","potentialAction":[{"@type":"ReadAction","target":["https:\/\/biomejs.dev\/blog\/biome-v2-3\/"]}]},{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/biomejs.dev\/blog\/biome-v2-3\/#primaryimage","url":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/10\/biome-v2-3.png","contentUrl":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/10\/biome-v2-3.png","width":1200,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/biomejs.dev\/blog\/biome-v2-3\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u30db\u30fc\u30e0","item":"https:\/\/pokecon.jp\/job\/"},{"@type":"ListItem","position":2,"name":"Biome v2.3\u2014Let&#8217;s bring the ecosystem closer"}]},{"@type":"WebSite","@id":"https:\/\/pokecon.jp\/job\/#website","url":"https:\/\/pokecon.jp\/job\/","name":"\u30dd\u30b1\u30b3\u30f3","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/pokecon.jp\/job\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ja"},{"@type":"Person","@id":"https:\/\/pokecon.jp\/job\/#\/schema\/person\/16c9f07b1ba984d165d9aee259bda997","name":"info@pokecon.jp","image":{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/secure.gravatar.com\/avatar\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g","caption":"info@pokecon.jp"},"url":"https:\/\/pokecon.jp\/job\/author\/infopokecon-jp\/"}]}},"_links":{"self":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts\/20973","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/comments?post=20973"}],"version-history":[{"count":1,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts\/20973\/revisions"}],"predecessor-version":[{"id":20975,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts\/20973\/revisions\/20975"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/media\/20974"}],"wp:attachment":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/media?parent=20973"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/categories?post=20973"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/tags?post=20973"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}