🔌 Lesson 39 of 40 Extension Dev Expert

Writing Your First VS Code Extension

VS Code is built on extensions — and you can write one too. This lesson scaffolds a new extension, explores the Extension API, and publishes to the marketplace.

98% complete

1Scaffolding an Extension

Terminal
npm install -g @vscode/generator-code yo
yo code
# Choose: New Extension (TypeScript)
# Fill in: name, description, publisher

This creates a ready-to-run extension with a Hello World command. Press F5 to launch an Extension Development Host — a second VS Code window with your extension loaded.

2The Extension API

The vscode npm module exposes the full VS Code API. Key namespaces:

  • vscode.commands — register and execute commands
  • vscode.window — show messages, input boxes, webviews
  • vscode.workspace — access files, settings, workspace state
  • vscode.languages — register providers for completions, hover, diagnostics
  • vscode.debug — interact with the debugger

3Registering a Command

extension.ts
export function activate(ctx: vscode.ExtensionContext) {
  const cmd = vscode.commands.registerCommand(
    'myext.helloWorld',
    () => vscode.window.showInformationMessage('Hello!')
  );
  ctx.subscriptions.push(cmd);
}

4Publishing to the Marketplace

Terminal
npm install -g @vscode/vsce
vsce package    # creates a .vsix file
vsce publish    # publish to marketplace (requires PAT)

5Testing Extensions

Use @vscode/test-electron to write integration tests that run inside the Extension Development Host. Each test opens a real VS Code window and exercises your extension's commands and APIs programmatically.


All 40 Lessons
Pick any lesson to jump straight to it.
L01
Getting Started with VS Code
FoundationBeginner
→
L02
The VS Code Interface & Layout
FoundationBeginner
→
L03
Installing & Managing Extensions
ExtensionsBeginner
→
L04
Keyboard Shortcuts & Command Palette
ProductivityBeginner
→
L05
Settings, Themes & Customization
CustomizationBeginner
→
L06
IntelliSense & Code Completion
Editor FeaturesBeginner
→
L07
Integrated Terminal Mastery
ProductivityBeginner
→
L08
Search, Find & Replace Across Files
Editor FeaturesBeginner
→
L09
Git & Source Control with VS Code
Version ControlBeginner
→
L10
Snippets & Emmet Abbreviations
ProductivityBeginner
→
L11
GitHub Copilot — Getting Started
AI & CopilotIntermediate
→
L12
Copilot Chat & Inline Ask
AI & CopilotIntermediate
→
L13
JavaScript & TypeScript Development
LanguagesIntermediate
→
L14
Python Development in VS Code
LanguagesIntermediate
→
L15
Debugging Like a Pro
DebuggingIntermediate
→
L16
Linting, Formatting & ESLint
Code QualityIntermediate
→
L17
Multi-Cursor Editing & Refactoring
Editor FeaturesIntermediate
→
L18
Workspaces & Multi-Root Projects
WorkspaceIntermediate
→
L19
Tasks, Build Systems & npm Scripts
WorkflowIntermediate
→
L20
Testing with Jest, Vitest & Pytest
TestingIntermediate
→
L21
React Development Workflow
Web DevIntermediate
→
L22
Node.js & Express in VS Code
BackendIntermediate
→
L23
Docker & Dev Containers
DevOpsIntermediate
→
L24
Live Share — Real-Time Collaboration
CollaborationIntermediate
→
L25
Jupyter Notebooks in VS Code
Data ScienceIntermediate
→
L26
REST Client & API Testing
API DevIntermediate
→
L27
SSH Remote Development
Remote DevIntermediate
→
L28
WSL 2 Integration on Windows
Remote DevIntermediate
→
L29
Advanced Debugging: Breakpoints & Watch
DebuggingAdvanced
→
L30
Copilot Agent Mode — Agentic Workflows
AI & CopilotAdvanced
→
L31
Profile & Performance Optimisation
PerformanceAdvanced
→
L32
GitHub Actions & CI/CD Integration
DevOpsAdvanced
→
L33
Custom Keybindings & Key Maps
CustomizationAdvanced
→
L34
Settings Sync & Dotfiles Management
WorkflowAdvanced
→
L35
Language Server Protocol (LSP) Explained
InternalsAdvanced
→
L36
Rust Development in VS Code
LanguagesAdvanced
→
L37
Go Development in VS Code
LanguagesAdvanced
→
L38
GitHub Codespaces & vscode.dev
Remote DevExpert
→
L39
Writing Your First VS Code Extension
Extension DevExpert
→
L40
Pro VS Code Workflow & Mastery
MasteryExpert
→