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.
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
Preparing for Q-Day
Jun 16 · 46 min
The Nathan Barry Show
The Ultimate AI Masterclass For Businesses in 2026 | 117
Feb 26
More from Software Engineering Daily
Developing Multiplayer Games in Godot
Jun 11 · 46 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. As an Amazon Associate, SignalCast earns from qualifying purchases.
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?
Preparing for Q-Day
Developing Multiplayer Games in Godot
SED News: Apple’s AI Problem, The Real Business Model of AI, and Token Cost Reckoning
Web Native Game Development
The Hardware Bottleneck AI Can’t Fix
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)
The Vergecast
Jun 15
# The **epic** story of Markdown
Latent Space
May 28
The Age of Async Agents — Cognition's Walden Yan & OpenInspect's Cole Murray
Eye on AI
May 28
Is ChatGPT Conscious? A Pioneer of AI Explains | Dr. Terry Sejnowski
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 up to 3 shows.
Start My Monday DigestNo credit card · Unsubscribe anytime