Back
Lesson 1

Web Extension Course for Everyone

Overview

This course teaches modern web extension development by building a complete, production-ready browser extension from scratch. You’ll create TabNotes, a practical note-taking extension that works across Chrome and Firefox, while learning fundamental extension APIs and development patterns.

By the end of this 14-lesson series, you’ll have a published extension available in both the Chrome Web Store and Firefox Add-ons marketplace.

What We’re Building

TabNotes is a browser extension that lets users save notes for specific websites. Each note persists with its corresponding URL, creating a personal annotation system for the web.

View the Source Code: All lesson code is available on GitHub with commit-by-commit progression showing exactly what changes in each lesson.

What You’ll Learn

This course covers the complete web extension development workflow:

Extension Architecture:

  • Understanding manifest.json and extension permissions
  • Popup windows, background scripts, and content scripts
  • Message passing between extension components
  • Extension lifecycle and service workers

Browser APIs:

  • chrome.storage API for data persistence
  • chrome.tabs API for tab detection and management
  • chrome.action API for icon manipulation
  • chrome.runtime API for extension messaging

Modern Tooling:

  • WXT framework for cross-browser development
  • TypeScript for type-safe extension code
  • Hot module reloading for faster development
  • Production builds and store submission

Best Practices:

  • Permission management and security
  • User experience patterns for extensions
  • Cross-browser compatibility strategies
  • Publishing to Chrome Web Store and Firefox Add-ons

Prerequisites

This course assumes intermediate JavaScript knowledge and basic familiarity with web development.

Required Skills:

  • JavaScript ES6+ (async/await, destructuring, modules)
  • DOM manipulation and event handling
  • Basic CSS for styling

Helpful but Not Required:

  • TypeScript (I’ll explain TypeScript syntax as we go)
  • Modern build tools (Vite, bundlers)
  • Browser DevTools experience

Development Environment:

  • Node.js installed (16.x or higher)
  • A package manager (npm, yarn, pnpm, or bun)

Try It Out

Before starting development, explore the finished extension to understand what we’re building:

Install the Published Extension:

Course Structure

Progressive Learning Path

This course follows a build-as-you-learn approach. Each lesson introduces one new concept and immediately implements it in the TabNotes extension.

No templates or boilerplate - we start with an empty folder and build everything from scratch, ensuring you understand every line of code.

Incremental complexity - early lessons cover fundamentals (manifest, permissions, popup), while later lessons tackle advanced topics (messaging, lifecycle, production builds).

Production-ready result - by Lesson 14, you’ll have a fully functional extension ready for publication, not just a tutorial project.

Lessons Overview

  1. Introduction - Course overview and setup (you are here)
  2. Extension Basics - Create your first minimal extension
  3. WXT Framework - Modern development environment with hot reloading
  4. Manifest Configuration - Permissions and extension metadata
  5. Popup Interface - Build the note-taking UI
  6. Storage API - Persist notes with chrome.storage
  7. Dynamic Icons - Visual feedback for notes
  8. Tab Detection - Monitor user navigation
  9. Content Scripts - Inject code into web pages
  10. Messaging - Communication between extension components
  11. Custom Pages - Settings and management interfaces
  12. Extension Lifecycle - Service workers and background logic
  13. Polish & UX - Final improvements and bug fixes
  14. Publishing - Submit to Chrome Web Store and Firefox Add-ons

What’s Next

Ready to build your first extension? Lesson 2 walks through creating a minimal Chrome extension to understand the fundamental concepts before introducing modern tooling.

You’ll create a basic extension that logs tab changes - simple enough to understand immediately, but demonstrating core extension concepts you’ll use throughout the course.