VSCode Extensions
An opinionated guide to the VS Code extensions in my development setup.
On this page
VS Code and its forks, including Cursor, share the same extension ecosystem. This is the set I have accumulated over years of Python, ML, research, and web work—not a checklist I recommend installing wholesale.
My rule is to start with the editor and language tooling, then add an extension only when it removes a recurring annoyance. Several entries overlap because this is also an honest record of my setup. I call those out below.
Authoring & Markdown
These are worthwhile if Markdown is a real authoring format in your work, not just something you occasionally use for a README.
- Markdown All in One (
yzhang.markdown-all-in-one) — The best general-purpose starting point: shortcuts, list editing, and table-of-contents support. - Markdown Preview GitHub Styles (
bierner.markdown-preview-github-styles) — Useful when GitHub is the final renderer and you want fewer surprises before pushing. - Markdown Checkbox (
bierner.markdown-checkbox) — Small quality-of-life support for task lists in the preview. - Markdown Emoji (
bierner.markdown-emoji) — Adds GitHub-style emoji syntax to the preview; skip it if you write Unicode emoji directly. - Markdown Footnotes (
bierner.markdown-footnotes) — Keeps footnotes readable in the built-in preview. - Markdown Mermaid (
bierner.markdown-mermaid) — The low-friction choice for diagrams that should remain text and live in version control. - Markdown YAML Preamble (
bierner.markdown-yaml-preamble) — Makes frontmatter visible in the preview, which matters for content-heavy repositories. - Docs View (
bierner.docs-view) — A side-by-side documentation view is useful when reference material should stay beside the code.
Code Quality & Linting
Prefer one authoritative formatter, linter, and type checker per language. The value here comes from fast feedback, not from stacking tools that report the same problem.
- Pylint (
ms-python.pylint) — Good for opinionated Python linting, especially when the project already standardizes on Pylint. - Pyright (
anysphere.pyright) — Fast Python type checking. In Cursor, this build is the natural language-server choice. - isort (
ms-python.isort) — Worth keeping when import ordering is enforced separately from the formatter. - Prettier (
esbenp.prettier-vscode) — My default formatter for JavaScript, TypeScript, CSS, HTML, Markdown, and many configuration files. - Error Lens (
usernamehw.errorlens) — Pulls diagnostics out of the Problems panel and puts them where I am looking. It can feel noisy in an unfamiliar codebase. - Code Spell Checker (
streetsidesoftware.code-spell-checker) — Catches embarrassing mistakes in identifiers, comments, and prose without requiring a separate writing pass.
Dev Utilities
- Docker (
ms-azuretools.vscode-docker) — Useful for inspecting images, containers, and registries without context-switching. Microsoft now presents this tooling under the broader Container Tools experience. - Makefile Tools (
ms-vscode.makefile-tools) — Adds target discovery and configuration support to repositories where Make is the real task runner.
Editor Enhancements
This is the most personal category. Install these one at a time; editor enhancements are helpful until their shortcuts, decorations, and panels begin competing with each other.
- Which Key (
vspacecode.whichkey) — Makes discoverable, prefix-based keyboard workflows possible for Spacemacs-style setups. - Toggle (
rebornix.toggle) — Maps frequently changed settings to explicit commands and keybindings. - Auto Align (
bladnman.auto-align) — Handy for tabular code and configuration, though formatters should remain authoritative. - Indent Rainbow (
oderwat.indent-rainbow) — Makes deeply nested Python, YAML, and configuration files easier to scan. - Better Comments (
aaron-bond.better-comments) — Gives warning, question, and TODO comments visual hierarchy. - Code Tags (
cg-cnu.vscode-codetags) — Another way to surface tagged comments; useful only if its tag model matches the team’s conventions. - Todo Tree (
gruntfuggly.todo-tree) — The one I would start with for repository-wide TODO and FIXME discovery. - Todo Highlight (
jgclark.vscode-todo-highlight) — A lighter inline alternative to Todo Tree; running both is usually redundant. - Tagged Comment (
alefragnani.tagged-comment) — Adds navigation around structured comment tags. Keep it only if you use those tags consistently. - Clever (
davidbabel.clever) — Smart selection and editing commands for keyboard-heavy workflows. - Auto Hide (
sirmspencer.vscode-autohide) — Keeps panels out of the way on smaller screens or focused writing layouts. - APC Extension (
drcika.apc-extension) — Deep UI customization for people willing to maintain editor-specific styling across updates. - Toggle Excluded Files (
amodio.toggle-excluded-files) — Quickly reveals generated or ignored files when debugging build output.
File Viewers
- PDF Viewer (
tomoki1207.pdf) — Keeps papers and generated PDFs inside the workspace. - Draw.io (
hediet.vscode-drawio) — The strongest option here when diagrams must be editable, reviewable files in the repository. - Python Image Preview (
076923.python-image-preview) — Convenient for ML and computer-vision work where image paths appear throughout Python code. - Edit CSV (
janisdd.vscode-edit-csv) — A table view is safer than editing delimiter-heavy rows by hand for small CSV files.
Git & Version Control
VS Code’s built-in Git support is already good. Add these for a specific missing view rather than installing the entire category.
- GitLens (
eamodio.gitlens) — The most complete option for blame, history, authorship, and commit context; some features require a paid plan. - Git Graph (
mhutchie.git-graph) — A clear visual commit graph without adopting GitLens’s broader feature set. - Git History (
donjayamanne.githistory) — Focused file and repository history. It overlaps with both GitLens and Git Graph. - Git Extension Pack (
donjayamanne.git-extension-pack) — A convenience bundle, not a separate capability. I would now install only the components I actually use. - GitHub Actions (
github.vscode-github-actions) — Worth it for workflow syntax, runs, and logs when GitHub Actions is part of daily development. - Open in GitHub (
ziyasal.vscode-open-in-github) — Fast links from a local line or file to its GitHub counterpart. - GitHub RemoteHub (
github.remotehub) — Browse remote repositories without cloning them. Useful for inspection; unnecessary for repositories already on disk. - gitignore (
codezombiech.gitignore) — Generates.gitignorefiles from templates. Verify the result rather than treating generated rules as policy.
Language Support
- Ruby LSP (
shopify.ruby-lsp) — The modern default for Ruby navigation, diagnostics, formatting, and refactoring. - TOML (
be5invis.toml) — Basic TOML support; largely superseded in this setup by Even Better TOML. - Even Better TOML (
tamasfe.even-better-toml) — The TOML extension I would choose today for validation, formatting, and schema support. - YAML (
redhat.vscode-yaml) — Essential in YAML-heavy repositories because schema validation catches structural errors that syntax highlighting cannot. - ENV (
irongeek.vscode-env) — Lightweight highlighting for dotenv files; remember that highlighting does nothing to protect secrets.
Navigation & Project Management
- Project Manager (
alefragnani.project-manager) — A quick project switcher for people working across many unrelated repositories. - Bookmarks (
alefragnani.bookmarks) — Good for temporary waypoints during a large debugging or refactoring session. - Numbered Bookmarks (
alefragnani.numbered-bookmarks) — Adds deterministic jump targets; redundant unless numbered navigation is part of your muscle memory. - Workspace (
fooxly.workspace) — Workspace management for setups that outgrow the built-in recent-project list. - Monorepo Workspace (
folke.vscode-monorepo-workspace) — Useful when one repository contains many packages that deserve focused workspace views. - Peacock (
johnpapa.vscode-peacock) — Color-codes windows so production, staging, and similarly named repositories are harder to confuse.
Python
Start with Pyright/Pylance, the official Python extension, and Debugpy. The smaller helpers below solve narrower problems and may overlap with language-server features.
- Debugpy (
ms-python.debugpy) — Microsoft’s Python debugger; keep it aligned with the official Python tooling. - Pylance (
ms-python.vscode-pylance) — Rich Python language support in VS Code. Cursor users may prefer its Pyright build instead, so do not run competing language servers blindly. - Python Indent (
kevinrose.vsc-python-indent) — Corrects some awkward indentation behavior, though modern editor and formatter support makes it less essential. - Python Typehint (
njqdev.vscode-python-typehint) — Generates type-hint snippets. Treat the result as a starting point, not inferred truth. - Autodocstring (
njpwerner.autodocstring) — Useful when a project enforces a consistent docstring style and the generated skeleton saves repetitive typing. - Jupyter Keymap (
ms-toolsai.jupyter-keymap) — Makes notebook shortcuts familiar to users coming from classic Jupyter. - Jupyter Cell Tags (
ms-toolsai.vscode-jupyter-cell-tags) — Important for pipelines that use notebook cell metadata. - Jupyter Slideshow (
ms-toolsai.vscode-jupyter-slideshow) — Adds slideshow metadata for notebook-based talks and teaching material.
Remote Development
- Remote - SSH (
ms-vscode-remote.remote-ssh) — The default choice for editing and debugging directly on a remote machine. - Remote - SSH: Editing (
ms-vscode-remote.remote-ssh-edit) — Focused support for SSH configuration files; useful alongside Remote - SSH. - Remote - Containers (
ms-vscode-remote.remote-containers) — Now named Dev Containers. The identifier remains the same; use it for reproducible containerized development environments. - Remote Explorer (
ms-vscode.remote-explorer) — A shared target browser for SSH, tunnels, and containers.
Testing
This part of the setup reflects the transition from the old Test Explorer extension ecosystem to VS Code’s native Testing API. New Python projects should begin with the official Python test support.
- Test Explorer UI (
hbenl.vscode-test-explorer) — The legacy UI that many test adapters were built around. Keep it for those adapters, not as the default for a new setup. - Test Adapter Converter (
ms-vscode.test-adapter-converter) — A compatibility bridge from legacy Test Explorer adapters to VS Code’s native Testing API. - Python Test Adapter (
littlefoxteam.vscode-python-test-adapter) — A legacy pytest/unittest adapter. Prefer the official Python extension’s native test discovery unless this adapter supports a workflow you still need. - Code Coverage (
markis.code-coverage) — Coverage gutters make untested paths visible during review; the extension still depends on correctly generated coverage data.
Themes & Icons
- GitHub Theme (
github.github-vscode-theme) — A restrained, familiar theme with maintained light and dark variants. - Moxer Icons (
equinusocio.moxer-icons) — A distinctive icon set; this is taste, not productivity infrastructure. - File Icons (
file-icons.file-icons) — Broad file-type coverage and a useful fallback when a theme’s bundled icons are sparse.
Tracking & Productivity
- Output Colorizer (
ibm.output-colorizer) — Makes dense build and process output easier to scan when the producer does not emit structured colors. - Live Share (
ms-vsliveshare.vsliveshare) — Still one of the lowest-friction ways to pair inside a real editor session. - Paste URL into Selection (
ms-vscode.remote-repositories) — The label in my old list was misleading: pasting a URL over selected text is now an editor behavior, while this identifier belongs to Remote Repositories. Keep Remote Repositories only if you browse source without cloning it.
Mazen Alotaibi (@ma7dev)