Setup b751b5deea997bb7e0e894104dcb7411358728987196cb610f316edacaf9be54 Portable 8a258f29c62a03b745e93ea0265285e6d5df38d4f25cdbdadc20b4d2a54b97d7 Five theseus fixes since 0.3.16: e90062a - Bundled add-on updates now actually land. seedBundledAddons() previously copied a bundled add-on only when its target folder was missing, so the 0.3.14 screenshot editor never reached machines that already had an older screenshot/ folder from a previous run — Theseus quietly kept using the stale copy. The seeder now compares bundled and on-disk addon.json versions and reseeds with a timestamped backup under <userData>/addons-backups/<id>-<oldver>-<timestamp>/. ecfd481 + 6117429 - Signed add-on update endpoint, à la Firefox XPI. An add-on can now advertise an updateURL in its addon.json and be republished at any time without waiting for a Theseus release. The client fetches, verifies an Ed25519 signature over "silentmode.addon-update-v1|<id>|<version>|<tarball-sha256>", downloads the tarball, verifies the hash, and stages the new copy under <userData>/addons-updates-staged/ for promotion on next launch. Dormant in this build — the shipped addon-update-pubkeys.js is empty, so checkAndStageUpdates() short-circuits and makes no outbound requests; the feature activates when an operator ceremonies a key in and ships a follow-up release with the pubkey baked in. Operator tooling in scripts/generate-update-keypair.mjs and scripts/sign-addon-update.mjs; full brief in docs/ADDON-UPDATES.md. End-to-end verified against a local HTTP server: sign, serve, fetch, verify, download, extract, stage, promote, backup — plus signature tamper, wrong pubkey, sha256 tamper, and empty-pubkey short-circuit all rejected as expected. 15/15 checks pass. bfe5132 - Tab-switch flash is gone. Two independent causes: (a) tab views were created without an explicit background color, so the first frame after setVisible(true) showed whatever was underneath the view until the page painted; a solid theme-tracking ground fills the gap. (b) setActive iterated tabs in list order, so if the outgoing tab came before the incoming in the array, the loop hid the outgoing first and left one frame where no tab was visible; the incoming is now shown before any hides. a5a667d - Screenshot toolbar-menu captures no longer come out blank. The click handler dispatched capture synchronously while the native Menu.popup window was still on top, marking the tab view occluded and letting WebContents.capturePage() snapshot a stale/empty compositor frame at the correct dimensions (which the existing 0x0 retry couldn't detect). Dispatch now runs from the popup's close callback after a 120ms settle so the parent window is foreground and the compositor is live at capture time. a5a667d also - Ariadne — Install / Update / Uninstall alongside Turn on / off. The Ariadne toggle card in Settings > Registries grows three lifecycle actions. Install and Update run the bundled AriadneResolver-Setup-<ver>.exe silently and elevated (/VERYSILENT /SUPPRESSMSGBOXES /NORESTART — one UAC prompt, no wizard); Update is only visible when the bundled version is newer than what's installed. Uninstall reads Inno's QuietUninstallString from HKLM registry and runs it elevated. Status surfaces installed version + bundled version so the user can see what's on disk vs what would land next; buttons disable during work and refresh after both success and failure so the UI never lies. Deployed. Verified LIVE 0.3.18.
291 lines
15 KiB
HTML
291 lines
15 KiB
HTML
<!doctype html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<title>Theseus — Silent Mode</title>
|
|
<meta name="description" content="Silent Mode's own clients: Theseus Navigator for Windows and Android (browsers that speak the BCH name registry natively, Ariadne resolver built in), the public relay, the Firefox extension, and the standalone Ariadne Resolver for system-wide use.">
|
|
<link rel="stylesheet" href="../shared.css">
|
|
<style>
|
|
/* Flagship — ONE panel with a shared description, two versions inside.
|
|
Windows + Android are the same product on two platforms; the layout
|
|
says so before you read a word. */
|
|
.flagship{
|
|
background:var(--panel);border:1px solid var(--line);border-radius:16px;
|
|
padding:26px 26px 22px;margin:1.4rem 0 2rem;
|
|
}
|
|
.flagship .head{margin-bottom:1.3rem;text-align:center}
|
|
.flagship .head h2{font-size:1.7rem;font-weight:600;margin:0 0 .5rem;letter-spacing:.15px}
|
|
.flagship .head h2 .g{color:var(--acid)}
|
|
.flagship .head p{color:var(--mut);font-size:15px;line-height:1.65;margin:0 auto;max-width:680px}
|
|
|
|
.flagship .versions{
|
|
display:grid;grid-template-columns:1fr 1fr;gap:0;
|
|
background:var(--panel2);border:1px solid var(--line);border-radius:12px;overflow:hidden;
|
|
}
|
|
.flagship .versions .ver + .ver{border-left:1px solid var(--line)}
|
|
@media (max-width:800px){
|
|
.flagship .versions{grid-template-columns:1fr}
|
|
.flagship .versions .ver + .ver{border-left:none;border-top:1px solid var(--line)}
|
|
}
|
|
.ver{padding:20px 22px 18px;display:flex;flex-direction:column;gap:.55rem}
|
|
.ver .plat{color:var(--acid);font:600 11px/1 system-ui;letter-spacing:.22em;
|
|
text-transform:uppercase;margin-bottom:.1rem}
|
|
.ver h3{font-size:1.1rem;font-weight:600;margin:0}
|
|
.ver .desc{color:var(--mut);font-size:13.5px;line-height:1.62;margin:0}
|
|
.ver .meta{color:var(--dim);font-size:12px;margin-top:.2rem}
|
|
.ver .buttons{display:flex;gap:8px;flex-wrap:wrap;margin-top:.4rem}
|
|
.ver .buttons .btn{padding:9px 16px;font-size:13.5px}
|
|
.ver .verifybox{margin-top:auto;padding-top:11px;border-top:1px solid var(--line)}
|
|
.ver .verifybox .lbl{color:var(--mut);font-size:11.5px;margin-bottom:5px}
|
|
.ver .h{display:flex;gap:8px;flex-wrap:wrap;align-items:baseline;font-size:11px;
|
|
color:var(--dim);margin-top:4px}
|
|
.ver .h b{color:var(--mut);font-weight:600;min-width:78px}
|
|
.ver .h code{font-family:ui-monospace,monospace;font-size:10.5px;color:#c9d4e3;word-break:break-all}
|
|
|
|
.flagship .footnotes{margin-top:1.1rem;display:grid;gap:8px}
|
|
.flagship .fn{color:var(--mut);font-size:12.5px;padding:9px 13px;
|
|
background:var(--panel2);border:1px dashed rgba(255,255,255,.09);border-radius:8px}
|
|
.flagship .fn b{color:var(--ink)}
|
|
|
|
/* Old .dl style — kept for the standalone-resolver and extension sections. */
|
|
.dl{display:flex;justify-content:space-between;align-items:flex-start;gap:14px;flex-wrap:wrap;
|
|
background:var(--panel);border:1px solid var(--line);border-radius:12px;
|
|
padding:16px 20px;margin-top:1.3rem}
|
|
.dl > div:first-child{flex:1;min-width:240px}
|
|
.dl h3{margin:0 0 .3rem;font-size:1.05rem}
|
|
.dl p{margin:.3rem 0 0;color:var(--mut);font-size:14px}
|
|
.dl .meta{color:var(--dim);font-size:12.5px;margin-top:.5rem}
|
|
.dl .act{white-space:nowrap;display:flex;flex-direction:column;gap:6px}
|
|
.dl .act .btn{padding:9px 16px;font-size:13.5px;text-align:center}
|
|
.dl .act .soon{color:var(--dim);font-size:13px;border:1px dashed var(--line);
|
|
border-radius:999px;padding:7px 16px;display:inline-block;text-align:center}
|
|
.hashes{flex-basis:100%;margin-top:12px;border-top:1px solid var(--line);padding-top:12px}
|
|
.hashes .h{display:flex;gap:8px;flex-wrap:wrap;align-items:baseline;font-size:12px;color:var(--dim);margin-top:4px}
|
|
.hashes .h b{color:var(--mut);font-weight:600;min-width:110px}
|
|
.hashes code{font-family:ui-monospace,monospace;font-size:11.5px;color:#c9d4e3;word-break:break-all}
|
|
.platform-line{color:var(--dim);font-size:12.5px;margin-top:.2rem;letter-spacing:.02em}
|
|
</style>
|
|
<link rel="icon" type="image/svg+xml" href="/favicon.svg">
|
|
</head>
|
|
<body>
|
|
|
|
<nav class="topnav">
|
|
<a class="brand" href="../">⛓️ Silent <span class="g">Mode</span></a>
|
|
<a href="./" class="here">Theseus</a>
|
|
<a href="../prometheus/">Prometheus</a>
|
|
<a href="../sirius/">Sirius</a>
|
|
<a href="../hephaestus/">Hephaestus</a>
|
|
<a href="../helios/">Helios</a>
|
|
<a href="../hermes/">Hermes</a>
|
|
</nav>
|
|
|
|
<header class="hero">
|
|
<h1><span class="g">Theseus</span> — the browsers</h1>
|
|
<p class="tag">Everything you need to reach names on the Bitcoin Cash chain. The
|
|
flagship browser — <b>Theseus Navigator</b>, on Windows and Android — is below.
|
|
Beneath it: the no-install relay, the Firefox extension, and a standalone
|
|
Ariadne Resolver for system-wide BNS in every browser you use.</p>
|
|
</header>
|
|
|
|
<div class="wrap">
|
|
|
|
<!-- ============ FLAGSHIP — one product, two versions ============ -->
|
|
<section class="plain" id="flagship">
|
|
<div class="flagship">
|
|
|
|
<div class="head">
|
|
<h2>Theseus <span class="g">Navigator</span></h2>
|
|
<p>A browser that resolves BNS names on the device itself — no relay in the
|
|
middle, no account. Tabs, search, a home page built from names actually
|
|
registered on chain, and a badge on every page showing which chain and which
|
|
storage backend served it. The <b>Ariadne resolver</b> is baked in — the app
|
|
<i>is</i> both browser and resolver. One brand, two platforms.</p>
|
|
</div>
|
|
|
|
<div class="versions">
|
|
|
|
<div class="ver" id="windows">
|
|
<div class="plat">Desktop · Windows 64-bit</div>
|
|
<h3>for Windows</h3>
|
|
<p class="desc">Full-window desktop browser with Tor toggle and search bar.
|
|
macOS and Linux not yet packaged.</p>
|
|
<div class="meta">v0.3.18 · installer ~118 MB (with Ariadne's Thread) · portable ~117 MB · unsigned</div>
|
|
<div class="buttons">
|
|
<a class="btn acid" href="https://dl.silentmode.st/TheseusNavigator-Setup-0.3.18.exe">Installer</a>
|
|
<a class="btn ghost" href="https://dl.silentmode.st/TheseusNavigator-0.3.18-portable.exe">Portable .exe</a>
|
|
</div>
|
|
<div class="verifybox">
|
|
<div class="lbl">SHA-256 — verify before running</div>
|
|
<div class="h"><b>Installer</b><code>b751b5deea997bb7e0e894104dcb7411358728987196cb610f316edacaf9be54</code></div>
|
|
<div class="h"><b>Portable</b><code>8a258f29c62a03b745e93ea0265285e6d5df38d4f25cdbdadc20b4d2a54b97d7</code></div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="ver" id="android">
|
|
<div class="plat">Mobile · Android 5.0+ (API 21)</div>
|
|
<h3>for Android</h3>
|
|
<p class="desc">Phone-sized browser with tap-to-verify provenance — the block
|
|
and transaction behind each name are one tap away.</p>
|
|
<div class="meta">v0.11 · ~124 KB · self-signed release key</div>
|
|
<div class="buttons">
|
|
<a class="btn acid" href="https://dl.silentmode.st/ariadne-v0.11.apk">Download APK</a>
|
|
</div>
|
|
<div class="verifybox">
|
|
<div class="lbl">SHA-256 — verify before installing</div>
|
|
<div class="h"><b>APK</b><code>03c95832c16cc4763acaadbf328caa7d4bd05fc7c2994f6997a79cc6890bca44</code></div>
|
|
<div class="h"><b>Signing key</b><code>46ebbbe5dc73148d66410fd0337b1e6683472128c983e8e2578200b9e3ca548c</code></div>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="footnotes">
|
|
<div class="fn"><b>Also on the chain.</b> The same download page lives at
|
|
<a href="https://theseus.x/">theseus.x</a> (Sia-hosted, name pinned on chain).
|
|
Type it in Theseus's own address bar and you're skipping every intermediary —
|
|
no DNS, no CDN, no operator between you and the bytes.</div>
|
|
<div class="fn"><b>Ariadne's Thread is bundled.</b> The Windows installer
|
|
(v0.1.0+) prompts once during setup — recommended-on — to also install
|
|
the system-wide resolver, so BNS names also work in Chrome, Edge, and
|
|
every other browser on the machine. Uninstalling Theseus asks whether
|
|
to remove the resolver too. Skip the prompt and Theseus is still fully
|
|
self-contained. The <a href="#resolver">standalone Ariadne Resolver</a>
|
|
below is the same code for anyone who wants only the resolver.</div>
|
|
<div class="fn"><b>Android APK still named <code style="background:transparent;border:none;padding:0">ariadne-v0.11.apk</code>.</b>
|
|
Same app, same signing key — updates in place. The label shifts to <b>Theseus
|
|
for Android</b> so both platforms share one brand; the next APK carries the
|
|
new filename.</div>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="note"><b>Not in a store.</b> Neither version is on the Microsoft Store,
|
|
Google Play, or the App Store. Distributing there requires a legal identity and
|
|
the store's permission — the two things this project exists to do without. You
|
|
will have to allow the install once, and your OS will warn about an unrecognized
|
|
app. <b>The SHA-256 (and, on Android, the signing-key fingerprint) is the real
|
|
check.</b></div>
|
|
</section>
|
|
|
|
<!-- ============ NO-INSTALL RELAY ============ -->
|
|
<section id="relay">
|
|
<h2>No install at all — the relay</h2>
|
|
<p class="lede">A public gateway reads the blockchain for you and hands the page to
|
|
your ordinary browser over ordinary HTTPS. Works on any phone, tablet or computer,
|
|
in any browser, with nothing to download and no settings to change. Fastest way
|
|
to see a <code class="inline">.bch</code> name; costs you a little privacy — the
|
|
relay operator can see what you asked for.</p>
|
|
|
|
<table>
|
|
<tr><th>Open this</th><th>What you get</th><th>Where the page lives</th></tr>
|
|
<tr><td><a href="https://navigate.st/bns/hello.bch"><code>navigate.st/bns/hello.bch</code></a></td>
|
|
<td>A small page</td><td><span class="src s-chain">inside a blockchain transaction</span></td></tr>
|
|
<tr><td><a href="https://navigate.st/bns/silentmode.bch"><code>navigate.st/bns/silentmode.bch</code></a></td>
|
|
<td>This project's own on-chain demo</td><td><span class="src s-chain">inside a blockchain transaction</span></td></tr>
|
|
<tr><td><a href="https://navigate.st/bns/theseus.x"><code>navigate.st/bns/theseus.x</code></a></td>
|
|
<td>Theseus Navigator's own page</td><td><span class="src s-sia">Sia storage network</span></td></tr>
|
|
<tr><td><a href="https://navigate.st/bns/coinspectrum.deviant.bch"><code>navigate.st/bns/coinspectrum.deviant.bch</code></a></td>
|
|
<td>A full multi-file site</td><td><span class="src s-sia">Sia storage network</span></td></tr>
|
|
<tr><td><a href="https://navigate.st/bns/coinspectrum.bch"><code>navigate.st/bns/coinspectrum.bch</code></a></td>
|
|
<td>The same site again</td><td><span class="src s-srv">an ordinary web server</span></td></tr>
|
|
</table>
|
|
</section>
|
|
|
|
<!-- ============ BROWSER EXTENSIONS ============ -->
|
|
<section id="extensions">
|
|
<h2>Browser extensions</h2>
|
|
<p class="lede">Add BNS to a browser you already use. The lightest possible install —
|
|
no daemon, no system changes, works only inside the browser it's installed in.</p>
|
|
|
|
<div class="dl" id="firefox">
|
|
<div>
|
|
<span class="pill p-alpha">alpha</span>
|
|
<h3>Ariadne for Firefox</h3>
|
|
<p>A browser add-on that resolves BNS names inside Firefox. 8 KB, no
|
|
dependencies, no background service, no system changes. Also runs on
|
|
<b>Firefox for Android</b>. Known limit: no TLS pinning yet — sites reached
|
|
over <code class="inline">ip</code> records are only as trustworthy as the
|
|
upstream server. Being fixed.</p>
|
|
<div class="meta">Firefox · ~8 KB · packaging in progress</div>
|
|
</div>
|
|
<div class="act">
|
|
<span class="soon">Packaging in progress</span>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<!-- ============ STANDALONE ARIADNE RESOLVER ============ -->
|
|
<section id="resolver">
|
|
<h2>System-wide — Ariadne Resolver (standalone)</h2>
|
|
<p class="lede">For advanced users who want BNS names working in <i>every</i>
|
|
browser on their Windows machine — Chrome, Edge, Firefox, everything — without
|
|
installing Theseus. Runs as a small background service that intercepts DNS and
|
|
mints TLS certificates on the fly for BCH-registered names. This will become an
|
|
optional checkbox inside the Theseus installer once v0.0.4 ships; standalone
|
|
remains the way to get it without the browser.</p>
|
|
|
|
<div class="dl">
|
|
<div>
|
|
<span class="pill p-alpha">alpha</span>
|
|
<h3>Ariadne Resolver for Windows</h3>
|
|
<p>Asks for administrator rights because it changes how your machine resolves
|
|
names. Adds a background service, points DNS at loopback, imports one root
|
|
certificate <b>name-constrained</b> to the BNS TLDs — the root cannot vouch
|
|
for <code class="inline">.com</code>. Everything reverses with the bundled
|
|
uninstaller.</p>
|
|
<div class="meta">Windows 64-bit · v0.1.0 · bundled Node runtime · unsigned build</div>
|
|
</div>
|
|
<div class="act">
|
|
<a class="btn" href="https://dl.silentmode.st/AriadneResolver-Setup-0.1.0.exe">Installer</a>
|
|
</div>
|
|
<div class="hashes">
|
|
<div style="color:var(--mut);font-size:12.5px">SHA-256 — verify before elevating:</div>
|
|
<div class="h"><b>Installer</b><code>9ab725bec5567625e5857a49b112c4fbc0f59dbdd623abd7110429306f5d0ddb</code></div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<!-- ============ VERIFYING ============ -->
|
|
<section id="verify">
|
|
<h2>Verifying every download</h2>
|
|
<div class="grid">
|
|
<div class="card">
|
|
<h3>Windows</h3>
|
|
<p>After downloading, compute the SHA-256 and compare it to the value above:
|
|
<code class="inline">certutil -hashfile <file> SHA256</code>.
|
|
Builds carry <b>no code-signing certificate</b> — that requires a legal
|
|
identity, which is what this project exists to avoid. Windows will warn about
|
|
an unrecognized app; that warning is expected. The hash is the real check.</p>
|
|
</div>
|
|
<div class="card">
|
|
<h3>Android</h3>
|
|
<p>Hash the downloaded <code class="inline">.apk</code> on a computer before
|
|
moving it to the phone, or use any file-hashing app. The <b>signing
|
|
certificate fingerprint</b> is what matters most — every future update is
|
|
signed with the same key. Android will refuse to install an update signed
|
|
by anyone else, so once you have checked it, that check protects every
|
|
version after this one.</p>
|
|
</div>
|
|
<div class="card">
|
|
<h3>On chain</h3>
|
|
<p>The canonical checksum list will be published as a record on
|
|
<code class="inline">releases.silentmode.bch</code> — the name pins where it
|
|
is served from, so a tampered mirror cannot change what you check against.
|
|
Machine-readable manifest: <a href="../releases-manifest.json"><code class="inline">releases-manifest.json</code></a>.
|
|
Human-readable page: <a href="../releases/"><code class="inline">/releases/</code></a>.</p>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
</div>
|
|
|
|
<footer>
|
|
<div>Silent Mode — a Deviant project.</div>
|
|
<div class="fine">Alpha software on a test network. Nothing here is signed by an
|
|
authority your device already trusts — <b>by design</b>. The SHA-256 is the real
|
|
check. Nothing here is a service, a product guarantee, or an investment.</div>
|
|
</footer>
|
|
|
|
</body>
|
|
</html>
|