> ## Documentation Index
> Fetch the complete documentation index at: https://extension.js.org/llms.txt
> Use this file to discover all available pages before exploring further.

# Getting started with Extension.js

> Ship your first browser extension quickly with Extension.js, then level up with official templates and workflow guides as your project grows.

## Local by design

Extension.js runs on your machine: develop, run, and build extensions with
the CLI. It ends at packaging on purpose. When a packaged build is ready for
the stores,
[extension.dev](https://extension.dev?utm_source=extension-js-org\&utm_medium=sponsor\&utm_campaign=docs-seam),
the platform that sponsors Extension.js, is the next step.

## Who this path is for

* **New to extension development:** [Create your first extension](/docs/getting-started/create-your-first-extension)
* **Exploring quickly with existing samples:** [Get started immediately](/docs/getting-started/immediately)
* **Choosing a starting stack:** [Templates](/docs/getting-started/templates)
* **Comparing frameworks (WXT, etc.):** [Extension.js vs WXT](/docs/compare/extension-js-vs-wxt)

## Prerequisites

<Warning>
  Extension.js runs on Node.js 22.12 or newer, Deno 2.5 or newer, and Bun 1.2
  or newer (Bun from Extension.js 4.1.21). The CLI checks the runtime before any other code runs, and one
  below its own floor exits with code 1 and an upgrade message naming that
  runtime.
</Warning>

Check your version with `node --version`, or `deno --version` or `bun --version`, before you start.

## First successful outcome

<Steps>
  <Step title="Scaffold or run an extension project">
    Use `extension create` or choose a template to start from.
  </Step>

  <Step title="Launch dev and load the extension">
    Run `extension dev` and load the build output in a browser target.
  </Step>

  <Step title="Verify update behavior">
    Make one change and confirm the extension reloads.
  </Step>

  <Step title="Build production output">
    Run `extension build` for at least one browser.
  </Step>
</Steps>

<Note>
  **First run.** `extension dev` targets `chromium` by default and runs your
  extension in a version-pinned Chrome for Testing with an isolated profile, so
  it never touches the browser you use every day. When that browser is not on
  the machine yet, the first run asks to download it once and continues into
  the dev session as soon as it lands.

  Answer `n` and nothing is downloaded. Run `npx extension install chromium`
  whenever you want it, reach a browser you already have with `--browser=edge`
  or `--browser=brave`, pin any binary with `--chromium-binary <path>`, or
  start the dev server alone with `--no-browser`. A non-interactive shell, CI
  included, is never asked: it prints the install command and stops. See
  [why Extension.js downloads a browser](/docs/commands/install#why-extensionjs-downloads-a-browser)
  and [skip the managed download](/docs/commands/install#skip-the-managed-download).
</Note>

## Recommended reading flow

1. [Get started immediately](/docs/getting-started/immediately)
2. [Create your first extension](/docs/getting-started/create-your-first-extension)
3. [Templates](/docs/getting-started/templates)
4. [Commands overview](/docs/commands/index)

## Next steps

* Learn command choices in [Commands reference](/docs/commands/index).
* Configure project defaults in [Extension configuration](/docs/features/extension-configuration).
* Validate release readiness with [Workflows](/docs/workflows/index).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.