Skip to main content

developer tooling opinions

1 min read toolingbiomedx

the case for fewer tools

every tool in your stack is a thing that can break, a thing that needs updating, and a thing that new team members need to learn. the javascript ecosystem has a habit of solving one problem with three tools and a plugin system.

i used to run eslint + prettier + separate configs for each. it worked, but it was slow, the configs conflicted occasionally, and debugging formatting issues was never fun.

biome

biome replaces both eslint and prettier with a single binary. it’s fast — noticeably fast, not just benchmarks-fast. it formats and lints in one pass. the defaults are sensible. configuration is minimal.

the trade-off is fewer rules and less ecosystem coverage than eslint. but honestly, most eslint plugins i used were enforcing opinions i could just as easily enforce through code review. the rules that matter — no unused variables, consistent imports, basic correctness checks — biome handles well.

for this site i use: single quotes, always semicolons, 2-space indent. that’s basically the entire config.

what about prettier?

prettier is fine. i’m not anti-prettier. but running two tools to do what one tool can do faster doesn’t make sense to me. if you’re starting a new project, try biome first.

the broader picture

the trend toward rust-based tooling (biome, oxlint, rspack) is good for the ecosystem. faster tools mean tighter feedback loops. tighter feedback loops mean more iteration. more iteration means better software.

i don’t think we need to rewrite everything in rust. but the tools that run on every save, every commit, every ci pipeline — those are worth optimizing.

what i’m watching

  • oxlint — if it gets plugin support, it could be interesting as a biome alternative
  • deno and bun — both trying to collapse the toolchain. deno’s approach of including a formatter, linter, and test runner in the runtime is compelling
  • astro — keeps getting better at the thing it does well: content-driven sites with minimal client js