Skip to content

Public project pages

You want people to find your extension's builds without you sending anyone a link. Make the project public and it answers at an address of its own:

<workspace>.extension.dev/<project>

The workspace lives in the host rather than a path segment, so a link carries the workspace identity before the page loads.

The vocabulary

Under the project root, every page is a noun:

PathContents
/builds/<buildId>One build, every browser it produced
/builds/<buildId>/whats-newWhat changed in that build
/builds/<buildId>/<browser>One artifact: zip download, executable downloads, declared access
/channels/<channel>What the channel currently holds
/<channel>Shortcut to the channel page
/versions/<version>A version across the builds that carried it

The per-browser build page is the one strangers land on. It offers the artifact as a zip, the executable downloads where the build produced them, and Declared access: each permission and host pattern the manifest declares, annotated with what it unlocks. A visitor learns what <all_urls> means without reading a manifest.

Visibility fails closed

Every page here is gated on the project's recorded visibility, and the gate fails closed. A project that is private, unlisted, or whose visibility the app does not recognize renders a fallback view, and the OG image never carries the project's name. That includes the OG image, the one surface crawlers index.

WARNING

Making a project public exposes its listing and its builds. It does not expose build logs, store credentials, or environment variables. Those never leave the console.

Visibility is set per project in project settings under visibility.

Private projects share by token

A private project has no public page, so it shares the other way: mint a scoped share token.

POST /api/projects/{id}/share

The call returns a shareUrl and its expiry. It refuses public projects, because a public project already has a page and a scoped token would only counterfeit a gate that is not there.

When it fails

  • The page shows a brand card instead of your project: visibility is not public. That is the gate working. Set it in project settings, visibility.
  • POST /api/projects/{id}/share refuses: the project is public. Link the page itself.
  • A channel shortcut 404s: the channel name collides with a reserved path segment such as builds. Use the full /channels/<channel> form.

Next