Add-ons for Theseus Navigator — the ones that ship in the box and the ones anyone can publish. Every package is signed (by the Silent Mode operator, or by the publisher's own BCDN name) and verified on your device before install. No cert authority, no app-store gatekeeper. First-party plug-ins (Aegis, Ariadne's Thread) have their own page.
Ship with every Theseus build and update over the operator-signed channel. Versions and hashes
are read from each add-on's signed updates.json when this page loads.
theseus.x/extensions/screenshot/updates.jsonscreenshot-0.6.5.tar.gz87ae730d329ff9f552bbf513efba19bd14bb016bb90e24f7b62868434dadda60theseus.x/extensions/pdf-editor/updates.jsonpdf-editor-0.1.0.tar.gz—Published by BCDN name holders, signed with the wallet that holds the name. Open this page in Theseus and click Install in Theseus — or use Settings › Extensions › Community. Either way Theseus fetches the package itself and re-checks every signature against the name's current owner in its own chain index — the relay cannot substitute code under a trusted name.
An extension is a folder with an addon.json and a main script. Package it, sign it with
the wallet that holds one of your BCDN names, and it is listed above within a minute. Nothing to apply for.
activate(api):
my-ext/
addon.json {"id":"my-ext","name":"My Extension","version":"1.0.0",
"description":"…","author":"you.bch","icon":"✨",
"main":"index.js","capabilities":["sidebar-panel"]}
index.js module.exports = { activate(api) {
api.registerSidebarPanel({ id:"main", title:"My Extension", icon:"✨", page:"panel.html" });
} };
panel.html plain HTML, runs in the sidebar; window.silentmode.storage for local state
The bundled Notepad
is the smallest complete example; addons-host.js
is the full API. id is [a-z0-9._-], 2–64 chars, and belongs to the first name that publishes it.tar -czf my-ext-1.0.0.tar.gz -C my-ext . (max 8 MB; addon.json at the root or in a single top folder).Prefer the command line? The upload is one signed PUT:
PUT https://silentmode.st/api/ext/<your-name>/<id>/<version> with the tarball as body and headers
x-bns-ts, x-bns-sig (over sha256("BNS-EXT1\n<name>\n<id>\n<version>\n<sha256>\n<ts>"))
and x-bns-entry-sig (over sha256("silentmode.extension-v1|<id>|<version>|<sha256>|<name>")),
both 65-byte BCH message signatures by the name's owner key.
Same mechanism a Firefox XPI update uses, cut down to what a name-native browser needs.
updates.json for each installed add-on that declares an updateURL in its manifest.silentmode.addon-update-v1|<id>|<version>|<sha256>. Theseus verifies against a small set of operator public keys baked into the build. Unsigned or badly-signed entries are dropped silently.<userData>/addons-updates-staged/<id>-<version>/.promoteStagedUpdates moves the staged copy into addons/<id>/. Any prior copy is renamed to addons-backups/<id>-<oldver>-<timestamp>/ so hand-edits survive.The Ed25519 public key baked into Theseus 0.3.19+. Rotation is by adding a new pubkey and shipping a Theseus release that carries both, then a follow-up release removing the old — during the overlap, entries can be signed by either.
Generated 2026-09-07. Held offline by the Silent Mode operator.
The endpoint is generic — any bundled add-on can advertise an updateURL.
Concrete next-steps: