2026-07-29 13:54:34 +02:00
<!doctype html>
< html lang = "en" >
< head >
< meta charset = "utf-8" >
< meta name = "viewport" content = "width=device-width, initial-scale=1" >
< title > Silent Mode — releases & checksums< / title >
< style >
:root{--bg:#0b0e14;--panel:#141a24;--line:rgba(255,255,255,.09);--ink:#e7eaf1;--mut:#8b98a9;--dim:#5e6678;--acid:#d6ff3d}
*{box-sizing:border-box}
body{margin:0;background:radial-gradient(1100px 560px at 50% -12%,#16202e,var(--bg));
color:var(--ink);font:16px/1.65 system-ui,-apple-system,Segoe UI,Roboto,sans-serif}
.wrap{max-width:820px;margin:0 auto;padding:3.5rem 1.2rem 4rem}
a{color:var(--acid)}
h1{font-size:1.8rem;margin:0 0 .3rem}
h1 .g{color:var(--acid)}
.lede{color:var(--mut);margin:.2rem 0 2rem}
.rel{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:20px 22px;margin-bottom:16px}
.rel h2{font-size:1.15rem;margin:0 0 .2rem}
.rel .meta{color:var(--dim);font-size:12.5px;margin-bottom:1rem}
.file{border-top:1px solid var(--line);padding-top:12px;margin-top:12px}
.file .n{font-size:14px;color:var(--ink)}
.file .n a{text-decoration:none}
.file code{display:block;font-family:ui-monospace,monospace;font-size:11.5px;color:#c9d4e3;
word-break:break-all;margin-top:4px}
.note{background:var(--panel);border:1px solid var(--line);border-left:3px solid var(--acid);
border-radius:10px;padding:14px 18px;color:var(--mut);font-size:13.5px;margin-top:1.6rem}
.note b{color:var(--ink)}
footer{color:var(--dim);font-size:12.5px;margin-top:2.5rem;text-align:center}
< / style >
< link rel = "stylesheet" href = "../shared.css" >
brand: Silent Mode + navigate.st kits (logo, wordmark, avatar, banner, favicon)
Two brand kits, one design language. Each site now has a /brand/ page + a
favicon; every page I own on silentmode.st links the SVG favicon (parallel
sessions can add the same line to Sirius/Hephaestus/Choose when they touch
those files).
Silent Mode kit (site/brand/, site/favicon.svg):
Mark — two interlocking chain links, one muted (#8b98a9) + one acid
(#d6ff3d). The umbrella family mark.
Logo, wordmark, avatar (400x400 social), banner (1500x500 social header).
Brand page shows every asset with SVG download, colour palette
(tokens matching shared.css), usage do's and don'ts.
navigate.st kit (navigate.st/brand/, navigate.st/favicon.svg):
Mark — compass rose (N acid, other points muted) inside a chain-link
ring. Ring keeps it in the Silent Mode family without cloning the
SilentMode mark; compass says what this specific site is (the
wayfinding front door).
Same asset set: logo, wordmark, avatar, banner. Standalone brand page
(no shared.css — navigate.st runs single-file).
nginx (VPS): added two locations to sites-enabled/navigate-st so /favicon.svg
and /brand/* resolve from /opt/silent-mode/navigate-brand/. Rollback point
at sites-enabled/navigate-st.bak.1788146513. silentmode.st serves both from
disk under /opt/silent-mode/site/ — no vhost change needed.
Verified live: all favicon + brand URLs return 200 on both hosts.
2026-08-31 05:22:45 +02:00
< link rel = "icon" type = "image/svg+xml" href = "/favicon.svg" >
2026-07-29 13:54:34 +02:00
< / head >
< body >
< nav class = "topnav" >
< a class = "brand" href = "../" > ⛓️ Silent < span class = "g" > Mode< / span > < / a >
2026-08-31 04:16:42 +02:00
< a href = "../tools/" > Theseus< / a >
2026-07-31 08:43:31 +02:00
< a href = "../prometheus/" > Prometheus< / a >
< a href = "../sirius/" > Sirius< / a >
2026-08-31 04:06:28 +02:00
< a href = "../hephaestus/" > Hephaestus< / a >
2026-07-31 08:43:31 +02:00
< a href = "../helios/" > Helios< / a >
< a href = "../hermes/" > Hermes< / a >
2026-07-29 13:54:34 +02:00
< / nav >
< div class = "wrap" >
< h1 > Silent < span class = "g" > Mode< / span > — releases< / h1 >
< p class = "lede" > Canonical SHA-256 checksums for every published build. This page lives at the on-chain
name < code > releases.silentmode.bch< / code > ; the name pins where it is served from, so a tampered
mirror cannot change what you check against here.< / p >
< div class = "rel" >
Ship Theseus 0.3.1 fe59105d (one-click updates: silent prefetch + install-and-restart)
Setup fe59105d2e99a41b7000caeb86601a8e1675846d193e92204034669f5b368d60
Portable 1b6eda55b53894cf9889548116c7b6100888fb160edc84cc1592bb79f9d95b53
The update flow no longer asks the user to click Download. When
checkForUpdate detects a newer version, autoDownloadUpdate() kicks off
session.defaultSession.downloadURL against the setup URL immediately.
will-download recognises the update URL and routes the file to a
fixed %TEMP% path (bypassing the visible downloads panel entirely),
streams updateDownloadReceived/Total into the chip via
emitUpdateAvailable, and flips updateDownloadState to "ready" when
the transfer finishes.
Chip states:
idle first render before the fetch starts — clickable to
trigger the manual download (kept as a fallback).
downloading "↓ 42% — 0.3.2" — no click, just progress.
ready "✓ Install 0.3.2 & restart" — one click.
failed fall back to the pre-0.3.1 explicit-download click.
install-update-now IPC: spawns the cached setup with /S (detached,
stdio ignored), then app.quit() 400ms later so the installer can
overwrite the running exe. Our nsis/installer.nsh detects an existing
Ariadne install via the HKLM registry and skips its Ariadne prompt on
upgrades, so the /S run is fully unattended.
The one-click flow eliminates two long-standing sources of confusion:
- "Download opens a different browser" — Theseus's default session
fetches the installer itself, not a URL handoff to shell.
- "Update requires multiple wizard clicks" — /S skips them.
Extensions aren't touched by this. The framework lives in
addons-host.js + sidebar-preload.js; add-ons themselves live in
%APPDATA%\Theseus Navigator\addons\<id>\ and are a separate layer.
New extensions ship by drop-a-folder, no browser release required.
Deployed: scp + sia-upload, verified 200 + 0.3.1 in the manifest.
2026-08-31 18:47:50 +02:00
< h2 > Theseus Navigator < span style = "color:var(--acid)" > 0.3.1< / span > < / h2 >
Ship Theseus 0.2.0 c5202ddb (add-on framework + branded error pages)
Setup c5202ddba5a4bf4cd8d71c665c72bdd996ced761f9a7aae295cb960e17988f47
Portable 9142764f78e41c6a6220960d5f7278e0abe6c1c91e5033871d95225355d8feda
0.1.x -> 0.2.x — two new subsystems land together. 0.1.3 (which had
only the error pages) is retired; those hashes never went live, so
we jump 0.1.2 -> 0.2.0 for clean version->hash 1:1.
Add-on framework:
- Discovery scans <userData>/addons/<id>/; each add-on carries an
addon.json manifest and an activate(api) CommonJS entry. Nothing
about a private add-on ships in the public build - drop the
folder, restart, it's live.
- Bundled 'Notepad' reference add-on ships in resources/bundled-addons/
and is seeded into the user's addons dir on first boot. Right-
sidebar textarea, autosave, char/word counter.
- Extension point in this rev: sidebar-panel (WebContentsView on the
right, SIDEBAR_W=340). Toolbar toggle appears only when at least
one add-on registers a panel.
- Settings gains an Add-ons tab: list installed, per-add-on enable/
disable toggle (settings.disabledAddons persists), Show folder /
Open add-ons folder / Reload buttons, trust-model warning.
- Origin-gated per-addon storage: main derives the add-on id from the
sender file:// URL, so a panel can only touch its own kv store
under <userData>/addons-data/<id>.json.
Branded error page:
- did-fail-load on every tab -> error.html with kind = name-not-
registered (BCNR host + ERR_NAME_NOT_RESOLVED) | name-unreachable
(non-BCNR host + NAME_NOT_RESOLVED) | unreachable (conn refused/
reset/timeout) | tls (cert range) | generic.
- Actions per kind: Retry + Home always; Search for '<host>' and
Register-on-Sirius where a host is present; Tor guide link on
unreachable.
- Address bar keeps the failed URL (refreshTabUrl already skips
file://) so the user can edit and retry.
- Ignorable codes (-3 ABORTED, -20 BLOCKED_BY_CLIENT, subframe
errors, internalNav) skipped so normal user actions don't paint
an error page.
Deployed:
- scp installers + manifest + tools/ + releases/ pages to VPS
- sia-upload of ../site (silentmode.bch) and ../site-theseus-x
- verified HEAD 200, manifest reads 0.2.0 2026-08-31
Existing 0.0.6/0.1.2 installs will surface 0.2.0 in the update chip
on next launch.
2026-08-31 14:06:18 +02:00
< div class = "meta" > Windows 64-bit · unsigned · 2026-08-31 · < b > Add-on framework + branded error pages< / b > — Settings > Add-ons lists modules under < userData> /addons/; drop a folder in, restart, it's live. Notepad reference add-on ships in the box. Load failures now show a name-not-registered / unreachable / TLS / generic error page with Retry + Search + Register-on-Sirius actions; the address bar keeps the failed URL. Carries the Ariadne bundle and Startpage POST fix from 0.1.2.< / div >
2026-07-29 13:54:34 +02:00
< div class = "file" >
Ship Theseus 0.3.1 fe59105d (one-click updates: silent prefetch + install-and-restart)
Setup fe59105d2e99a41b7000caeb86601a8e1675846d193e92204034669f5b368d60
Portable 1b6eda55b53894cf9889548116c7b6100888fb160edc84cc1592bb79f9d95b53
The update flow no longer asks the user to click Download. When
checkForUpdate detects a newer version, autoDownloadUpdate() kicks off
session.defaultSession.downloadURL against the setup URL immediately.
will-download recognises the update URL and routes the file to a
fixed %TEMP% path (bypassing the visible downloads panel entirely),
streams updateDownloadReceived/Total into the chip via
emitUpdateAvailable, and flips updateDownloadState to "ready" when
the transfer finishes.
Chip states:
idle first render before the fetch starts — clickable to
trigger the manual download (kept as a fallback).
downloading "↓ 42% — 0.3.2" — no click, just progress.
ready "✓ Install 0.3.2 & restart" — one click.
failed fall back to the pre-0.3.1 explicit-download click.
install-update-now IPC: spawns the cached setup with /S (detached,
stdio ignored), then app.quit() 400ms later so the installer can
overwrite the running exe. Our nsis/installer.nsh detects an existing
Ariadne install via the HKLM registry and skips its Ariadne prompt on
upgrades, so the /S run is fully unattended.
The one-click flow eliminates two long-standing sources of confusion:
- "Download opens a different browser" — Theseus's default session
fetches the installer itself, not a URL handoff to shell.
- "Update requires multiple wizard clicks" — /S skips them.
Extensions aren't touched by this. The framework lives in
addons-host.js + sidebar-preload.js; add-ons themselves live in
%APPDATA%\Theseus Navigator\addons\<id>\ and are a separate layer.
New extensions ship by drop-a-folder, no browser release required.
Deployed: scp + sia-upload, verified 200 + 0.3.1 in the manifest.
2026-08-31 18:47:50 +02:00
< div class = "n" > < a href = "https://dl.silentmode.st/TheseusNavigator-Setup-0.3.1.exe" > TheseusNavigator-Setup-0.3.1.exe< / a > — installer< / div >
< code > fe59105d2e99a41b7000caeb86601a8e1675846d193e92204034669f5b368d60< / code >
2026-07-29 13:54:34 +02:00
< / div >
< div class = "file" >
Ship Theseus 0.3.1 fe59105d (one-click updates: silent prefetch + install-and-restart)
Setup fe59105d2e99a41b7000caeb86601a8e1675846d193e92204034669f5b368d60
Portable 1b6eda55b53894cf9889548116c7b6100888fb160edc84cc1592bb79f9d95b53
The update flow no longer asks the user to click Download. When
checkForUpdate detects a newer version, autoDownloadUpdate() kicks off
session.defaultSession.downloadURL against the setup URL immediately.
will-download recognises the update URL and routes the file to a
fixed %TEMP% path (bypassing the visible downloads panel entirely),
streams updateDownloadReceived/Total into the chip via
emitUpdateAvailable, and flips updateDownloadState to "ready" when
the transfer finishes.
Chip states:
idle first render before the fetch starts — clickable to
trigger the manual download (kept as a fallback).
downloading "↓ 42% — 0.3.2" — no click, just progress.
ready "✓ Install 0.3.2 & restart" — one click.
failed fall back to the pre-0.3.1 explicit-download click.
install-update-now IPC: spawns the cached setup with /S (detached,
stdio ignored), then app.quit() 400ms later so the installer can
overwrite the running exe. Our nsis/installer.nsh detects an existing
Ariadne install via the HKLM registry and skips its Ariadne prompt on
upgrades, so the /S run is fully unattended.
The one-click flow eliminates two long-standing sources of confusion:
- "Download opens a different browser" — Theseus's default session
fetches the installer itself, not a URL handoff to shell.
- "Update requires multiple wizard clicks" — /S skips them.
Extensions aren't touched by this. The framework lives in
addons-host.js + sidebar-preload.js; add-ons themselves live in
%APPDATA%\Theseus Navigator\addons\<id>\ and are a separate layer.
New extensions ship by drop-a-folder, no browser release required.
Deployed: scp + sia-upload, verified 200 + 0.3.1 in the manifest.
2026-08-31 18:47:50 +02:00
< div class = "n" > < a href = "https://dl.silentmode.st/TheseusNavigator-0.3.1-portable.exe" > TheseusNavigator-0.3.1-portable.exe< / a > — portable< / div >
< code > 1b6eda55b53894cf9889548116c7b6100888fb160edc84cc1592bb79f9d95b53< / code >
2026-07-29 13:54:34 +02:00
< / div >
< / div >
< div class = "rel" >
< h2 > Ariadne Resolver — Windows < span style = "color:var(--acid)" > 0.1.0< / span > < / h2 >
< div class = "meta" > Windows 64-bit · unsigned · bundled Node runtime · 2026-07-28< / div >
< div class = "file" >
< div class = "n" > < a href = "https://dl.silentmode.st/AriadneResolver-Setup-0.1.0.exe" > AriadneResolver-Setup-0.1.0.exe< / a > — ~24 MB< / div >
Ariadne 9ab725be: default installer to -Mode nrpt (surgical)
Change the Inno [Run] entry from
install.ps1 -Mode full -> install.ps1 -Mode nrpt
Rationale (observed today on the operator's machine): Full mode repoints
adapter DNS at 127.0.0.1, so every DNS query goes through the daemon's
forwarder. bnsd.js's raw-dgram forwarder has a known EDNS/AAAA bug --
strict clients using getaddrinfo (Chrome, Yandex, Firefox, Node) reject
some forwarded replies with "non-recoverable error". Concretely today,
github.com / duckduckgo.com / www.coinex.com all failed in Yandex while
silentmode.bch loaded fine.
Surgical (NRPT) mode routes only activated BCNR TLDs to the daemon
(fetched from tlds.bch at install time -- currently bch, p2p, deviant,
nav, sia, dgb, nt, sm, lm). Everything else stays on the adapter's DHCP
DNS, sidestepping the forwarder bug entirely. Users still get the
"resolves any BCNR TLD in every browser" promise for the entire on-chain
activated set.
Full mode remains available for anyone who explicitly opts in by running
install.ps1 -Mode full themselves. Default flips back once the forwarder
bug is repaired (memory: silentmode-build-state.md).
- SHA-256: 9ab725bec5567625e5857a49b112c4fbc0f59dbdd623abd7110429306f5d0ddb
- Deployed to dl.silentmode.st, site pages + manifest updated, Sia
mirror re-uploaded. Coordinates with a parallel-session build that
briefly landed cb9e8ea0 in the site references without a matching
binary; resolved to my build since only its bytes exist locally.
2026-08-14 23:33:29 +02:00
< code > 9ab725bec5567625e5857a49b112c4fbc0f59dbdd623abd7110429306f5d0ddb< / code >
2026-07-29 13:54:34 +02:00
< / div >
< / div >
< div class = "rel" >
2026-08-31 01:05:20 +02:00
< h2 > Ariadne for Android < span style = "color:var(--acid)" > 0.11< / span > < / h2 >
< div class = "meta" > Android 5.0+ (API 21) · self-signed release key · 2026-08-30 · adds Sia CDN pull to the APK-bundled starter — post-install cold starts now catch up from the operator's latest published snapshot in one HTTP call< / div >
2026-07-29 13:54:34 +02:00
< div class = "file" >
2026-08-31 01:05:20 +02:00
< div class = "n" > < a href = "https://dl.silentmode.st/ariadne-v0.11.apk" > ariadne-v0.11.apk< / a > — 124 KB< / div >
< code > 03c95832c16cc4763acaadbf328caa7d4bd05fc7c2994f6997a79cc6890bca44< / code >
2026-07-29 13:54:34 +02:00
< / div >
< div class = "file" >
< div class = "n" > Signing certificate — SHA-256 (the same key signs every future release)< / div >
< code > 46ebbbe5dc73148d66410fd0337b1e6683472128c983e8e2578200b9e3ca548c< / code >
< / div >
< / div >
< div class = "note" > < b > How to verify.< / b > After downloading, compute the file's SHA-256 and compare it to
the value above — on Windows: < code style = "display:inline" > certutil -hashfile < file> SHA256< / code > ;
on Android, hash the downloaded < code style = "display:inline" > .apk< / code > on a computer before you move
it to the phone, or use any file-hashing app. Nothing here is signed by an authority your device
already trusts — < b > by design< / b > — so it will warn about an unrecognized app; the checksum is the
real check. The machine-readable manifest is at
< a href = "https://dl.silentmode.st/releases-manifest.json" > releases-manifest.json< / a > .< / div >
< footer > Silent Mode — a Deviant project. Alpha software on a test network.< / footer >
< / div >
< / body >
< / html >