Que es Biome y por que deberias migrar hoy en 2026?
Biome es el sucesor de ESLint y Prettier escrito en Rust por el creador de Rome. En 2026, con la version 1.9 estable, reemplaza a ESLint + Prettier + import-sort + jsdoc-checker con un solo binario nativo, zero dependencias en produccion y un rendimiento 80-200x superior.
Benchmarks reales (proyecto Next.js 16 tipico, 12.000 archivos):
- ESLint 9 + Prettier 3: 12.4s + 4.2s = 16.6s
- Biome 1.9 (lint + format): 0.08s
- Espacio en disco node_modules: ESLint/Prettier = 384MB, Biome = 11MB
- Dependencias transitivas: ESLint/Prettier = 287 paquetes, Biome = 0
js
# Instala Biome globalmente (un solo binario, ~11 MB, sin deps)
npm install --save-dev @biomejs/biome
# O usa el instalador independiente (standalone, sin Node)
curl -fsSL https://biomejs.dev/install.sh | bash
1. Migracion automatica desde ESLint y Prettier en 2026
Biome incluye un comando migrate que importa tu .eslintrc, prettier.config.js, .editorconfig y reglas de Tailwind class-sort automaticamente. La migracion completa de un proyecto grande tarda menos de 5 minutos.
js
# 1. Instalar Biome
npm install --save-dev @biomejs/biome
# 2. Migrar desde ESLint y Prettier (lee tu config actual y la traduce)
npx @biomejs/biome migrate eslint --write
npx @biomejs/biome migrate prettier --write
# 3. Ejecutar el primer lint+format (reemplaza eslint . y prettier --write .)
npx @biomejs/biome check --write
npx @biomejs/biome format --write .
Que reglas cubre Biome out-of-the-box (sin plugins):
| Regla | ESLint + Plugin | Biome 1.9 |
|---|---|---|
| TypeScript rules | @typescript-eslint/eslint-plugin | Incluido |
| React rules | eslint-plugin-react + react-hooks | Incluido |
| Next.js rules | eslint-config-next | Incluido |
| Import sort | eslint-plugin-import | Incluido |
| JSX a11y | eslint-plugin-jsx-a11y | Incluido |
| Tailwind class sort | eslint-plugin-tailwindcss | Incluido (2026) |
| Json, CSS, HTML | no soportado | Incluido nativamente |
2. Configuracion minima para un proyecto Next.js 16 en 2026
El biome.json moderno es declarativo, soporta JSON Schema y se valida automaticamente en el editor con extension oficial para VS Code, Cursor y Zed.
js
// biome.json (configuracion recomendada para Next.js + React + TS en 2026)
{
"$schema": "./node_modules/@biomejs/biome/configuration_schema.json",
"vcs": { "enabled": true, "clientKind": "git", "useIgnoreFile": true },
"files": {
"ignoreUnknown": false,
"includes": ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.json", "**/*.css"]
},
"formatter": {
"enabled": true,
"indentStyle": "space",
"indentWidth": 2,
"lineWidth": 100,
"lineEnding": "lf"
},
"linter": {
"enabled": true,
"rules": {
"recommended": true,
"correctness": { "noUnusedImports": "error", "noUnusedVariables": "error" },
"style": { "useImportType": "error", "useNodejsImportProtocol": "error" },
"suspicious": { "noExplicitAny": "warn" },
"a11y": { "recommended": true },
"performance": { "recommended": true }
}
},
"javascript": {
"formatter": {
"quoteStyle": "single",
"semicolons": "asNeeded",
"trailingCommas": "all"
}
}
}
3. Integracion con el editor y CI en 2026
Biome trae LSP nativo que funciona en VS Code, Cursor, Zed, Neovim y Helix. Sin daemon, sin worker processes: el LSP arranca en 8ms y el formateo al guardar es instantaneo.
En CI, biome ci falla el pipeline si hay errores, mucho mas rapido que ESLint + Prettier:
js
# .github/workflows/ci.yml — bloquea PRs con errores de lint o format
name: CI
on: [pull_request]
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: jdxcode/setup-biome@v2 # setup automatico
- run: biome ci .
# Termina en <2 segundos en proyectos grandes
js
// .vscode/settings.json — format on save con Biome
{
"editor.defaultFormatter": "biomejs.biome",
"editor.formatOnSave": true,
"editor.codeActionsOnSave": { "quickfix.biome": "explicit", "source.biome": "explicit" },
"[typescript]": { "editor.defaultFormatter": "biomejs.biome" },
"[typescriptreact]": { "editor.defaultFormatter": "biomejs.biome" }
}
4. Cuando NO migrar a Biome en 2026
Honestidad: hay casos donde Biome no es la mejor opcion todavia.
- Reglas custom muy especificas: si tu equipo mantiene 40+ reglas custom de ESLint internas, la portabilidad requiere reescribirlas en Rust. Coste > beneficio a corto plazo.
- Plugins legacy de Vue/Svelte: Biome 1.9 soporta Vue y Svelte basico, pero el ecosistema de plugins no es tan maduro como el de ESLint.
- Proyectos con prettier-plugin-tailwindcss complejo: aunque Biome lo soporta, la migracion puede requerir ajustes manuales.
- Equipos pequenos con tooling estable: si tu setup actual funciona, el ahorro de 16s por CI no compensa el coste de migracion si tienes 5 PRs por dia.
Para todo lo demas — el 95% de proyectos JavaScript/TypeScript en 2026 — Biome es objetivamente mejor: mas rapido, menos deps, mejor DX, mismo resultado.
5. Caso real: migrar un SaaS en produccion
Migrar un SaaS en produccion con 80k lineas de codigo tarda menos de una hora:
js
# 1. Auditoria previa (sin tocar nada)
npx @biomejs/biome migrate eslint --dry-run
# 2. Backup y migracion
cp .eslintrc.json .eslintrc.json.bak
npx @biomejs/biome migrate eslint --write
npx @biomejs/biome migrate prettier --write
# 3. Desactivar ESLint en VS Code y CI
# 4. Eliminar dependencias
npm uninstall eslint prettier eslint-plugin-react \
@typescript-eslint/eslint-plugin \
@typescript-eslint/parser eslint-config-next
# 5. Actualizar scripts en package.json
{
"scripts": {
"lint": "biome check",
"lint:fix": "biome check --write",
"format": "biome format --write ."
}
}
# 6. Validar en CI
biome ci .
