Theseus Extensions

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.

Bundled extensions

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.

πŸ“Έ Screenshot current 0.6.5

Capture the current tab β€” visible viewport, entire scrollable page, or a rectangle you draw. The capture opens in a full-tab editor: crop, annotate, line tool, resizable text, redact, save.
Settings β€Ί Extensions Β·
Install in Theseus Download tarball
Updates: signed updates.json Β· SHA-256 verified before every install
Signed update manifest β€” SHA-256 verified before install
sha25687ae730d329ff9f552bbf513efba19bd14bb016bb90e24f7b62868434dadda60

πŸ“ Notepad bundled 0.1.0

Right-sidebar notes. Text lives on this machine only and autosaves as you type.
Settings β€Ί Extensions Β· no update channel yet β€” ships with each Theseus release.
Ships with Theseus β€” nothing to install; appears under Settings β€Ί Extensions on first launch.

🌐 Translate bundled 0.1.0

Select text on any page and right-click Translate β€” the sidebar panel shows the translation, with LibreTranslate or Google as the backend (your choice in the panel). Nothing is sent until you ask.
Settings β€Ί Extensions Β· no update channel yet β€” ships with each Theseus release.
Ships with Theseus β€” nothing to install; appears under Settings β€Ί Extensions on first launch.

PDF Editor current 0.1.0

Open a PDF in a full tab β€” read, highlight, mark up, reorder or rotate or drop pages, fill form fields, save a new copy. Annotations are written as real PDF content, the original is never touched. Opens from the toolbar's PDF Editor menu or the right-click Open PDF in editor on any link.
Settings β€Ί Extensions Β· signed update channel
Install in Theseus Download tarball
Updates: signed updates.json Β· SHA-256 verified before every install
Signed update manifest β€” SHA-256 verified before install
sha256β€”
No bundled extension matches that search.

Community extensions

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.

Loading the catalog…
No community extension matches that search.
Trust, stated plainly. A community extension runs with the same access as any add-on β€” treat one like an unsigned executable from that publisher. The signature proves who published it, not that it is safe.

Build and publish your own

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.

  1. Write it. The manifest and a CommonJS entry that exports 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.
  2. Test it locally. Settings β€Ί Extensions β€Ί Open extensions folder, drop the folder in, Reload.
  3. Package 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).
  4. Publish it. Open Publish an extension β†’ sign in with the recovery phrase of the wallet that holds your name, pick the package, and sign. The gateway verifies the signature against the name's on-chain owner, stores the package on Sia, and updates the catalog. New versions: same page, higher version number, same name.

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.

How updates work

Same mechanism a Firefox XPI update uses, cut down to what a name-native browser needs.

  1. Every 30 seconds after boot Theseus fetches updates.json for each installed add-on that declares an updateURL in its manifest.
  2. Each entry carries an Ed25519 signature over 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.
  3. If a signed version beats what's installed, Theseus downloads the tarball, re-checks its sha256, and stages the new copy under <userData>/addons-updates-staged/<id>-<version>/.
  4. On the next Theseus launch, promoteStagedUpdates moves the staged copy into addons/<id>/. Any prior copy is renamed to addons-backups/<id>-<oldver>-<timestamp>/ so hand-edits survive.
  5. Settings β€Ί Extensions has a Check for updates button and shows what is staged; first-party plug-ins (Aegis) can also stage and restart from their own panel.

Operator key

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.

732b1263a236b0030383a2376597cfa43c3624b3ca2912a46134f8f2a06e6012

Generated 2026-09-07. Held offline by the Silent Mode operator.

Roadmap

The endpoint is generic β€” any bundled add-on can advertise an updateURL. Concrete next-steps: