Stockio

Essential VS Code Extensions for Frontend Developers

Build a focused VS Code setup with ESLint, Prettier, framework support, and repeatable workspace settings, without piling on conflicting extensions.

By Ravi Desai

DevOps & Security Engineer ·

On this page

A useful editor setup catches mistakes early without making every save an unpredictable rewrite. For frontend development, that means separating language intelligence, linting, formatting, and framework support instead of installing several extensions that compete for the same job.

Start with tasks, not extension rankings

Write down three recurring problems before opening the marketplace: inconsistent formatting, missed lint errors, and unfamiliar API response shapes are good examples. Use the JSON to TypeScript tool with a sanitized sample response to draft interfaces, then inspect those interfaces in VS Code. Generated types describe the sample, not every possible server response, so review optional fields and nullability yourself.

Treat each extension as a dependency with access to your workspace. Check its publisher, maintenance history, requested capabilities, and documentation. Install from a trusted source and avoid look-alike names. The VS Code extension documentation explains management and workspace recommendations.

Create a minimal baseline first. VS Code already includes JavaScript and TypeScript language services, debugging, Git integration, Emmet, and JSON support. You do not need a separate extension simply to get TypeScript completion. Keep extensions only when they solve a problem the built-in features do not handle adequately.

Give ESLint and Prettier separate responsibilities

Install Microsoft's ESLint extension, identified as dbaeumer.vscode-eslint, when the repository uses ESLint. Its job is to surface the project's configured rules and apply supported fixes. Installing the extension alone does not establish a lint policy: the repository still needs compatible dependencies and configuration.

Use esbenp.prettier-vscode when the team has adopted Prettier. Let it control layout, including indentation, wrapping, and quote formatting. Keep potentially conflicting stylistic ESLint rules disabled with the project's chosen integration. Follow the Prettier editor integration guide rather than layering arbitrary format-on-save recipes from unrelated projects.

A small workspace configuration makes responsibility explicit:

{
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
  "source.fixAll.eslint": "explicit"
},
"prettier.requireConfig": true
}

Here, explicit saves can trigger ESLint fixes; do not assume every Auto Save event behaves identically. Requiring a Prettier configuration avoids unexpectedly formatting unrelated projects with personal defaults. In a mixed-language repository, use language-specific formatter settings where necessary rather than forcing Prettier onto unsupported files.

Test the arrangement on one intentionally untidy file. Save it, inspect the diff, and run the repository's formatting and lint commands. Editor feedback should agree with command-line checks; it must not become a second, undocumented source of truth.

Add framework intelligence only where needed

For Tailwind projects, the official Tailwind CSS IntelliSense extension, bradlc.vscode-tailwindcss, adds class suggestions, hover previews, and diagnostics. Confirm that the project's Tailwind version and stylesheet or configuration layout are supported. If completion is missing, investigate project detection before installing another class-completion extension.

Vue projects generally benefit from Vue - Official, while Svelte and Astro have their own official language extensions. Select the extension recommended by the framework's current documentation. Avoid leaving obsolete competing language servers active in the same workspace: duplicate diagnostics often look like code defects but actually come from competing tools.

Framework snippets are optional. A snippet that inserts an outdated component pattern can cost more time than it saves. Prefer a few team-maintained snippets for recurring structures, and review generated code just as carefully as handwritten code. Language support is essential; expanding boilerplate automatically is not.

For plain React with TypeScript, begin with the built-in TypeScript service. Choose the workspace TypeScript version when the repository requires it, then verify that imports and diagnostics match the command line. More extensions will not repair a mismatched compiler version.

Share recommendations without sharing personal preferences

Commit extension recommendations in the repository so new contributors can discover the supported setup. Recommendations suggest installations; they do not enforce them or install project dependencies.

{
"recommendations": [
  "dbaeumer.vscode-eslint",
  "esbenp.prettier-vscode",
  "bradlc.vscode-tailwindcss"
]
}

