I've spent a lot of time in VS Code over the years. At this point, I've accumulated a fairly opinionated collection of extensions that make up my daily development environment.
This isn't intended to be a definitive list of the "best" VS Code extensions. There are far too many variables for that to be useful. Your ideal setup will depend heavily on your languages, frameworks, operating system, and personal workflow.
For context, I use what I jokingly call the FAPN stack for the vast majority of my cross-platform applications: Flutter, Angular, PostgreSQL, and NestJS. I occasionally work in Python or C++ for things like Arduino and Raspberry Pi projects, but those aren't part of my everyday development environment.
So, here's the setup I actually use.
Profiles
One of the things I find particularly useful in VS Code is its support for profiles.
I use profiles to keep the environment relatively lean. All of my profiles share the same core extensions, while framework-specific tooling is enabled only where I need it. I currently have profiles for Angular, Flutter, Nest, Python, and a general CrossPlatform profile that covers my usual stack without the Python tooling.
This isn't about shaving milliseconds off VS Code's startup time. It's mostly about keeping the workspace focused. If I'm working on a Nest application, I don't need a pile of Python-specific tooling sitting around simply because I might need it next week.
My CrossPlatform profile is the one I use most often, and the following is the actual extension set I use there.
My List
These are the extensions that make up my core development environment.
- Better Comments — Improve code comments with annotations for alerts, information, TODOs, and more.
- change-case — Quickly change the case of the current selection or word between formats such as camelCase, CONSTANT_CASE, and snake_case.
- Color Highlight — Highlight web colors directly in the editor.
- ESLint — Code linting for consistency and identifying potential problems.
-
gitignore — Quickly add files to
.gitignore. - Image preview — Preview images directly in the editor and on hover.
- Markdown PDF — Convert Markdown documents to PDF.
- markdownlint — Markdown linting and style checking.
- Material Icon Theme — Material Design icons for a wide range of file types.
- One Dark Pro Italic Vivid — My preferred visual theme, including support for italic comments.
- Prettier - Code formatter — Automatic code formatting using Prettier.
- Rainbow CSV — Highlight CSV and TSV files and run SQL-like queries against them.
- Todo Tree — Collect TODO, FIXME, and similar comment tags into a searchable tree.
- VS Code Counter — Count lines of code across many programming languages.
- VS Color Picker — A small color picker for web development.
- vscode-faker — Generate fake data such as names, addresses, commerce data, Lorem Ipsum, and more.
- vscode-pdf — View PDF files directly in VS Code.
- WakaTime — Automatically tracks coding activity and provides development metrics and time reporting.
- YAML — YAML language support and tooling.
Some of these are things I use constantly. Others solve very specific problems. That's fine. A development environment doesn't need every extension to be exciting; it just needs the tools to be useful when you need them.
Tools
These are the extensions I use for the broader development tooling around my applications.
- SQLite — Explore and query SQLite databases directly from VS Code.
- Docker — Docker-aware development and container tooling.
- Container Tools — Manage and inspect containers and images from within VS Code.
- GitLens — Visualize Git history and code authorship, including Git blame information.
These are particularly useful because a lot of my development work isn't simply writing source code. I'm regularly dealing with databases, containers, Git repositories, configuration, and deployment infrastructure as part of the same project.
Application Development
My framework-specific extensions cover the technologies I use most frequently for application development.
- Angular Language Service — Editor services and template support for Angular.
- Angular Snippets — Angular-specific code snippets.
- Dart — Dart language support and debugging.
- Flutter — Flutter development support and debugging.
- Pubspec Assist — Quickly add and update Dart and Flutter dependencies.
- Svelte for VS Code — Svelte language support.
- Tailwind CSS IntelliSense — Intelligent Tailwind CSS tooling.
Again, these aren't necessarily installed in every profile. That's the point of the profiles: I can have the tooling available without making every project carry everything I've ever installed.
Disabled Extensions
There's another category worth mentioning: extensions I've tried but don't currently use.
AI Tools
I've tried several AI coding extensions at various points. None of them has fit my workflow particularly well enough to leave enabled.
I actually got my perferred agent working inside VS Code for a while, but the integration stopped short of giving her meaningful interaction with the codebase through the IDE. Eventually I said "fuck it" and went back to running OpenCode CLI alongside VS Code.
That setup has worked considerably better for me.
That's probably temporary. I'm interested in trying Unsloth Desktop, and the longer-term direction I'm exploring is somewhat different: bringing the development environment directly into the ICOS platform so the agent can work alongside the developer rather than being bolted onto the IDE as another extension.
For now, these remain disabled:
- ACP Client — Agent Client Protocol client for VS Code.
- Cline — Autonomous coding agent in the IDE.
- Continue — Open-source AI code agent.
- Ollama Agent — Chat, generate code, edit files, and automate tasks.
I'm including them because I think it's useful to be honest about what didn't become part of my workflow. A list of installed extensions doesn't tell the whole story. Sometimes the most useful information is knowing which tool you tried and decided wasn't worth keeping around.
Python
Python isn't my primary language, but I keep a prepared Python environment available for projects that require it.
Rather than loading all of this into my normal CrossPlatform profile, the Python-specific tooling lives in its own profile.
- autoDocstring — Generate Python docstrings automatically.
- Django — Django syntax and snippets.
- Pylance — Python language server and development tooling.
- Python — Python language support and extension access points.
-
Python Debugger — Python debugging using
debugpy. - Python Environment Manager — View and manage Python environments and packages.
- Python Environments — Unified Python environment management.
- Python Indent — Python indentation support.
- Jinja — Jinja template language support.
It's there when I need it, but it doesn't need to be part of my everyday environment.
The Point
There's nothing particularly revolutionary about this list.
That's intentional.
These are simply the tools I've accumulated through actually building software. Some make development faster. Some make it easier to inspect what I'm working on. Some solve annoyingly specific problems. Some are there because I happen to like the way they work.
And that's probably the biggest recommendation I can make about VS Code extensions:
Don't install extensions because somebody told you that you need them.
Try things. Keep the ones that improve your workflow. Disable or remove the ones that don't. Use profiles when your projects span very different ecosystems.
Your development environment should eventually become an expression of how you work, rather than a collection of somebody else's idea of what a developer is supposed to have installed.
This is my extension stack. There are many like it, but this one is mine.
Top comments (0)