Every few months someone publishes a “100 VS Code extensions you need” article and most developers end up installing 12 of them, using 2 for a week, and forgetting the rest exist. These are the 10 that have survived multiple reinstalls, multiple years, and daily use. They are sorted roughly by how often they prove useful.
1. GitLens
This one pays for itself in the first hour. The inline blame annotations showing who changed a line and when - right in the editor, not in a separate panel - are invaluable when debugging. The file history view and the ability to compare branches inline are genuinely useful, not just cool demos.
The free tier is enough for most use cases. The paid features are for teams that want the advanced collaboration views.
2. GitHub Copilot
This is obvious by now, but it earns its spot. The real value is not in generating entire functions. It shines on the boring-but-necessary code: writing test boilerplate, filling out repetitive object fields, generating switch cases. Saves probably 45 minutes a day on the mechanical stuff.
The important nuance: do not turn your brain off. Copilot is confidently wrong often enough that you need to read what it generates before accepting. Treat it like a fast intern, not a senior engineer.
3. Error Lens
Displays lint errors and TypeScript errors inline on the same line as the problem, instead of making you hover or look at the problems panel. Sounds minor. Is not minor. Errors get caught as they are typed, not after. This is often the first extension installed on any new codebase.
4. Prettier
Yes, everyone has Prettier. But the specific setup that works - format on save, with project-level config committed to the repo - is what makes it actually useful. No more PR comments about semicolons. No more debates about trailing commas. The only setting worth changing manually is print width (100, not 80 - we are not on 80-column terminals anymore).
5. Thunder Client
A REST client inside VS Code. No more switching to Postman for quick API calls. Thunder Client is lighter, collections sync with your workspace, and it does not require an account to use. If you are hitting endpoints more than 10 times a day during development, this saves real time.
6. Todo Tree
Scans your codebase for TODO, FIXME, HACK and similar comments and puts them all in a tree view. More importantly, it highlights them inline so you do not accidentally ship a TODO you forgot about. Filter by author, filter by tag. Simple and works.
7. Bookmarks
You can mark lines in a file and jump back to them with keyboard shortcuts. When you are working in a large codebase and you need to hold context across 5 different files simultaneously, this is the tool. It proves especially useful during debugging sessions when tracing execution flow across multiple layers.
8. Path Intellisense
Autocompletes file paths as you type them in imports. That is the whole thing. It is one of those extensions you do not appreciate until you work without it, and then you feel like something is wrong with your editor.
9. Indent Rainbow
Colors your indentation levels differently. Especially useful in languages where indentation is meaningful (Python) or in deeply nested JSON/YAML configs. Sounds cosmetic. Has legitimately helped catch misaligned blocks that would have been a bug.
10. Code Spell Checker
Engineers underestimate how many bugs come from typos in variable names, string comparisons, or error messages. This extension catches them. It also respects camelCase and splits words intelligently, so it does not false-positive on normal identifiers. Set it to flag words not in the dictionary - it catches real bugs more often than expected.
The Setup That Makes These Work Better
A few settings that complement these extensions:
{
"editor.formatOnSave": true,
"editor.minimap.enabled": false,
"editor.wordWrap": "on",
"files.autoSave": "onFocusChange"
}
Turn the minimap off. You are not writing code by looking at a thumbnail. The space is better spent on the actual editor.
What Deliberately Got Left Out
GitHub Copilot Chat, a bunch of AI diff tools, and various theme packs all got a fair trial. The AI chat tools are useful but they distract from flow more than they help. Themes are personal. Docker and Kubernetes extensions are great if you use those tools but are not universally applicable.
The list above works for a TypeScript/Node/Python stack. If you are doing Go or Rust full-time, you will swap a few out for language-specific tools - but Error Lens, GitLens, and Bookmarks belong in every language setup.
Bottom Line
Extensions should reduce friction, not add novelty. If you open VS Code tomorrow with these 10 installed and properly configured, you will write code faster, catch errors earlier, and navigate large codebases more confidently. That is the only bar that matters.
Comments