Start from a template
You want a working extension to start from, not an empty directory. A template is a working extension: every one builds, runs, and loads in a browser before you change a line.
templates.extension.dev renders the whole catalog, one card per template. Each card carries a copyable local CLI command, per browser downloads, and one click that turns the template into a repository of your own.
What a template page shows
| Route | Shows |
|---|---|
/<slug> | The template running live in the browser emulator |
/<slug>/instructions | What the template does and how to work in it |
/<slug>/source | The real files, browsable in the page |
/a/<artifactId> | A shared artifact, kept for 90 days |
The preview on the detail page is the template compiled and running, not a screenshot of it.
Turning one into a repository
One click on a template opens extension.dev/import?template=<slug>&private=true, which creates a real private GitHub repository from the template and connects it as a project. Configuration works signed out; creating the repository needs a GitHub session, because the repository is written to your account. Creation is rate limited to 20 repositories per hour per user.
See Import for what happens on that page.
Working locally instead
The command on every card runs the template on your machine:
npx extension@latest create my-extension --template=initThat path is the Extension.js framework and needs no account. It is documented at extension.js.org.
What the catalog covers
| Group | Examples |
|---|---|
| Surfaces | Popup, options page, side panel, new tab, devtools |
| Content scripts | Isolated world, main world, multiple entries, CSS and Sass |
| Frameworks | React, Preact, Svelte, Vue, TypeScript, plain JavaScript |
| Styling | Tailwind, Sass, Less, CSS modules |
| AI | ChatGPT, Claude, Gemini, Perplexity, Transformers.js |
Where the templates come from
The corpus is not authored in the catalog app. It is pinned to a commit of extension-js/examples and shipped as a content-addressed artifact. A fidelity harness re-derives the catalog from the pinned source and fails when the rendered listing and the real files disagree, so a template that stops building cannot quietly stay in the catalog.
When it fails
- Repository creation is refused with a rate limit. The limit is 20 repository creations per hour per user. Wait, or use the local CLI command on the card in the meantime.
- A fix made to a template does not last. The next corpus sync overwrites it. Fix the template in extension-js/examples, then the catalog chooses it up on the next pin.
- An
/a/<artifactId>link returns nothing. Shared artifacts are kept 90 days. Republish from the source that produced the artifact. - The create click asks for a sign-in. Browsing and configuration work signed out. Creating the repository writes to your GitHub account, so that step needs a GitHub session.
