TypeScript
The TypeScript starter is a sidebar panel plus a content script, written in TypeScript. Start from it when you want a working extension in TypeScript before you change a line.
The toolbar icon opens the panel, and the panel shows the title of the page you are on. The content script adds an "Open sidebar" button to every page, inside a shadow root so page styles stay out. The background worker opens the panel when you click that button. It is the JavaScript starter with types. The files are the same, types.d.ts sits beside the content script, and @types/chrome is already a dev dependency.
| Surfaces | Sidebar, content script, action, background |
| Language | TypeScript |
| Browsers | Chrome, Edge, Firefox |
| Source | extension-js/examples/typescript |
| Catalog page | templates.extension.dev/typescript |
From the terminal
One command creates the project and installs its dependencies. Then dev opens a browser with the extension loaded.
npx extension@latest create my-typescript --template typescript
cd my-typescript
npm run devFrom an agent
With the MCP server installed, one sentence does the same. The agent calls extension_create with this template, then extension_dev to run it.
Create a TypeScript extension called my-typescript and run itFrom the catalog
The catalog page runs the template live in the page, with its instructions and source one tab away. One click turns it into a private repository of your own. That click lands on Import with the template preselected.
Files
src/background.ts
src/content/ContentApp.ts
src/content/scripts.ts
src/content/styles.css
src/content/types.d.ts
src/images/
src/manifest.json
src/sidebar/index.html
src/sidebar/page-title.ts
src/sidebar/scripts.ts
src/sidebar/SidebarApp.ts
src/sidebar/styles.csssrc/manifest.json declares the action, the side panel, the content script's <all_urls> match and the background worker. The sidebar folder is the panel, the content folder runs on the page, and images holds the icons the manifest declares.
When it fails
[Extension.js] Requires Node.js >= 22.12. The CLI checks the runtime before any command and exits. Upgrade to Node.js 22.12 or newer. Bun 1.2 and Deno 2.5 or newer also pass the check.- The "Open sidebar" button does nothing in Firefox. Firefox opens a sidebar only from a toolbar click, so the Firefox build shows a hint in place of the button. Click the toolbar icon instead.
Next
- The other starters: JavaScript, React, Preact, Vue, Svelte
- Import a repository once the template is yours
extension_createfor every input the agent can set