Copilot
Development

VS Code Review 2025: It Won. Now What?

AM
Arjun Mehta
January 20, 2025
12 min read

VS Code is the default. That is no longer a debate -- it is a fact, like gravity or npm install taking forever.

The Numbers

73% of developers in the latest Stack Overflow survey use it as their primary editor. Eight consecutive years at the top. Over 40,000 extensions. Monthly updates that actually ship meaningful improvements. Free. Open source (mostly). Available everywhere including your browser.

Ten years ago, Microsoft announced a code editor and nobody believed it would matter. Developers were loyal to Sublime Text, Atom was still new and exciting, and the idea of Microsoft making something developers would willingly adopt seemed far-fetched. The first preview release was rough. But the team shipped fast, listened to feedback, and made choices that felt genuinely developer-friendly rather than corporate. By 2017, the momentum was undeniable. By 2019, it had passed every competitor. Now the question is not whether VS Code is good. It is whether anything else still stands a chance.

What made the rise so unusual is that VS Code did not win on any single dimension. It was not the fastest editor. It was not the most configurable. It did not have the best language support out of the box. What it did was hit a near-perfect balance: good enough at everything, exceptional at nothing-in-particular, and relentlessly improving month after month. That consistency, more than any one feature, is what built the installed base that now makes it the gravitational center of the development tool ecosystem.

What Makes It Stick

Speed, for what it is. VS Code is built on Electron, which means it is technically a web browser pretending to be a desktop app. That should make it slow. It is not slow. It is not Sublime-fast, but it opens in under two seconds on modern hardware and handles files up to about 10MB without complaint. The VS Code team has done genuinely impressive optimization work to make Electron behave.

IntelliSense is the real hook. Once you experience context-aware autocomplete that actually understands your codebase -- knows your variable names, your function signatures, your imports -- going back to a dumb text editor feels like writing with a blindfold on. The Language Server Protocol means this works for basically every language, not just TypeScript and JavaScript. Python, Go, Rust, C++ -- all of them get proper intelligence.

Git is built in and it works. I do not mean "there is a Git button somewhere in a menu." I mean inline diffs in the gutter, one-click staging, visual merge conflict resolution, branch switching from the status bar. For developers who treat Git as part of their breathing rhythm, this integration saves hundreds of micro-interruptions per week.

VS Code 73% Vim 12% JetBrains 9% Others 6%

The Terminal

Underrated. The integrated terminal means you never leave VS Code. Multiple tabs, split panes, any shell you want. Click a file path in an error message and it opens. Click a URL and it launches. This sounds minor until you realize how many times per hour a developer switches between editor and terminal. Eliminating that context switch adds up to real time saved over a week, a month, a career.

The terminal has gotten meaningfully better over the last two years. Shell integration now detects command boundaries, which means you can click to select the output of any individual command, navigate between command results, and even rerun previous commands with a click. The terminal profiles system lets you set up different shell configurations -- maybe PowerShell for .NET work, bash for general tasks, and a specific SSH profile for connecting to your staging server -- all accessible from a dropdown.

There is also the task runner, which ties into the terminal. Define tasks in a JSON file and VS Code can run build scripts, test suites, and linting commands with keyboard shortcuts or from the command palette. Combined with problem matchers that parse error output and create clickable diagnostics in your code, you get something that feels surprisingly close to an IDE's build system without the heavyweight configuration.

Extensions: Blessing and Curse

40,000+ extensions means there is one for everything. That is the blessing. The curse is that about 35,000 of them are abandoned, broken, or low-quality. The marketplace has a curation problem. Sorting by "most installed" helps, but discovering niche extensions that are genuinely good requires word-of-mouth or blog posts.

The extensions that matter: Prettier, ESLint, GitLens, Docker, Remote SSH, Python, the language packs. These are foundational and well-maintained. Install these ten and you have a world-class development environment. Install fifty more and you have a slow, conflicting mess. Restraint is a virtue here.

One specific praise: the extension API is well-designed enough that extension authors can build genuinely powerful things. Vim emulation that actually works. Complete language servers. Custom file explorers. Theme engines. The API is the reason the ecosystem exists, and it is one of the better-designed plugin systems in any software category.

Remote Development

This changed things. SSH into a remote machine and edit files as if they were local. Develop inside a Docker container with a perfectly reproducible environment. Open a GitHub Codespace in your browser and have your full setup available from any device. The "Remote" family of extensions turned VS Code from a local tool into a distributed development platform.

For teams with complicated environments -- think microservices, GPU computing, legacy systems -- remote development eliminates the "works on my machine" problem without requiring everyone to learn Vim. That is a meaningful win.

Dev Containers deserve special mention. You define your development environment in a JSON file and a Dockerfile, commit them to your repository, and anyone who opens that project in VS Code gets prompted to launch the container. Five minutes later they have a fully configured development environment with the right runtime versions, the right tools installed, the right extensions loaded, and the right settings applied. I have seen this cut new developer onboarding from two days to half an hour on teams with complex setups. The mental model is simple: the container is the environment, VS Code is the window into it, and nothing on your local machine needs to know or care about the project's dependencies.

GitHub Codespaces takes this even further. Your development environment lives in the cloud, and you access it through VS Code in the browser or the desktop client. The practical upside is that you can start coding on a project from a tablet in an airport lounge, and everything -- your terminal sessions, your file state, your running processes -- persists between sessions. The downside is cost: Codespaces bills by compute time, and leaving an environment running overnight adds up. But for teams that want standardized environments without the overhead of managing local Docker setups, it is a compelling option.

Copilot

