{
  "id": 8636867,
  "title": "10 VS Code Extensions I Can't Code Without in 2026",
  "url": "https://urgent.news/2026/09/20/10-vs-code-extensions-i-cant-code-without-in-2026",
  "topic": "tech",
  "section": "Tech",
  "published": "2026-09-20T06:41:47.000Z",
  "source": {
    "name": "Dev.to",
    "slug": "dev-to",
    "url": "https://dev.to/infoinlet1/10-vs-code-extensions-i-cant-code-without-in-2026-16ak"
  },
  "original_language": "en",
  "account": "Every top VS Code extensions list resembles a set of icons with a brief description. That's not the case. My Extensions panel expanded beyond 40, often forgotten installations and a plethora of AI helpers were competing to finish my sentences. In response, I disabled everything and re-enabled them one by one, ultimately retaining ten. The survivors shared a common trait – a filter that enabled quick decision-making. A good extension revealed the information you needed, then stepped back, allowing you to decide the next course of action. Extensions that made decisions for you were eliminated. The following ten extensions exemplify this principle.\n\n1. Error Lens - This extension takes the diagnostics VS Code already provides and highlights them inline at the end of the line, instead of hiding them in the Problems panel or behind a hover. This reduces the cycle from \"I wrote something wrong\" to \"I know I wrote something wrong\" from searching for it to zero. You stop context-switching to the panel multiple times an hour. The extension makes the problem impossible to miss, but does not solve it. Your decision to fix it still lies ahead.\n\n2. GitLens - This extension provides a live sense of 'git blame' for any line, displaying who last modified it, when, and which commit – all inline, without leaving the file. The value lies in answering not \"who do I blame?\" but \"what was the author thinking, and is that still relevant?\" Before changing a strange guard clause, you can see it was added in a commit titled \"fix: race when webhook acks before the row is persisted,\" helping you make an informed decision.\n\n3. ESLint - This extension is non-negotiable and focuses on bug-catching rather than style nits. A good ESLint config catches real bugs before running any code, highlighting floating promises, missed dependencies, and incorrect equality checks. Wire it to auto-fix on save for mechanical aspects (import order, quotes) and treat the logic rules as warnings to read and act upon. This distinction keeps decision-making under your control.\n\n4. Prettier - I stopped caring about formatting in 2019 and haven't looked back. Prettier on save ensures every diff is a content diff, not a stylistic one. Pair it with ESLint (eslint-config-prettier to prevent clashes) and code reviews won't waste time on whitespace. This extension decides for you – a format, which is fine as formatting rarely involves judgment. That's why it's safe to automate.\n\n5. Pretty TypeScript Errors - Writing TypeScript can be a time-sink with its deeply-nested \"Type X is not assignable to type Y\" errors. This extension formats these errors into human-readable, syntax-highlighted, indented messages, making the compiler's message easier to understand and act upon. It doesn't fix the error or guess your intent, but enhances readability.\n\n6. Import Cost - This extension displays the size of every imported package next to the import line. When you import { format } from date-fns, it quietly states that you've added 20KB. It doesn't stop you, nor rewrite your code. It simply makes the cost visible at the moment of decision – the only time this information is useful. Most of the time, you shrug and move on, but the few times it saves you from shipping a 300KB date formatter.\n\n7. Path Intellisense - An autocomplete for filesystem paths in imports and src attributes. Small, boring, but invaluable in removing off-by-one errors (e.g., ../../ instead of ../). It surfaces the correct path as you type, ensuring no dumb typo bugs cling to your code. Pure surface, zero magic.\n\n8. Todo Tree - This extension scans your workspace for TODO, FIXME, HACK, and NOTE tags, listing them in a tree in the sidebar, color-coded by tag. It turns your scattered notes-to-self into a visible worklist, preventing you from forgetting future-me's judgment calls. Add // REVIEW: tags for \"I wrote this fast, come back with fresh eyes.\" This extension makes those calls visible, not lost.\n\n9. Code Spell Checker - Underlines typos in your code – variable names, comments, strings. Sounds insignificant until it saves you from shipping a public function named recieveWebhook or a retreive that breaks a string match elsewhere. It flags potential errors, allowing you to decide if it's a real word or a domain-specific term (and adding it to the dictionary). It surfaces issues, not deciding for you.\n\n10. REST Client - Write HTTP requests in a plain .http file and hit send. The response pops up without leaving the editor or opening a separate app. The .http file lives in the repository, making your API calls version-controlled, diffable, and right next to the serving code. Unlike GUI apps, this client keeps the text under your control, eliminating cloud-based state. This extension follows the same principle – keep the information you need to reason about in front of you and under your control.",
  "summary": "Every \"best VS Code extensions\" list is the same 30 icons with a one-line blurb. This isn't that. A few months ago my Extensions panel had crept past 40. Startup was sluggish, half of them I'd forgotten installing, and a good chunk were AI helpers all fighting to finish my sentences. So I did the thing you're supposed to do once a year: I disabled everything and turned them back on one at a time,…",
  "key_points": [],
  "editors_take": null,
  "illustration": null,
  "coverage": {
    "outlets": 1,
    "also_reported_by": []
  },
  "ai_generated": true,
  "disclaimer": "Summaries, key points and the editor’s take are written by software from other outlets’ reporting and may contain errors — always check the linked original."
}