Fix My Error

Stuck? Solved.

Home › Fix Errors › VS Code › Extension Conflict
Two extensions fighting, editor acts strange

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

⚡ The 30-second fix

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.

1

Extension Bisect (built-in, best method)

VS Code has a built-in tool for exactly this. Fastest way to find the culprit.

  1. Open Command Palette (Ctrl+Shift+P / Cmd+Shift+P)
  2. Type Help: Start Extension Bisect
  3. Click "Start" — VS Code disables half your extensions
  4. Try to reproduce the problem
  5. Click "Good Now" or "Bad Now" based on the result
  6. 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.

2

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.
3

Manual bisect (if extension bisect is stuck)

Sometimes Extension Bisect is confused because the problem is intermittent. Manual bisect is slower but more reliable.

  1. Go to Extensions panel (Ctrl+Shift+X / Cmd+Shift+X)
  2. Disable the bottom half of your extensions
  3. Reload VS Code (Command Palette → "Developer: Reload Window")
  4. Try to reproduce
  5. If gone → culprit is in the bottom half. Restore, disable top half.
  6. If persists → culprit is in the top half. Keep bottom disabled.
  7. 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

❓ 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.

🔗 Related fixes

← All VS Code Fixes