Place that document in .vscode/extensions.json and omit Tailwind when the project does not use it. Put agreed formatting behavior in workspace settings, but keep personal fonts, themes, keybindings, and terminal choices out of shared configuration. Explain required command-line checks in the contributor documentation.

Use separate VS Code profiles for work that genuinely needs different tooling. A frontend profile and a documentation profile can keep extension lists understandable without constantly uninstalling packages. For remote containers or SSH sessions, check whether an extension belongs locally or on the remote extension host.

The VS Code Workspace Trust guide is particularly important when opening unfamiliar repositories. Do not approve a workspace merely because its recommended extensions look familiar. Review tasks, scripts, and configuration before enabling execution-capable features.

Diagnose slowdowns with a repeatable audit

When typing or saving becomes slow, measure the delay on a small, representative file. Note whether the pause occurs during completion, formatting, lint fixes, or file watching. Large generated directories and monorepo-wide analysis can cause trouble even with a short extension list.

Use VS Code's running-extension diagnostics to inspect activation and runtime behavior. Try a clean profile, then use Extension Bisect when a third-party extension appears responsible. Reproduce the same action each time; otherwise the search is comparing different workloads. Check output channels for ESLint and the relevant language server before changing source code to silence a tooling problem.

Audit workspace scope as well. Exclude generated output from searches and avoid opening a parent folder containing dozens of unrelated projects. In monorepos, ESLint working-directory configuration may be necessary, but it should follow the repository's actual layout rather than a copied universal setting.

Keep a short acceptance checklist: completion works, errors appear, formatting is stable, and command-line checks pass. Broader development resources can help identify whether a problem belongs to the editor or build tooling. Use the dev-tools guides when documenting the resulting workflow, rather than making the extension list itself the onboarding plan.

Key takeaways

  • Start with built-in capabilities and add extensions for specific missing tasks.
  • Assign formatting to Prettier and code-quality rules to the project's ESLint configuration.
  • Share recommendations and repository behavior, not personal editor preferences.
  • Match framework extensions and TypeScript versions to the actual project.
  • Diagnose slowdowns with repeatable actions before adding more tooling.
Featured sponsor

Reach designers & developers at work

Put your product next to the tools people use every day. One sponsor per placement, no tracking pixels.

Become a sponsor

Keep reading

Related articles

More in Dev Tools & AI Coding
Dev Tools & AI Coding

10 Best AI Coding Assistants

Compare ten AI coding assistants for editor help, repository questions, and terminal workflows, with practical notes on strengths, trade-offs, privacy, and choosing a tool you can review.

Includes: JSON to TSSofia MarchettiSofia Marchetti
Dev Tools & AI Coding

Write SQL With AI: Generate and Optimize Queries Safely

Turn reporting questions into tested SQL with explicit data contracts, edge-case fixtures, execution-plan evidence, and safe application types before trusting an AI-generated query.

Includes: JSON to TSSofia MarchettiSofia Marchetti
Dev Tools & AI Coding

Cursor AI Tips: Give the AI the Right Codebase Context

Give Cursor focused repository context, trustworthy API examples, and clear edit boundaries so generated changes fit your architecture instead of inventing a parallel one.

Includes: JSON to TSGrace ChenGrace Chen
Dev Tools & AI Coding

Refactor Code With AI: Legacy JavaScript in Safe Steps

Refactor legacy JavaScript through narrow AI-assisted patches, characterisation tests and boundary types, while preserving hidden contracts and a practical rollback path.

Includes: JSON to TSRavi DesaiRavi Desai
Dev Tools & AI Coding

AGENTS.md and Cursor Rules Examples for AI Coding Agents

A coding agent needs more than a feature request. It needs to know which commands are safe, where architectural decisions live and what counts as finished. Without that context, an assistant can produce a.

Includes: JSON to TSSofia MarchettiSofia Marchetti
Dev Tools & AI Coding

Reviewing AI-Written Code: A Workflow for AI Assistants

Review AI-generated changes with a repeatable workflow for defining scope, verifying dependencies, testing behavior, and keeping human ownership of every merged line.

Includes: JSON to TSGrace ChenGrace Chen