Biome 17 🧹 Removing Old Tooling — Package cleanup and config file deletion
The migration commands port the configuration, but the old tooling stays in the project until it is removed. The eslint and the prettier packages, the plugins, the config files, the ignore files, and the editor extensions are the redundant after the Biome configuration is in place, and the removal is the step that completes the switch. The Biome documentation states the removal as the final step: “Once you are satisfied with the result, remove ESLint, Prettier, and their plugins from your dependencies, and replace their editor extensions with Biome’s” . The removal is not the cleanup for the aesthetics. It is the mechanism that prevents the two tools from running on the same files.
The danger of the incomplete removal is the conflict. The Biome documentation warns: “Two formatters running on save will fight over the same file” . The Prettier extension and the Biome extension both register as the formatter, and the editor runs the one that wins the default formatter setting, but the other one may still run on the save or the format command. The two tools produce the different formatting for the same file, and the diff churns. The same applies to the ESLint and the Biome linter: the two report the different diagnostics, and the developer sees the duplicate errors. The removal is the mechanism that keeps the single source of truth.
Key point: The removal has three parts: the config files, the packages, and the editor extensions. The config files are the .eslintrc*, the eslint.config.*, the .prettierrc*, the prettier.config.*, the .eslintignore, and the .prettierignore. The packages are the eslint, the prettier, the eslint-config-prettier, the plugins, and the parsers. The editor extensions are the ESLint and the Prettier, and they are replaced by the Biome extension. The removal is the step that completes the migration, and the incomplete removal is the source of the conflict.
Why the removal is the completion step
The conflict problem. The ESLint and the Prettier extensions both run on the save, and the Biome extension runs on the save. The three tools fight over the same file, and the winner is the one that the editor’s editor.defaultFormatter setting selects, but the others may still run on the Format Document command or the code action. The conflict is the mechanism that produces the churn, and the churn is the reason the removal is not optional .
The duplicate-diagnostic problem. The ESLint extension and the Biome extension both report the diagnostics in the Problems panel. The same unused variable appears twice, once from the ESLint rule and once from the Biome rule. The duplicate is the noise that obscures the real problems, and the noise is the reason the removal is the completion. The two linters disagree on the edge cases, and the disagreement is the source of the confusion.
The package-size problem. The eslint, the prettier, the plugins, and the parsers are the large dependencies. The node_modules carries the old tooling alongside the Biome, and the install is the slower, and the bundle is the larger if the dependencies leak into the build. The removal is the mechanism that keeps the dependency tree clean, and the clean tree is the reason the install is the faster.
The script problem. The package.json scripts reference the old tools: the "lint": "eslint .", the "format": "prettier --write .", and the "lint:fix": "eslint . --fix". The scripts are the mechanism that the CI and the pre-commit hook use, and the scripts point to the removed tools after the removal. The update is the mechanism that keeps the scripts working, and the working scripts are the reason the migration is the complete.
The config-file problem. The .eslintrc and the .prettierrc are the files that the old tools read. The Biome does not read them, and the presence of the files is the confusion for the developer who does not know which tool is active. The deletion is the mechanism that removes the ambiguity, and the ambiguity removal is the reason the deletion is the completion.
a. The config file deletion and the ignore files
The config files are the .eslintrc* (the .eslintrc.js, the .eslintrc.cjs, the .eslintrc.json, the .eslintrc.yaml, the .eslintrc.yml), the eslint.config.* (the flat config: the eslint.config.js, the eslint.config.mjs, the eslint.config.cjs), the .prettierrc* (the .prettierrc, the .prettierrc.js, the .prettierrc.cjs, the .prettierrc.json, the .prettierrc.yaml, the .prettierrc.yml), and the prettier.config.* (the prettier.config.js, the prettier.config.cjs, the prettier.config.mjs) .
# The config file deletion
rm -f .eslintrc* eslint.config.* .prettierrc* prettier.config.*
The rm -f is the mechanism that deletes the files without the error for the missing ones. The globs are the mechanism that covers the multiple extensions, and the coverage is the reason the single command removes the set.
The ignore files are the .eslintignore and the .prettierignore. The two files are the patterns that the old tools skip, and the patterns are the mechanism that the Biome’s files.includes array replaces .
# The ignore file deletion
rm -f .eslintignore .prettierignore
The .eslintignore and the .prettierignore are the mechanism that the old tools used, and the Biome’s files.includes is the replacement. The deletion is the mechanism that removes the files that the Biome does not read, and the removal is the reason the deletion is the completion.
The YAML config is the exception. The Biome CLI cannot parse the YAML ESLint config (the .eslintrc.yaml and the .eslintrc.yml), and the migration fails. The workaround is to convert the YAML to the JSON manually, run the migration, and then delete the YAML file .
# The YAML config conversion
# Convert the .eslintrc.yaml to the .eslintrc.json manually,
# then run the migration, then delete the YAML file.
The YAML conversion is the mechanism that makes the migration possible, and the manual step is the reason the YAML config is the exception.
b. The package removal and the script update
The packages are the eslint, the prettier, the eslint-config-prettier, the plugins, and the parsers. The removal is the single command with the package names, and the command is the mechanism that removes the dependencies .
# The package removal
npm uninstall eslint prettier eslint-config-prettier \
@eslint/js typescript-eslint \
eslint-plugin-react eslint-plugin-react-hooks \
eslint-plugin-jsx-a11y eslint-plugin-unicorn \
eslint-plugin-import eslint-plugin-simple-import-sort \
@typescript-eslint/eslint-plugin @typescript-eslint/parser \
prettier-plugin-tailwindcss
The npm uninstall is the mechanism that removes the packages from the package.json and the node_modules. The list is the mechanism that covers the common packages, and the coverage is the reason the command is the single step. The pnpm remove and the yarn remove are the equivalents for the other package managers.
The eslint-config-prettier is the package that disables the ESLint formatting rules, and the Biome does not need it because the Biome has the no formatter-linter conflict . The removal is the mechanism that removes the redundant dependency, and the redundancy is the reason the package is in the list.
The @prettier/sync and the prettier-plugin-tailwindcss are the Prettier plugins, and the Biome’s built-in support replaces the latter . The removal is the mechanism that removes the plugins, and the removal is the reason the plugins are in the list.
The scripts are the package.json scripts that reference the old tools. The update is the mechanism that replaces the eslint and the prettier commands with the Biome commands .
// The script update
{
"scripts": {
"lint": "biome check .",
"lint:fix": "biome check . --write",
"format": "biome format . --write",
"ci": "biome ci ."
}
}
The "lint": "biome check ." is the mechanism that replaces the "lint": "eslint .". The "lint:fix": "biome check . --write" is the mechanism that replaces the "lint:fix": "eslint . --fix". The "format": "biome format . --write" is the mechanism that replaces the "format": "prettier --write .". The "ci": "biome ci ." is the mechanism that runs the read-only check in the pipeline .
The editor extensions are the separate step. The ESLint extension and the Prettier extension are the installed extensions, and the Biome extension is the replacement. The uninstall is the mechanism that removes the old extensions, and the install is the mechanism that adds the Biome extension.
// The VS Code settings
{
"editor.defaultFormatter": "biomejs.biome",
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.fixAll.biome": "explicit"
}
}
The editor.defaultFormatter is the mechanism that selects the Biome as the formatter, and the editor.formatOnSave is the mechanism that runs the formatter on the save. The source.fixAll.biome is the mechanism that applies the safe fixes on the save .
Complete Example Session
# ============================================
# PART 1: THE CONFIG FILE DELETION
# ============================================
# The ESLint and the Prettier config files.
rm -f .eslintrc* eslint.config.* .prettierrc* prettier.config.*
# The ignore files.
rm -f .eslintignore .prettierignore
# The globs cover the multiple extensions.
# ============================================
# PART 2: THE PACKAGE REMOVAL
# ============================================
# The core packages and the plugins.
npm uninstall eslint prettier eslint-config-prettier
# The ESLint plugins.
npm uninstall @eslint/js typescript-eslint eslint-plugin-react
# The Prettier plugins.
npm uninstall prettier-plugin-tailwindcss
# ============================================
# PART 3: THE SCRIPT UPDATE
# ============================================
# package.json
{
"scripts": {
"lint": "biome check .",
"lint:fix": "biome check . --write",
"format": "biome format . --write",
"ci": "biome ci ."
}
}
# ============================================
# PART 4: THE EDITOR EXTENSION
# ============================================
# The ESLint extension is uninstalled.
# The Prettier extension is uninstalled.
# The Biome extension is installed.
# ============================================
# PART 5: THE VS CODE SETTINGS
# ============================================
# .vscode/settings.json
{
"editor.defaultFormatter": "biomejs.biome",
"editor.formatOnSave": true
}
# ============================================
# PART 6: THE YAML CONFIG
# ============================================
# The .eslintrc.yaml is converted to the .eslintrc.json manually.
# The migration runs on the JSON.
# The YAML file is deleted.
# ============================================
# PART 7: THE VERIFICATION
# ============================================
# The biome check . runs without the errors.
# The editor formats on the save with the Biome.
# The package.json has no eslint or prettier.
# ============================================
# PART 8: THE DEPENDENCY CHECK
# ============================================
# The npm ls eslint prettier shows the empty tree.
# The node_modules has no eslint or prettier.
# ============================================
# PART 9: THE CI UPDATE
# ============================================
# .github/workflows/ci.yml
# - name: Biome check
# run: npx biome ci .
# ============================================
# PART 10: THE CHECKLIST
# ============================================
# [ ] The config files are deleted.
# [ ] The ignore files are deleted.
# [ ] The packages are uninstalled.
# [ ] The scripts are updated.
# [ ] The editor extensions are replaced.
# [ ] The VS Code settings are updated.
# [ ] The CI runs the biome ci.
The ten parts covered the config file deletion, the package removal, the script update, the editor extension, the VS Code settings, the YAML config, the verification, the dependency check, the CI update, and the checklist. The through-line is that the removal is the completion, and the completion is the conflict prevention.
Quick Reference
The config files to delete
| File | Tool |
|---|---|
.eslintrc.* | ESLint |
eslint.config.* | ESLint (flat) |
.eslintignore | ESLint |
.prettierrc.* | Prettier |
prettier.config.* | Prettier |
.prettierignore | Prettier |
The packages to remove
| Package | Reason |
|---|---|
eslint | Replaced by Biome |
prettier | Replaced by Biome |
eslint-config-prettier | Not needed (no conflict) |
| The ESLint plugins | Replaced by the Biome rules |
| The Prettier plugins | Replaced by the Biome support |
The script update
| Old script | New script |
|---|---|
eslint . | biome check . |
eslint . --fix | biome check . --write |
prettier --write . | biome format . --write |
| (none) | biome ci . |
The editor settings
| Setting | Value |
|---|---|
editor.defaultFormatter | "biomejs.biome" |
editor.formatOnSave | true |
source.fixAll.biome | "explicit" |
Best Practices
✅ Do This:
# Delete the config files with the globs
rm -f .eslintrc* eslint.config.* .prettierrc* prettier.config.* // ✅
# Remove the packages
npm uninstall eslint prettier eslint-config-prettier // ✅
# Update the scripts to the Biome commands
"lint": "biome check ." // ✅
# Install the Biome extension and set the default formatter
"editor.defaultFormatter": "biomejs.biome" // ✅
❌ Don’t Do This:
# Leave the old config files
# The Biome does not read them, and the developer is confused. // ❌
# Keep the ESLint and Prettier extensions
# The two formatters fight over the same file. // ❌
# Keep the old scripts
# The scripts reference the removed tools. // ❌
Common Pitfalls
| Pitfall | Why It Happens | Fix |
|---|---|---|
| The editor still formats with Prettier | The Prettier extension is installed | Uninstall the extension |
| The CI fails after the removal | The script references the removed tool | Update the script to the Biome command |
| The YAML config is not migrated | The Biome CLI cannot parse the YAML | Convert to the JSON manually |
The .gitignore is not respected | The VCS integration is disabled | Enable the vcs.useIgnoreFile |
Real-World Examples
1. The config file deletion
rm -f .eslintrc* eslint.config.* .prettierrc* prettier.config.*
2. The ignore file deletion
rm -f .eslintignore .prettierignore
3. The package removal
npm uninstall eslint prettier eslint-config-prettier
4. The plugin removal
npm uninstall eslint-plugin-react prettier-plugin-tailwindcss
5. The script update
{ "lint": "biome check ." }
6. The CI script
{ "ci": "biome ci ." }
7. The editor formatter
{ "editor.defaultFormatter": "biomejs.biome" }
8. The format on save
{ "editor.formatOnSave": true }
9. The YAML conversion
The .eslintrc.yaml is converted to the JSON manually.
10. The verification
npm ls eslint prettier # The empty tree
Visual
The Removal Steps
┌──────────────────────────────────────────────────────────────┐
│ THE REMOVAL STEPS │
│ │
│ 1. The config files │
│ ┌─────────────────────┐ │
│ │ The .eslintrc* │ Delete │
│ │ The .prettierrc* │ │
│ └──────────┬──────────┘ │
│ │ │
│ ▼ │
│ 2. The packages │
│ ┌─────────────────────┐ │
│ │ The eslint │ Uninstall │
│ │ The prettier │ │
│ └──────────┬──────────┘ │
│ │ │
│ ▼ │
│ 3. The editor extensions │
│ ┌─────────────────────┐ │
│ │ The ESLint ext │ Uninstall + the Biome install │
│ │ The Prettier ext │ │
│ └─────────────────────┘ │
└──────────────────────────────────────────────────────────────┘
The Conflict
┌──────────────────────────────────────────────────────────────┐
│ THE CONFLICT │
│ │
│ The Prettier extension + the Biome extension │
│ ┌─────────────────────┐ │
│ │ Both run on the save│ The different formatting │
│ │ The file churns │ The diff is the noise │
│ └──────────┬──────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────┐ │
│ │ The uninstall is the│ The mechanism that stops it │
│ │ fix │ │
│ └─────────────────────┘ │
└──────────────────────────────────────────────────────────────┘
The Package Tree
┌──────────────────────────────────────────────────────────────┐
│ THE PACKAGE TREE │
│ │
│ Before the removal: │
│ ┌─────────────────────┐ │
│ │ The eslint │ │
│ │ The prettier │ The old tooling │
│ │ The plugins │ │
│ └──────────┬──────────┘ │
│ │ │
│ ▼ │
│ After the removal: │
│ ┌─────────────────────┐ │
│ │ The @biomejs/biome │ The single tool │
│ └─────────────────────┘ │
└──────────────────────────────────────────────────────────────┘
Summary
| Item | Value |
|---|---|
| The config files | The .eslintrc*, the eslint.config.*, the .prettierrc*, the prettier.config.* |
| The ignore files | The .eslintignore, the .prettierignore |
| The packages | The eslint, the prettier, the plugins, the parsers |
| The script update | The biome check, the biome format, the biome ci |
| The editor | The Biome extension, the editor.defaultFormatter |
| The conflict | The two formatters fight over the same file |
| The YAML exception | The manual conversion |
Key takeaways:
- The removal is the step that completes the migration. The config files, the packages, the scripts, and the editor extensions are the old tooling, and the old tooling is the conflict after the Biome is in place. The Biome documentation states the removal as the final step .
- The two formatters fight over the same file. The Prettier extension and the Biome extension both run on the save, and the conflict is the churn. The uninstall of the Prettier extension is the mechanism that stops it .
- The config files are the globs. The
.eslintrc*, theeslint.config.*, the.prettierrc*, and theprettier.config.*are the globs that cover the multiple extensions. The singlerm -fcommand removes the set . - The
eslint-config-prettieris not needed. The Biome has the no formatter-linter conflict, and the package that disables the ESLint formatting rules is the redundant . The removal is the mechanism that removes the redundancy. - The YAML config is the exception. The Biome CLI cannot parse the YAML ESLint config, and the manual conversion to the JSON is the workaround . The conversion is the mechanism that makes the migration possible.
Remember: The Biome migration is the commands that port the configuration, and the removal that completes the switch. The config files, the packages, the scripts, and the editor extensions are the old tooling, and the removal is the mechanism that prevents the conflict. The two formatters fight over the same file, and the uninstall is the fix. The removal is the completion.
Stop using slow, ad-bloated tool sites! 🤮
🔎 Search “KandZ Tools” on Google to use many professional utilities for free.
KandZ.me is the ultimate minimalist hub for:
✅ Finance (Mortgage, Interest, Inflation)
✅ Tech (Base64, JSON, Dev Suite, IP)
✅ Health (BMI, BMR, TDEE)
✅ Productivity (Timer, Workspace, QR)
⚡️ Fast & Private
🔒 No data leaves your device
💎 100% Free
🔗 Use it now: https://tools.kandz.me
🔖 Bookmark it—you’ll need it later!