Most VS Code extension lists are forty items long and half of them duplicate something VS Code now does on its own. This is the short list: extensions that change how you work, grouped by job, with a note on what to skip. Install by need, not by list.
Already built in#
Before installing anything, know what is already there. VS Code now includes:
- Git integration, including staging, diffs, blame in the gutter and a graph view
- Bracket pair colouring and guides
- Auto-closing tags and Emmet for HTML and CSS
- A built-in terminal with multiple shells
- Formatting on save, once a formatter is available for the language
- Sticky scroll, minimap, breadcrumbs, and inline suggestions
- Markdown preview
- Settings Sync across machines
Extensions that only add bracket colouring, auto-close tags, or a basic git graph are no longer needed. If you have them, remove them.
Language support#
Install the official extension for each language you actually write. They provide IntelliSense, go-to-definition, refactoring and debugging.
| Language | Extension | Note |
|---|---|---|
| Python | Python (Microsoft), which pulls in Pylance | Add Ruff for linting and formatting in one |
| JavaScript, TypeScript | Built in | Add ESLint and Prettier, below |
| C# | C# Dev Kit | Needs the .NET SDK installed |
| Java | Extension Pack for Java | Needs a JDK; includes Maven and Gradle support |
| PHP | PHP Intelephense | The free tier covers most needs |
| Go | Go (Go Team at Google) | Installs its own tools on first use |
| Rust | rust-analyzer |
Do not install language extensions for languages you might use one day. Each one starts a language server, and they all cost memory and start-up time.
Code quality#
- ESLint — shows JavaScript and TypeScript lint errors inline. Uses the project’s own configuration.
- Prettier — opinionated formatting for web languages. Set it as the default formatter and enable format on save, then stop thinking about it.
- Ruff — the Python equivalent of both, very fast.
- EditorConfig — reads
.editorconfigso indentation and line endings match the project. Small and worth it on every team. - Error Lens — prints the error text at the end of the line instead of only underlining. Divisive, but it saves a great deal of hovering.
{
"editor.formatOnSave": true,
"editor.defaultFormatter": "esbenp.prettier-vscode",
"[python]": { "editor.defaultFormatter": "charliermarsh.ruff" }
}
Git and collaboration#
- GitLens — rich history, file and line annotations, comparisons. The free features are the ones most people use. If you only want inline blame, the built-in gutter blame may be enough.
- GitHub Pull Requests — review and comment on pull requests without leaving the editor.
- Live Share — real-time collaborative editing. Useful for pairing and for helping someone remotely.
Working somewhere else#
- Remote – SSH — open a folder on a server as if it were local. Extensions and terminal run on the remote machine.
- WSL — the same idea for Windows Subsystem for Linux. If you develop in WSL on Windows, this is essential rather than optional.
- Dev Containers — run the editor’s back end inside a Docker container defined by the project. Every contributor gets the same tools.
These three are bundled as the Remote Development pack. Install only the ones you use.
Web development#
- Live Server — serves a folder and reloads the browser on save. For static HTML and CSS work it is the fastest feedback loop available.
- Tailwind CSS IntelliSense — autocompletion and hover previews for utility classes. Necessary if you use Tailwind; pointless otherwise.
- REST Client or Thunder Client — send HTTP requests from a text file or a panel, without a separate application.
Everyday quality of life#
- Path Intellisense — autocompletes file paths in strings.
- Code Spell Checker — catches typos in comments, strings and identifiers. Add project words to its dictionary rather than disabling it.
- TODO Tree — lists every TODO and FIXME comment in the workspace.
- Better Comments — colours comment prefixes such as
!and?. Cosmetic, but many people keep it.
AI assistants#
GitHub Copilot, and the extensions for Claude Code, Codex and others, are extensions like any other. Install one, not four; they compete for the same keystrokes and the same inline-suggestion slot. If you are learning, consider leaving inline suggestions off and using chat only, so you still write the code yourself.
Installing and managing#
code --install-extension ms-python.python
code --list-extensions
code --list-extensions > extensions.txt # share a setup with a teammate
Inside the editor, the Extensions view (Ctrl+Shift+X) has a gear on each extension with Disable (Workspace). Use it for extensions that only make sense in some projects.
A workspace can also recommend extensions to anyone who opens it:
{
"recommendations": ["dbaeumer.vscode-eslint", "esbenp.prettier-vscode", "editorconfig.editorconfig"]
}
Save that as .vscode/extensions.json and commit it.
Why fewer is better#
Every extension runs code when VS Code starts, and some keep running. Twenty extensions can add seconds to start-up and noticeably slow large files. When the editor feels sluggish, run Developer: Show Running Extensions from the command palette; it lists each one with its activation time. Anything you do not recognise or have not used in a month can go.
Questions people ask#
How many extensions is too many?
There is no fixed number. If start-up is slow or the running-extensions view shows things you do not use, trim. Ten to fifteen well-chosen ones covers most people.
Do extensions update automatically?
By default, yes. You can turn that off per extension or globally if an update breaks something.
Are extensions safe?
They run with the same permissions as VS Code. Prefer extensions from known publishers with an active repository, and be cautious with ones that ask for tokens or credentials.
What about Cursor or other VS Code forks?
Most extensions from the Open VSX registry work in forks. Some Microsoft-published extensions, including Pylance and the C# Dev Kit, are licensed for VS Code only.
Where to go next#
- VS Code setup for beginners — the settings that matter before any extension.
- VS Code extensions not working — when one refuses to load.
- Turning off Copilot and autocomplete — if the suggestions get in the way.