Projects
You connected an extension and want to know what the platform now holds for it. A project is one browser extension: the builds, releases and store submissions that come out of one manifest.
console.extension.dev/<workspace>/<project>Two repositories
A project binds a source repository to a mirror repository:
| Repository | Owner | Job |
|---|---|---|
| Source | You | The code, the commits, the history |
| Mirror | The platform | Where builds actually run |
Every build runs in the mirror, on the platform's GitHub org, so Actions minutes burn on the platform's account and never on yours. The mirror follows the source; you never push to it.
What a project owns
| Thing | Where it lives |
|---|---|
| Builds, one artifact set per commit | Builds |
| Release channels and the build each holds | Releases |
| Store credentials and submission history | Stores |
| Environment variables, production and staging | Project settings, Environment |
| Access tokens for CI and agents | Project settings, Access tokens |
Settings sections
| Section | Controls |
|---|---|
| General | Name, description, project identity |
| Team | Who can act on the project |
| Environment | Variables in production, staging, or all channels |
| Build | Build command, output directory, browsers to build |
| Deployment | Production branch, pull request builds, how a push dispatches |
| GitHub | Source repository connection and App installation |
| Channels | Release channels and their environment bindings |
| Stores | Store credentials, one set per store |
| Visibility | Public or private |
| Access tokens | Tokens for CI and agents |
| Danger | Transfer and deletion |
Visibility and share tokens
A project is public or private, nothing in between. There is no unlisted.
A new project starts with the visibility of the source repository it came from: a public repository makes a public project, a private one makes a private project. Change it later in Project settings, Visibility, which workspace owners and admins can do.
Only a project declared public is served to a stranger. Making it public exposes its listing page and released builds, never build logs, credentials, or environment variables. A private project can mint scoped share tokens instead, which open exactly the surface the token names and nothing else. See Public project pages.
When it fails
- A push landed but no build started. Check the branch first. When Project settings, Deployment names a production branch, only pushes to that branch build; a push to any other branch is skipped by design and spends nothing. Clear the field to build every branch you push. If the branch matches or the field is empty, check Project settings, GitHub: the App must still be installed on the source repository's owner. The last cause is the push ceiling, 25 builds from a push a month on free. Click Build in the console to run the same commit now, free, and see CI and releases.
- You named a production branch and the month still ran out. Pull requests spend the same allowance. A pull request opened, reopened or updated builds and spends one push build, and the production branch never filters it, because a pull request's head is a feature branch. Turn off Build pull requests in Project settings, Deployment to keep the allowance for pushes. It is on until you turn it off, so every project you already have builds them.
- You are worried about the Actions bill. Builds run in the mirror on the platform's org. Your GitHub account is never charged a minute for them.
- A reviewer outside the workspace cannot open the project. Mint a scoped share token from Project settings, Access tokens, or share the build itself, see Share an unpublished build for review.
- The build runs but produces the wrong artifact. The command and output directory in Project settings, Build were inferred at import. Correct them per browser, the defaults are
dist/chrome,dist/edge,dist/firefox. - Safari is enabled and no Safari artifact appears. Safari builds only on a paid plan. A free workspace has the Safari leg dropped from the dispatch and the other browsers still build, so the setting looks on and the artifact never arrives. On a paid plan the default output directory is
dist/safari, and the build emits the payload only; the Mac app is assembled at submit time.