Off late, I have been struggling with ESLint. The new flat file config has caused more issues for existing projects while updating. Most major projects like Next.js are sticking to the older version, and the migration guide is inadequate. This post will dissect three prominent players in the field: ESLint, Oxlint, and Biome. Each offers unique advantages but falls short of providing an all-encompassing solution.
ESLint
ESLint is the gold standard. The primary reason for this is it’s been around for a while, battle-tested by hundreds of projects, and has a robust plugin ecosystem that allows you to write custom rules. While the new flat file config promises faster parsing and reduced complexity, it has caused significant migration headaches for teams with heavily customized setups. The documentation for this transition is inadequate, leaving many developers stranded. Still, ESLint’s extensibility and its ability to cater to nearly every conceivable use case ensure its place as an indispensable tool in most teams’ toolkits.
Oxlint
Oxlint positions itself as a modern alternative, built for speed and simplicity. Its opinionated nature reduces configuration overhead, which can be a breath of fresh air compared to the labyrinthine setup ESLint sometimes requires.
However, Oxlint is not a full replacement. The ecosystem is young, and edge cases abound. Teams with highly specialized linting needs will likely find gaps in coverage that make Oxlint more of a supplementary tool than a standalone solution. Still, for projects where performance is paramount, Oxlint is worth considering.
Biome
Biome’s pitch is ambitious: unify linting and formatting under one roof. On paper, this should simplify workflows and eliminate the need to juggle multiple tools. In particular, being able to migrate from an existing codebase that uses ESLint and Prettier is far from production-ready.
Its rule set and configuration options are limited compared to ESLint, and migration is anything but straightforward. While the tool has promise, its nascent community and sparse ecosystem mean that it’s not ready for prime time. For teams looking for a quick win, Biome will likely disappoint—at least for now.
The state of linting and formatting tools is one of evolution rather than revolution. On one end, you have a boring, legacy project that is feature-rich, mature, battle-tested, and extensible but is slow to run on larger codebases. On the other end, you have modern, Rust-based tools that promise to be blazing fast but lack maturity and a good migration path for preexisting repos. For teams navigating this space, a pragmatic approach is best. Leverage the strengths of newer tools like Oxlint and Biome where they make sense, but don’t expect to abandon ESLint entirely just yet. The future may hold a more unified solution, but for now, careful tool selection and a willingness to adapt remain the keys to success.