Biome and the Future of JavaScript Tooling
Episode
62 min
Read time
2 min
Topics
Software Development, Product & Tech Trends, Crypto & Web3
AI-Generated Summary
Key Takeaways
- ✓Unified toolchain migration: Teams switching from ESLint plus Prettier to Biome can run `biome migrate eslint` and `biome migrate prettier` to auto-generate a Biome config matching prior settings. Running `biome lint --suppress` with a reason like "migration" suppresses all existing violations immediately, letting teams adopt Biome without fixing legacy issues first, then address lint errors progressively over time.
- ✓Type-aware linting without TypeScript compiler: Biome ships type inference that resolves types across files and dependencies without invoking the TypeScript compiler. This enables rules equivalent to TypeScript-ESLint's `no-floating-promises` and `no-unnecessary-conditions` with lower overhead. The engine uses a semantic model per file combined with the module graph to flatten expressions and infer value changes across scopes.
- ✓Module graph enables cross-file analysis: Biome's language-agnostic module graph collects all project files — HTML, CSS, JavaScript, Vue, Svelte, Astro — into a dependency tree before linting begins. This powers rules like no-import-cycles and a CSS class validator that checks whether every class referenced in component files is actually defined somewhere in the project's stylesheet assets.
- ✓Plugin system scope should stay narrow: Biome's GritQL-based plugin DSL is intentionally scoped to project-specific rules involving sensitive or codebase-specific logic. Broad plugin ecosystems, as seen with Webpack and ESLint, degrade performance and block innovation because maintainers cannot change internals without breaking third-party plugins. An upcoming minor release adds auto-fix code actions to GritQL plugins, enabling lightweight codemods inside the same tool.
- ✓Static, predictable configuration reduces maintenance burden: ESLint's v9 flat config rewrite addressed years of recursive, hard-to-debug configuration caused by dynamic plugin layering. Biome applies this lesson from the start: one config file with sensible defaults, no required plugins for basic use, and `biome init` to scaffold explicit defaults locally. Editor behavior via LSP matches CLI output exactly, eliminating environment-specific formatting discrepancies.
What It Covers
Emanuele Stopa, creator of Biome and senior systems engineer at Cloudflare, joins TypeScript-ESLint author Josh Goldberg to trace Biome's origins from the defunct Rome project, explain how Rust-based unified toolchains outperform JavaScript-based predecessors, and detail Biome's module graph architecture enabling cross-file lint analysis without the TypeScript compiler.
Key Questions Answered
- •Unified toolchain migration: Teams switching from ESLint plus Prettier to Biome can run `biome migrate eslint` and `biome migrate prettier` to auto-generate a Biome config matching prior settings. Running `biome lint --suppress` with a reason like "migration" suppresses all existing violations immediately, letting teams adopt Biome without fixing legacy issues first, then address lint errors progressively over time.
- •Type-aware linting without TypeScript compiler: Biome ships type inference that resolves types across files and dependencies without invoking the TypeScript compiler. This enables rules equivalent to TypeScript-ESLint's `no-floating-promises` and `no-unnecessary-conditions` with lower overhead. The engine uses a semantic model per file combined with the module graph to flatten expressions and infer value changes across scopes.
- •Module graph enables cross-file analysis: Biome's language-agnostic module graph collects all project files — HTML, CSS, JavaScript, Vue, Svelte, Astro — into a dependency tree before linting begins. This powers rules like no-import-cycles and a CSS class validator that checks whether every class referenced in component files is actually defined somewhere in the project's stylesheet assets.
- •Plugin system scope should stay narrow: Biome's GritQL-based plugin DSL is intentionally scoped to project-specific rules involving sensitive or codebase-specific logic. Broad plugin ecosystems, as seen with Webpack and ESLint, degrade performance and block innovation because maintainers cannot change internals without breaking third-party plugins. An upcoming minor release adds auto-fix code actions to GritQL plugins, enabling lightweight codemods inside the same tool.
- •Static, predictable configuration reduces maintenance burden: ESLint's v9 flat config rewrite addressed years of recursive, hard-to-debug configuration caused by dynamic plugin layering. Biome applies this lesson from the start: one config file with sensible defaults, no required plugins for basic use, and `biome init` to scaffold explicit defaults locally. Editor behavior via LSP matches CLI output exactly, eliminating environment-specific formatting discrepancies.
- •Rust selection driven by memory and WASM portability: Rome's TypeScript implementation consumed roughly eight gigabytes of memory bundling itself, hitting Node.js limits. Rust's ownership model manages memory without a garbage collector, resolving that ceiling. Rust also compiles to WASM via `wasm-bindgen` with minimal friction, enabling Biome's browser-based playground and potential embedding in other runtimes without maintaining a separate codebase.
Notable Moment
Stopa reveals that Biome's forced rebranding from Rome happened not by strategic choice but because the NPM publish tokens expired after the company shut down, making it impossible to release new versions. The team had resisted renaming due to the overhead involved, but an infrastructure failure made the move unavoidable.
Episode Transcript
Modern web development requires an ever growing collection of tools, including formatters, linters, bundlers, and plugins. Each tool typically has its own configurations, dependencies, and performance cost. As applications grow more complex, the overhead of maintaining this toolchain becomes a real burden. BIOME is an open source toolchain for web projects that brings formatting and linting together in a single, fast, opinionated tool. It's built in Rust and is designed to be a drop in replacement for Prettier and ESLint, with sensible defaults, minimal configuration, and consistent behavior across the CLI and editor environments. Biome also introduces a module graph that enables cross file analysis and type aware lint rules that don't require the TypeScript compiler. Amanoela Stopa, known as Emma, is a senior systems engineer at Cloud Flare, a lead at Astro and the creator and lead maintainer of Biome. In this episode, Emma joins Josh Goldberg to discuss the history of Biome, how linters and formatters work under the hood, what makes Biome's architecture fundamentally different from the tools it replaces, and what's coming next for the project and its community. This episode is hosted by Josh Goldberg, an independent full time open source developer. Josh works on projects in the TypeScript ecosystem, most notably TypeScript ESLint, a powerful static analysis toolset for JavaScript and TypeScript. He is also the author of The O'Reilly Learning TypeScript book, a Microsoft MVP for developer technologies, and a cofounder of SquiggleComp, a conference for excellent web developer tooling. Find Josh on Blue Sky, Fostodon, and dot com as Joshua k Goldberg. With me today is Emmanuel Stopa, open source maintainer at Cloudflare, creator of Biome and lead at Astro. Emma, welcome to Software Engineering Daily. Thank you for having me, Josh. How's it going? Things are good. I'm excited to talk to you. You've done quite a few interesting things in tech. Recently, you've been on Astro. You joined Cloudflare. You're creator, lead maintainer of Biome. Before we get into all that, how did you get into coding? Well, as a maybe the majority of the developers out there were like, I want to develop video games. So that's essentially why I got into coding. Things didn't plan as I I thought they were. I went to university where they were supposed to teach game design, but in the year where I was supposed to join that class, there was no professor. So I had to choose another class, and eventually, I haven't done anything around video games. So I ended up doing PHP, Postgres, and all the stuff that web dev was at that time. And that's how I started. So then it was PHP developer, jQuery, and so on until like React and all the cool kids that we have now. Do you have any emotions that come to mind when you think about developing front end full stack apps in PHP and jQuery? Yes. Because I see a lot of partners that they used to use back in …
Get the full transcript (9,710 words) + summary by email — free
One-time email with the complete transcript and AI summary of this episode. No account needed.
One email, no spam. We’ll also show you what SignalCast does.
You just read a 3-minute summary of a 59-minute episode.
Get Software Engineering Daily summarized like this every Monday — plus up to 2 more podcasts, free.
Pick Your Podcasts — FreeKeep Reading
More from Software Engineering Daily
AI-Powered Threats to the Software Supply Chain
Aug 4 · 57 min
The Nathan Barry Show
The Ultimate AI Masterclass For Businesses in 2026 | 117
Feb 26
More from Software Engineering Daily
Docker and Sandboxing AI Agents
Jul 30 · 50 min
The Changelog
The best coders should exit the feed (News)
Oct 6
Books, tools, and gear mentioned in this episode
SignalCast may earn commission on purchases via these links.
Tools
- BiomeBy guest
“Emanuele Stopa, creator of Biome and senior systems engineer at Cloudflare, joins TypeScript-ESLint author Josh Goldberg to trace Biome's origins from the defunct Rome project, explain how Rust-based unified toolchains outperform JavaScript-based predecessors, and detail Biome's module graph architecture enabling cross-file lint analysis without the TypeScript compiler.”
“Teams switching from ESLint plus Prettier to Biome can run `biome migrate eslint` and `biome migrate prettier` to auto-generate a Biome config matching prior settings.”
“Teams switching from ESLint plus Prettier to Biome can run `biome migrate eslint` and `biome migrate prettier` to auto-generate a Biome config matching prior settings.”
“Emanuele Stopa, creator of Biome and senior systems engineer at Cloudflare, joins TypeScript-ESLint author Josh Goldberg to trace Biome's origins from the defunct Rome project, explain how Rust-based unified toolchains outperform JavaScript-based predecessors, and detail Biome's module graph architecture enabling cross-file lint analysis without the TypeScript compiler.”
“Emanuele Stopa, creator of Biome and senior systems engineer at Cloudflare, joins TypeScript-ESLint author Josh Goldberg to trace Biome's origins from the defunct Rome project, explain how Rust-based unified toolchains outperform JavaScript-based predecessors, and detail Biome's module graph architecture enabling cross-file lint analysis without the TypeScript compiler.”
“Biome's GritQL-based plugin DSL is intentionally scoped to project-specific rules involving sensitive or codebase-specific logic.”
“Rust also compiles to WASM via `wasm-bindgen` with minimal friction, enabling Biome's browser-based playground and potential embedding in other runtimes without maintaining a separate codebase.”
“Broad plugin ecosystems, as seen with Webpack and ESLint, degrade performance and block innovation because maintainers cannot change internals without breaking third-party plugins.”
More from Software Engineering Daily
We summarize every new episode. Want them in your inbox?
Similar Episodes
Related episodes from other podcasts
The Nathan Barry Show
Feb 26
The Ultimate AI Masterclass For Businesses in 2026 | 117
The Changelog
Oct 6
The best coders should exit the feed (News)
Latent Space
Jul 28
Codex from 0 to 10M Users: Building ChatGPT Work — Akshay Nathan, OpenAI
Lenny's Podcast
Jul 26
Anthropic’s first technical PM on token maxing, the jagged edge, and living in the future | Dianne Penn
The Joe Rogan Experience
Jul 22
#2529 - Zach Bush
Explore Related Topics
This podcast is featured in Best Cybersecurity Podcasts (2026) — ranked and reviewed with AI summaries.
Read this week's Software Engineering Podcast Insights — cross-podcast analysis updated weekly.
You're clearly into Software Engineering Daily.
Every Monday, we deliver AI summaries of the latest episodes from Software Engineering Daily and 192+ other podcasts. Free for one show.
Start My Monday DigestNo credit card · Unsubscribe anytime