Internal browser extensions for Chrome and Firefox. Each extension lives in its own folder under extensions/ and has its own README.
| Extension | What it does |
|---|---|
| uri-whisperer | Links tech.studitemps:… URIs on debest and kraken to the URI Whisperer |
Ready-made packages are under Releases. Every release belongs to one extension, as the tag shows (<extension>/v<version>).
Firefox
- Download the
.xpiof the release. - Open
about:addons→ gear icon → Install Add-on From File… and select the file.
After that, Firefox installs new versions on its own. It checks the extension's update_url (https://studitemps.github.io/browser-extensions/<extension>/updates.json).
Chrome
- Unzip the release's
-chrome.zip. - Open
chrome://extensionsand turn on developer mode. - Click Load unpacked and select the unzipped folder.
Chrome doesn't update unpacked extensions. For a new version, replace the folder and click ↻ in chrome://extensions.
For development, load the extension's folder directly:
- in Chrome as an unpacked extension
- in Firefox via
about:debugging#/runtime/this-firefox→ Load Temporary Add-on… →manifest.json(lasts until restart)
Releases are built by the GitHub Action .github/workflows/release.yml. It is triggered by a tag <extension>/v<major>.<minor>.<patch>:
git tag uri-whisperer/v0.4.0git push origin uri-whisperer/v0.4.0The action then:
- Writes the version from the tag into
extensions/<extension>/manifest.json(in the build only, not committed). You don't editversionby hand. - Runs
extensions/<extension>/test/*.test.mjswithnode --test, andweb-ext lint. - Has AMO sign the extension as "unlisted". This usually takes a few minutes.
- Publishes a GitHub release with the
.xpiand a Chrome zip. - Writes
<extension>/updates.jsonto thegh-pagesbranch, which GitHub Pages serves.
AMO accepts each version only once, so you can't reuse a tag.
Signing locally as a fallback: Bump version in the extension's manifest.json first, then run from the extension's folder:
npx web-ext sign --channel=unlisted --api-key="$AMO_JWT_ISSUER" --api-secret="$AMO_JWT_SECRET" --ignore-files 'test/**' 'web-ext-artifacts/**' 'README.md'The signed file ends up in web-ext-artifacts/.
- Create
extensions/<name>/with a Manifest V3manifest.json. - Give it a unique
browser_specific_settings.gecko.id. - Set
browser_specific_settings.gecko.update_urltohttps://studitemps.github.io/browser-extensions/<name>/updates.json. - Put tests in
test/*.test.mjs, if there are any. - Add the extension to the table above.
- Release with the tag
<name>/v0.1.0.
This repository is public, so new extensions must not contain anything confidential.