Skip to content

Import

You have an extension, in a repository or fresh out of a template or a generation session, and you want the platform building it. extension.dev/import is where all three arrive.

Three sources, one page

Arriving withComes fromSign-in
A repositoryThe GitHub lane on /new, or a direct linkGitHub session required
?template=<slug>The template catalogConfiguration works signed out, creating the repository needs a session
?source=generation&artifactId=gen_...A published generation sessionSession required to create the repository

The GitHub lane on /new shows an App installation selector and a repository picker, then hands the chosen repository to /import.

What the analysis reads

The import calls POST /api/import/analyze, which walks the git tree and fills the configuration for you:

  • manifest.json anywhere in the tree: name, version, and which browsers the extension declares. Declared support decides which artifacts get built.
  • Monorepos: a nested package.json marks a subproject, and the analysis suggests that directory as the project root.
  • Build command and output directory, inferred per browser. The output defaults are dist/chrome, dist/edge, and dist/firefox.

Public repositories analyze without a GitHub App installation. Private ones need the App installed on the account or organization that owns them.

What it does not need

The import does not require a specific framework, bundler, or directory layout. It needs a manifest and a build that produces a loadable extension directory. An extension that does not use Extension.js still imports.

After the import

The project exists, bound to a mirror repository where builds run, and shows no builds until the first commit lands. Push once and the first artifacts appear under Builds. Template and generation imports create the repository first, through POST /api/templates/create-repo, rate limited to 20 repository creations per hour per user.

When it fails

  • The analysis finds no manifest. There is no manifest.json in the tree, or it lives outside the selected root directory. For monorepos, accept the suggested root or set it by hand.
  • A private repository will not analyze. Install the GitHub App on the owner of the repository. Public repositories analyze without it.
  • Builds run but the artifact is empty. The output directory does not match what the build writes. The defaults are dist/chrome, dist/edge, dist/firefox; override them per browser in Project settings, Build.
  • Repository creation is refused with a rate limit. Template and generation imports create at most 20 repositories per hour per user. Wait and retry.

Next