Every extension you install is code loaded into the extension host process, so the bar for keeping one should be higher than "it looked interesting". These clear it.
| Extension | What it does | Cost |
|---|---|---|
| ESLint | Surfaces your project's lint rules inline and fixes them on save. It runs your installed ESLint, so it inherits your config rather than inventing one. | Free |
| Prettier | Opinionated formatting on save. Ends whitespace arguments in review by removing the decision. | Free |
| Error Lens | Prints diagnostics at the end of the offending line instead of hiding them behind a hover. The single biggest reduction in mouse movement on this list. | Free |
| GitLens | Inline blame on the current line, file history, and a side-by-side view of who changed what and why. | Free core; paid Pro tier for the hosted-service and worktree features |
| Remote - SSH | Runs the whole VS Code server on a remote host. Your editor is local, the filesystem, terminal and language servers are on the box. | Free |
| Dev Containers | Opens a repo inside a container defined by .devcontainer/devcontainer.json, so toolchain versions come from the repo, not from whatever you installed in 2023. | Free |
| Docker / Container Tools | Dockerfile and compose completion, plus a panel for images, containers and logs without leaving the window. | Free |
| REST Client | Sends HTTP requests from a plain .http file you can commit next to the code. No account, no cloud sync, diffable in review. | Free |
| Thunder Client | A graphical API client inside the sidebar if you prefer collections and a form over raw text. | Free tier with limits; paid plans for teams |
| Even Better TOML | Schema-aware TOML with validation and formatting. Essential once you are editing Cargo.toml or pyproject.toml daily. | Free |
| Code Spell Checker | Catches typos in identifiers, comments and user-facing strings. Add project jargon to cspell.json and commit it. | Free |
| indent-rainbow | Tints indentation levels. Genuinely useful in deeply nested YAML; skip it if you mostly write braces. | Free |
A large share of the "top ten" lists still circulating recommend things VS Code now does natively. Bracket Pair Colorizer is archived — the feature moved into the core renderer and is on by default via editor.bracketPairColorization.enabled, where it is dramatically faster than the extension ever was. Sticky headers for the enclosing function are built in behind editor.stickyScroll.enabled. Automatic tag renaming in HTML ships in the built-in language support. Before installing anything, search the Settings UI for the feature name; the built-in version runs in the main process and costs you no host startup time.
Open the command palette and run Developer: Show Running Extensions. You get every active extension, its activation event, and how many milliseconds it took to activate. Anything with an activation time in the hundreds of milliseconds, or activating on * rather than on a specific language or file pattern, is a candidate for removal.
Two more diagnostics worth knowing. Developer: Startup Performance breaks down where window load time went. And code --disable-extensions launches a clean instance, which settles the "is it the editor or is it me" question in ten seconds. If the clean instance is fast, bisect by disabling half your extensions at a time.
The reason most setups bloat is that everything is installed globally and never uninstalled. VS Code supports enabling an extension for one workspace only, from the gear icon in the Extensions view, which keeps a Python toolchain out of the way while you are in a Go repo. Better still, commit .vscode/extensions.json so a new contributor is prompted with the right set:
{
"recommendations": [
"dbaeumer.vscode-eslint",
"esbenp.prettier-vscode",
"usernamehw.errorlens",
"tamasfe.even-better-toml"
],
"unwantedRecommendations": ["coenraads.bracket-pair-colorizer-2"]
}
Pair it with a committed .vscode/settings.json that pins the default formatter and editor.formatOnSave. That combination is what stops a pull request from arriving as three real changes and four hundred lines of reformatting.