Biome to Oxc Migration
Migrate from Biome to oxlint (linting) + oxfmt (formatting) with Prettier for unsupported file types.
File Type Strategy
| File Type | Lint | Format |
|---|---|---|
.ts, .tsx, .js, .jsx | oxlint | oxfmt |
.json, .jsonc, .css | - | oxfmt |
.md, .mdx, .astro, .yaml, .yml | - | Prettier |
Migration Checklist
- •Remove Biome packages -
@biomejs/biome,ultracite, or similar presets - •Add new packages -
oxlint,oxfmt,prettier, framework-specific prettier plugins if needed - •Delete
biome.jsonorbiome.jsonc - •Create
.oxlintrc.json - •Create
.prettierrc.jsonand.prettierignore - •Update build scripts - Replace biome commands with oxlint/oxfmt/prettier
- •Update VSCode settings - Switch formatter to
oxc.oxc-vscode - •Run format and lint - Verify everything works
Configuration Templates
.oxlintrc.json
{
"$schema": "./node_modules/oxlint/configuration_schema.json",
"plugins": ["typescript", "import", "unicorn", "oxc", "jsdoc", "promise", "node"],
"rules": {}
}
Available plugins: eslint, react, unicorn, typescript, oxc, import, jsdoc, jest, vitest, jsx-a11y, nextjs, react-perf, promise, node, vue
Enable plugins relevant to your project. For library projects, exclude framework-specific plugins (react, vue, nextjs, jest, vitest).
.prettierrc.json
{
"printWidth": 120,
"plugins": ["prettier-plugin-astro"]
}
Add plugins as needed: prettier-plugin-astro, prettier-plugin-svelte, prettier-plugin-tailwindcss
.prettierignore
dist/ node_modules/ **/*.ts **/*.tsx **/*.js **/*.jsx **/*.json **/*.css
Exclude files handled by oxfmt.
VSCode Settings
{
"editor.defaultFormatter": "esbenp.prettier-vscode",
"[javascript][typescript][javascriptreact][typescriptreact][json][jsonc][css]": {
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"editor.codeActionsOnSave": {
"source.fixAll.oxc": "always"
}
}
Rule Migration
Common Biome to oxlint rule mappings:
| Biome Rule | oxlint Equivalent |
|---|---|
noBarrelFile | no-barrel-file |
useConsistentTypeDefinitions | Not directly available |
noUnusedVariables | no-unused-vars |
noConsole | no-console |
oxlint uses ESLint-compatible rule names with kebab-case.
CLI Commands
# Lint with auto-fix
oxlint --fix
# Format with oxfmt (use .gitignore for ignoring)
oxfmt --write --ignore-path=.gitignore .
# Format remaining files with Prettier
prettier --write --no-error-on-unmatched-pattern "**/*.{md,mdx,astro,yaml,yml}"
Note: oxfmt reads .prettierignore by default. Use --ignore-path=.gitignore to use gitignore instead.