Development Setup
Set up the OpenBrowse development environment.
Prerequisites
- Node.js 22.13+ (required by pnpm 11)
- pnpm 11+ (the workspace uses
strictDepBuilds, which requires pnpm 11) - Chrome or Chromium-based browser
Setup
git clone https://github.com/openbrowse-ai/openbrowse.git
cd openbrowse
pnpm installInstall runs at the root and bootstraps every workspace (apps/extension, apps/docs, packages/connectors).
Running the extension
pnpm devThis starts WXT in development mode for apps/extension/ with hot reload. Load the unpacked extension from apps/extension/.output/chrome-mv3-dev in chrome://extensions.
For Firefox: pnpm dev:firefox.
Running the docs site
pnpm dev:docsRuns the documentation site (this site) at http://localhost:3000.
Useful scripts
pnpm compile— typecheck every workspace package in parallel.pnpm test— run the extension's vitest suite.pnpm build— production build for every workspace.pnpm refresh:models— re-vendor the models.dev snapshot atapps/extension/src/registry/models-dev/snapshot.json. Run this when you want to pick up newly added providers/models.
Workspace layout
apps/
├── extension/ — WXT Chrome extension (the product)
└── docs/ — Next.js + Fumadocs site (this site)
packages/
└── connectors/ — @openbrowse/connectors registry, shared between the twoCutting a release
Releases are driven by Changesets.
- If a PR changes user-facing behavior, run
pnpm changesetand commit the generated.changeset/*.mdfile. See.changeset/README.md. - On every push to
main, the Changesets workflow automatically opens or updates a "Version Packages" PR that bumpsapps/extension/package.json, regeneratesapps/extension/CHANGELOG.md, and consumes the changeset files. - Merging the Version Packages PR creates an
openbrowse@X.Y.Zgit tag (Changesets' workspace tag format for private packages, enabled viaprivatePackages.tagin.changeset/config.json). - After tagging, the Changesets workflow invokes the Release extension workflow (via
workflow_call), which buildsapps/extension/.output/openbrowse-<version>-chrome.zip, asserts the pinned manifestkey, and updates the GitHub Release that Changesets created — renaming it tovX.Y.Zand attaching the zip. The docs' Install page links toreleases/latest, so the new zip becomes the recommended manual download automatically. - The Chrome Web Store upload is intentionally a manual step — log into the developer dashboard and upload the exact same zip from the GitHub release as a new version of the listing.
If the build/upload step fails for an already-tagged release (e.g. flaky CI, transient outage), re-trigger via Actions → Release extension → Run workflow → enter the tag (e.g. openbrowse@0.3.0). An existing release is updated in place — name, body, and zip are refreshed.
Never change the manifest `key`
apps/extension/wxt.config.ts pins the extension's public key so that
manual installs share an extension ID with the Chrome Web Store
listing. Rotating or removing this value would orphan every existing
user's storage (chrome.storage, IndexedDB, OPFS) and the Web Store
would reject the upload anyway. Treat the field as immutable.