GitHub Copilot changed how I write code. That is not hyperbole. The inline suggestions are good enough that I accept them maybe 40% of the time, which means 40% of my code is being written by autocomplete on steroids. The chat interface is useful for explaining unfamiliar codebases and generating boilerplate. Copilot Edits, the newest addition, can apply changes across multiple files from a single natural-language description.

It costs ten dollars a month. It is worth twenty. That said, Copilot is a GitHub product, not a VS Code product, and it works in other editors too. But the VS Code integration is the most polished, which is unsurprising given that Microsoft owns both.

What It Is Not

VS Code is not an IDE. It becomes one with extensions, but out of the box it does not match IntelliJ for Java refactoring, PyCharm for Python debugging, or Xcode for iOS development. If you spend all day in one language ecosystem, a dedicated IDE will give you deeper tooling. VS Code's advantage is breadth: it handles every language acceptably, while an IDE handles one language exceptionally.

It is not fast the way native editors are fast. Sublime Text still opens instantly. Zed, built in Rust, makes VS Code feel heavy by comparison. Neovim with a good config is faster at everything except the initial setup. If raw speed is your priority and you are willing to put in the configuration work, these alternatives are genuinely better at being fast. VS Code's advantage is that it is fast enough while being vastly easier to set up.

It is not truly open source, depending on your definition. The source code is MIT-licensed, but the official Microsoft build includes telemetry and some proprietary bits. VS Codium exists for those who care. Most people do not.

Startup time (cold, measured) Sublime 0.3s Zed 0.5s VS Code 1.8s

The Monopoly Problem

Here is the uncomfortable truth. VS Code's dominance is not entirely good for the ecosystem. When one editor has 73% market share, extension developers only build for that editor. Language servers technically work anywhere, but the best integrations ship for VS Code first. New developers learn VS Code as if it were the only option because, increasingly, it is treated like the only option.

Competition makes software better. Zed is pushing performance boundaries. Neovim's Lua ecosystem is innovating in ways VS Code cannot. Helix is rethinking modal editing. Cursor is exploring what an AI-first editor looks like. These projects matter, and they deserve attention precisely because monocultures are fragile.

VS Code should feel pressure to improve. Right now, it does not feel much.

Customization and Settings Sync

The settings system in VS Code is worth appreciating because it walks a fine line well. There is a graphical settings editor for people who want to browse options by category, and there is the raw settings.json for people who want to type exactly what they mean. Workspace settings override user settings, which means you can have different formatting rules, linter configurations, and editor behaviors for different projects without conflicts. This sounds obvious, but many editors still struggle with project-specific configuration.

Settings Sync, powered by your GitHub or Microsoft account, means your entire setup -- keybindings, extensions, themes, snippets, settings -- follows you across machines. I work on a desktop and a laptop and the experience is identical on both. Install VS Code on a fresh machine, sign in, wait three minutes, and everything is there. No export files, no manual configuration, no setup scripts. It just works, and the fact that it just works is the result of a lot of engineering effort behind the scenes.

The snippets system is another quiet productivity multiplier. User-defined text expansions that can include tab stops, placeholders, variable transformations, and nested completions. I have snippets for console.log statements, React component boilerplate, test scaffolding, and documentation comment blocks. Each one saves a few seconds, but spread across a day of coding, those seconds become minutes become hours over a year. Combined with Emmet for HTML/CSS expansion, the text generation capabilities are strong enough that you rarely need to type repetitive code from scratch.

Who Should Not Use It

Java developers who do heavy refactoring: get IntelliJ. iOS developers: you need Xcode anyway. People who already know Neovim and love it: there is no reason to switch; you have the better tool for your hands. Anyone working on a Chromebook or low-RAM machine: VS Code eats 400-800MB of memory at rest, which is a lot if you only have 4GB total.

The Debugging Experience

Debugging in VS Code is good enough that it has replaced standalone debuggers for many developers. Set breakpoints by clicking in the gutter. Step through code line by line. Inspect variables in the watch panel. Evaluate expressions in the debug console. Conditional breakpoints that only trigger when a specific expression is true -- useful for debugging loops without stopping on every iteration.

The launch.json configuration can be fiddly for non-trivial setups, especially when debugging multi-process applications or attaching to remote processes. But for the common case -- debugging a Node.js app, a Python script, a Go binary -- the defaults work with minimal configuration. The JavaScript debugger in particular is excellent, with support for source maps, hot reload, and even debugging code running in a browser from within VS Code.

Everyone Else

You should be using it. You probably already are.

Free. Cross-platform. 40,000 extensions. Monthly updates. Copilot integration. Remote development. The best Git UI in any editor. A terminal that actually works. Settings sync across devices. A debugging experience that handles most languages out of the box. Dev containers that standardize your environment. And a community so large that any question you have was already answered on Stack Overflow three years ago.

The monthly release cycle deserves a final note. Every single month, the VS Code team publishes a detailed changelog with new features, bug fixes, and improvements. This has been happening for years without interruption. The consistency is remarkable. It means that every annoyance you encounter today has a reasonable chance of being fixed in a future update, and that the editor you use next year will be meaningfully better than the one you use today. That compounding improvement, month after month, is perhaps the strongest argument for VS Code as a long-term bet.

4.9 out of 5. The missing tenth of a point is for Electron's memory usage and the hope that competition will push it further.

4.9 / 5

VS Code is not perfect, but it is the closest thing to a universal editor that has ever existed. Use it unless you have a specific, articulate reason not to. And if you do have that reason, you probably already know what you should be using instead.

Comments (3)