Fix: VS Code Extension Conflict
Formatting fights itself, autocomplete stopped working, or saving does something weird. Two extensions are fighting. Here's how to find the culprit in 5 minutes.
Last updated: October 2026
Use Extension Bisect. Open the Command Palette (Ctrl+Shift+P / Cmd+Shift+P) and run Help: Start Extension Bisect.
VS Code will disable half your extensions and ask "does the problem still happen?" Answer each prompt honestly. It narrows down to the culprit in 3–6 steps.
Why extension conflicts happen
VS Code extensions can register as providers for the same feature. When two extensions register for the same thing, VS Code picks one — sometimes the wrong one.
// Common conflict patterns
// 1. Two formatters registered for the same language
// - Prettier + ESLint
// - Prettier + Biome
// - Prettier + built-in formatter
// 2. Two inline completions registered
// - GitHub Copilot + Cursor Tab
// - Copilot + Tabnine
// - Copilot + Codeium
// 3. Two language servers registered
// - Vetur + Vue Language Features (Volar)
// - TypeScript + Deno
// 4. Two linters registered
// - ESLint + StandardJS
// - Biome + ESLint
Important: "Conflict" doesn't mean either extension is broken. It means they're both trying to do the same job. You need to pick one — or configure each to only run in specific contexts.
Extension Bisect (built-in, best method)
VS Code has a built-in tool for exactly this. Fastest way to find the culprit.
- Open Command Palette (Ctrl+Shift+P / Cmd+Shift+P)
- Type Help: Start Extension Bisect
- Click "Start" — VS Code disables half your extensions
- Try to reproduce the problem
- Click "Good Now" or "Bad Now" based on the result
- Repeat until one extension remains — that's the culprit
Pro tip: Bisect pauses when it finds a single extension. At that point, you can either disable it permanently or reconfigure it to play nicely with the others.
Nuke it: run without extensions
If bisect is too slow, disable all extensions at once to confirm it's an extension problem.
# From the terminal — launches VS Code without any extensions
code --disable-extensions
# Or in VS Code: Command Palette → "Developer: Reload Window"
Then test your scenario:
- Problem gone? It's an extension. Use Extension Bisect to find which.
- Problem persists? It's a setting, a VS Code bug, or an external tool (like a shell or language server). See the settings fix page.
Manual bisect (if extension bisect is stuck)
Sometimes Extension Bisect is confused because the problem is intermittent. Manual bisect is slower but more reliable.
- Go to Extensions panel (Ctrl+Shift+X / Cmd+Shift+X)
- Disable the bottom half of your extensions
- Reload VS Code (Command Palette → "Developer: Reload Window")
- Try to reproduce
- If gone → culprit is in the bottom half. Restore, disable top half.
- If persists → culprit is in the top half. Keep bottom disabled.
- Repeat with the smaller half
Pro tip: VS Code has a "Disable All Installed Extensions" command. Use it, then enable extensions one at a time in the order you most depend on them.
Common conflict pairs (and the fix)
| Conflict | Fix |
|---|---|
| Prettier + ESLint both formatting | Disable ESLint's formatting (eslint.format.enable: false), let Prettier handle it |
| Prettier + Biome | Pick one. If using Biome, uninstall Prettier |
| Copilot + Cursor Tab / Tabnine / Codeium | Only one inline completion provider at a time |
| Vetur + Volar (Vue) | Uninstall Vetur — Volar is the modern replacement |
| ESLint + StandardJS | Pick one linter. Both can't win |
| TypeScript + Deno | Disable Deno for non-Deno workspaces |
Picking a winner (configuring both to coexist)
You don't always have to uninstall. In most cases you can configure one extension to defer to the other.
// .vscode/settings.json
// Format with Prettier, ignore ESLint's formatting
{
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true,
"eslint.format.enable": false
}
// Disable Copilot in specific file types
{
"github.copilot.enable": {
"*": true,
"yaml": false,
"markdown": false
}
}
// Disable Cursor Tab when Copilot is active
// (use one or the other, not both)
Pro tip: Use workspace settings (.vscode/settings.json) instead of user settings. That way, conflicts are resolved per-project, not globally. Different projects can have different winners.
🛡️ How to prevent extension conflicts
- One formatter, one linter, one completion engine. Pick your stack and stick to it.
- Don't install extensions "just in case." Every extension is a potential conflict and a performance cost.
- Use Extension Bisect early. When something breaks, don't guess — bisect.
- Prefer extensions by the same author. ESLint + ESLint-plugin from the same author are less likely to fight.
- Disable extensions per-workspace. Use workspace settings to enable only what each project needs.
- Review installed extensions quarterly. Uninstall anything you haven't used in 3 months.
❓ Frequently asked questions
How do I find which VS Code extension is causing problems?
Use the built-in Extension Bisect feature: Command Palette → 'Help: Start Extension Bisect'. VS Code disables half your extensions and asks if the problem persists. Repeat until one extension remains.
Why do two formatter extensions conflict?
Multiple extensions can register as formatters for the same language. VS Code only uses one, but if the wrong one is picked, formatting looks broken. Set editor.defaultFormatter per language to fix it.
What is the difference between disabling and uninstalling extensions?
Disabling stops an extension from activating but keeps it installed. This is reversible in seconds. Uninstalling removes it entirely and requires a reinstall. Always disable first when debugging.
Can I have two autocomplete extensions installed?
Yes, but they'll fight. AI autocomplete extensions (Copilot, Cursor, Tabnine) all register as inline completion providers. Enable only one at a time or configure each to only activate in specific file types.
How do I reset VS Code to find the problem?
Run 'Developer: Reload Window' first. If that fails, run code --disable-extensions from the terminal to launch VS Code without any extensions. If the problem disappears, it's an extension. If it persists, it's a setting or VS Code itself.