cover

Adiós ESLint y Prettier: Por qué migramos a Biome

author photo

Héctorbliss

@hectorbliss

Adiós ESLint y Prettier: Por qué migramos a Biome

Y por qué tu proyecto indie también debería considerarlo


La historia de fondo

Si llevas tiempo en el mundo del desarrollo web, probablemente tu proyecto tiene un archivo .eslintrc.js con 200 líneas de configuración, otro .prettierrc, y un par de plugins que ya no recuerdas por qué instalaste.

Eso era nuestro caso en Denik Agenda — un sistema de agendamiento que llevamos desarrollando varios meses. Llegó un punto donde:

  • ESLint tardaba más en correr que nuestros tests
  • Teníamos conflictos entre ESLint y Prettier que nunca terminaban
  • Cada PR traía el típico "fix lint" commit
  • TypeScript ya detectaba el 80% de lo que ESLint reportaba

Así que decidimos investigar alternativas. Encontramos Biome.


¿Qué es Biome?

Biome es una herramienta todo-en-uno que reemplaza ESLint, Prettier, y hasta el import sorting. Está escrita en Rust, lo que la hace absurdamente rápida.

CaracterísticaESLint + PrettierBiome
Velocidad~5-10 segundos~50-100ms
Configuración2+ archivos, múltiples plugins1 archivo JSON
Dependencias~50+ paquetes1 paquete
Formato + LintSeparados (conflictos frecuentes)Integrados

Sí, leíste bien. 10-100x más rápido.


La migración (spoiler: fue fácil)

Paso 1: Instalación

Eso es todo. Biome crea un biome.json con configuración sensata por defecto.

Paso 2: Configuración

Aquí está nuestra configuración final:

Notas importantes:

  • noExplicitAny: off — TypeScript strict ya se encarga de esto
  • noUnusedImports: warn — Queremos saberlo, pero no bloquear el CI
  • a11y: recommended: false — Desactivamos las reglas de accesibilidad por ahora (son muy estrictas para un MVP)

Paso 3: Scripts en package.json

Paso 4: Integración con CI

Agregamos una línea a nuestro workflow de GitHub Actions:

Entre npm ci y npm run typecheck. Simple.


Resultados reales

Después de la migración:

MétricaAntesDespués
Tiempo de lint~8 segundos~70ms
Archivos de config41
Dependencias de dev6758
Conflictos lint/formatFrecuentesCero

¿Qué perdimos?

Siendo honestos:

  1. Algunas reglas específicas de ESLint — Biome no tiene el 100% de las reglas de ESLint. Pero tiene las importantes.

  2. Plugins de comunidad — No hay eslint-plugin-tailwind o similares. Aunque honestamente, rara vez los necesitas.

  3. Familiaridad — Si tu equipo tiene años usando ESLint, hay una curva de aprendizaje (mínima).


¿Deberías migrar?

Sí, si:

  • Eres indie/startup y valoras la simplicidad
  • Tu CI tarda más de 2 segundos en lint
  • Estás cansado de configurar ESLint cada proyecto nuevo
  • Usas TypeScript estricto (que ya cubre mucho)

Quizás no, si:

  • Tienes reglas de ESLint muy específicas de tu empresa
  • Dependes de plugins muy especializados
  • Tu equipo grande ya tiene todo configurado y funcionando

Conclusión

Biome no es perfecto, pero para proyectos indie es exactamente lo que necesitamos: rápido, simple, y que funciona.

La configuración que antes me tomaba una hora ahora toma 5 minutos. El CI que tardaba 10 segundos ahora tarda milisegundos. Y lo más importante: dejé de pelear con herramientas y volví a escribir código.

Si estás empezando un proyecto nuevo o considerando limpiar tu setup de linting, dale una oportunidad a Biome. Probablemente no vuelvas atrás.


¿Tienes preguntas sobre la migración? Encuentra el código completo en nuestro repositorio.

— El equipo de Denik

meta cover

Skeletons. ¿Qué son y cuando utilizarlos?

Checa este otro Post

meta cover

Usando inView de Motion One para animar elementos que entran en pantalla

Checa este otro Post

¡Nuevo curso!

Animaciones web con React + Motion 🧙🏻