Extensions and recommendations

VS Code · Practical · 9 min

Most of VS Code's power comes from extensions; choosing and managing them well keeps it fast and consistent.

Open the Extensions view with Ctrl+Shift+X. Each extension has an ID in the form publisher.name, such as ms-python.python or dbaeumer.vscode-eslint. Prefer verified publishers and widely used extensions; an extension runs code with your user's permissions.

What to install typically:

  • Language support: VS Code has basic support for many languages built in, but rich IntelliSense, debugging and testing come from extensions (Python, Go, Rust Analyzer, C#, Java...). They usually run a language server in the background.
  • Linters and formatters: ESLint, Prettier, Ruff...
  • Tools: Docker, remote development, GitLens, REST clients.

Managing them:

  • Disable an extension for a workspace when a project does not need it; fewer active extensions means faster startup.
  • The command line works too: code --install-extension ms-python.python, code --list-extensions.
  • .vscode/extensions.json with a "recommendations" list makes VS Code prompt teammates to install the project's extensions, a lightweight way to standardise tooling.

Extensions contribute commands (search "ExtensionName:" in the palette), settings (filter the Settings UI by @ext:publisher.name) and keybindings. If something misbehaves, "Help: Start Extension Bisect" finds the culprit by disabling half of the extensions at a time.

Example

code --install-extension ms-python.python
code --install-extension dbaeumer.vscode-eslint
code --list-extensions --show-versions | head -3
# dbaeumer.vscode-eslint@<version>
# ms-python.python@<version>
# ...
# .vscode/extensions.json  (prompt teammates to install these)
cat > .vscode/extensions.json <<'EOF'
{
  "recommendations": ["ms-python.python", "charliermarsh.ruff"],
  "unwantedRecommendations": ["ms-python.autopep8"]
}
EOF

Remember

  • Extension IDs are publisher.name; install from the view or with code --install-extension
  • .vscode/extensions.json recommends extensions to the team
  • Disable per workspace; Extension Bisect finds a misbehaving one

Watch out for

  • Installing dozens of overlapping extensions (several formatters for one language) that fight each other.

Check yourself

  1. How do you prompt everyone opening a repo to install the project's linter extension?

Sign in to answer, see the explanations, and get this lesson back as a quick review later.

Official docs: code.visualstudio.com/docs/configure/extensions/extension-marketplace