Skip to main content
ES

Emmanuel Stopa

Emanuele Stopa**unified Toolchain Migration**type-aware Linting Without Typescript Compiler**module Graph Enables Cross-file Analysis**plugin System Scope Should Stay Narrow
1episode
1podcast

We have 1 summarized appearance for Emmanuel Stopa so far. Browse all podcasts to discover more episodes.

Featured On 1 Podcast

Top resources Emmanuel Stopa mentions

Books, tools, and gear cited across podcast appearances. Ranked by frequency.

SignalCast may earn commission on purchases via affiliate links on each resource page.

All Appearances

1 episode
Software Engineering Daily

Biome and the Future of JavaScript Tooling

Software Engineering Daily
63 minCreator and Lead Maintainer of Biome, Senior Systems Engineer at Cloudflare, Lead at Astro

AI Summary

→ 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 INSIGHTS - **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. 💼 SPONSORS [{"name": "GuardSquare", "url": "https://www.guardsquare.com"}, {"name": "TigerData", "url": "https://tigerdata.com"}, {"name": "Vision Agents by Stream", "url": "https://visionagents.ai"}] 🏷️ JavaScript Tooling, Rust Performance, Static Analysis, ESLint Migration, Module Graph, Open Source Maintenance

Never miss Emmanuel Stopa's insights

Subscribe to get AI-powered summaries of Emmanuel Stopa's podcast appearances delivered to your inbox weekly.

Start Free Today

No credit card required • Free tier available