site/releases/index.html
Local Dev 536b1fb41e Ariadne 0.1.10: multi-source snapshot warm-start so the daemon works on
WSS-blocked networks

Symptom on the other box (2026-09-29): task Running, port 53 bound by our
node, `Resolve-DnsName hello.bch -Server 127.0.0.1` times out. Cause: the
daemon's initial index build was a top-level `await buildIndex()` over
electrum WSS to chipnet (port 50004). Corporate/ISP networks that filter
outbound WSS let the await hang forever; the queries fell through to
`forward()` to upstream 1.1.1.1:53, which the same firewall also blocked,
so both legs died.

0.1.10 borrows Theseus's warmFromSnapshot pattern for the system-wide
daemon. On startup, in parallel with an 8 s deadline per source:

  1. HTTPS snapshot from operator VPS  https://dl.silentmode.st/bns-name-index.json
  2. HTTPS snapshot from Sia mirror     https://s3.silentmode.st:8600/bns/name-list.json
  3. On-disk cache from a previous run  C:\ProgramData\Ariadne\bns-name-snapshot.json

First non-empty result wins; on any HTTPS win the raw array is written to
the disk cache so the NEXT boot is instant even fully offline. dns.bind()
runs the moment warm-start completes, whether or not electrum was
reachable. Electrum WSS refresh continues in the background on the 30 s
timer and wins over the snapshot when it succeeds because it is strictly
newer.

Snapshot format is the pre-resolved array Android's Ariadne reader already
consumes (`[{name, category, records, txid, height, updatedTxid, owner?}]`),
so the operator maintains ONE artifact for both clients. Custom URLs go in
`ariadne.config.json`.snapshotUrls.

Verified on the dev box by running the built binary manually on port 15353:
  bnsd index: warm-started from https://dl.silentmode.st/bns-name-index.json (61 names)
  bnsd DNS: 127.0.0.1:15353 (policy=bcnr-first, upstream 1.1.1.1)
  hello.bch -> 127.0.0.1
Disk cache written: 17,674 bytes.

Deployed
- dl.silentmode.st/AriadneResolver-Setup-0.1.10.exe
- s3://bns/silentmode/dl/AriadneResolver-Setup-0.1.10.exe
- silentmode.st manifest advertises 0.1.10
- sha256 29710c4011dfe058a252f94af221c02593e728e89cc7427e3e01eaa530f8e526
2026-09-29 22:37:08 +02:00

109 lines
8.8 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta property="og:type" content="website">
<meta property="og:site_name" content="Silent Mode">
<meta property="og:title" content="Silent Mode — releases &amp;amp; checksums">
<meta property="og:url" content="https://silentmode.st/releases">
<meta property="og:image" content="https://silentmode.st/brand/og.png">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta name="twitter:card" content="summary_large_image">
<title>Silent Mode — releases &amp; 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?v=20260910">
<link rel="icon" type="image/svg+xml" href="favicon.svg">
</head>
<body>
<nav class="topnav">
<a class="brand" href="./"><svg class="logo" viewBox="0 0 32 20" aria-hidden="true"><rect class="l1" x="1.5" y="3.5" width="17" height="13" rx="6.5" ry="6.5" fill="none" stroke-width="2.6"/><rect class="l2" x="13.5" y="3.5" width="17" height="13" rx="6.5" ry="6.5" fill="none" stroke-width="2.6"/></svg>Silent <span class="g">Mode</span></a>
<a href="theseus">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>
<a href="tools">Tools</a>
</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">
<h2>Theseus Navigator <span style="color:var(--acid)">0.3.59</span></h2>
<div class="meta">Windows 64-bit · unsigned · 2026-09-28 · <b>0.3.59 — DNS over HTTPS, Global Privacy Control, Settings pages with addresses</b> — Privacy, regrouped: Settings › Privacy now opens with a status card and gathers tracking protection (Shield and Cookie Pop-ups with their per-site exceptions), device access, anti-fingerprinting, network and browsing data in one place. New there: DNS over HTTPS (on by default with Quad9; Cloudflare, Mullvad, AdGuard or your own resolver; an increased-protection mode that never falls back to plain DNS) and Global Privacy Control, which tells every site not to sell or share your data (the Sec-GPC header plus navigator.globalPrivacyControl). Every Settings page has an address you can copy and open, theseus://settings/privacy for example, with sub-pages for the longer lists. Search-engine icons ship inside Theseus and a custom engine's icon is cached once, so the toolbar, the picker and Settings look the same offline and opening the picker no longer asks a favicon service which engines you use; the default-engine control in Settings shows the icons too. A video's fullscreen now hides the toolbar and leaving it, switching tabs or closing the tab puts the window back (before, the window could stay fullscreen with no title-bar buttons); F11 toggles fullscreen. A name owner's subdomain rules (a blocked or redirected subdomain) now apply in Theseus for names it reaches directly by IP as well, not only through the gateway.</div>
<div class="file">
<div class="n"><a href="https://dl.silentmode.st/TheseusNavigator-Setup-0.3.59.exe">TheseusNavigator-Setup-0.3.59.exe</a> — installer</div>
<code>82506429906f7dca5db4e1cb37f26b806f0217e8db35426a0345c339a8b4ced5</code>
</div>
<div class="file">
<div class="n"><a href="https://dl.silentmode.st/TheseusNavigator-0.3.59-portable.exe">TheseusNavigator-0.3.59-portable.exe</a> — portable</div>
<code>3fd83638c205b2ec42176031b5c775cb519c8ca24bf8acda63bf514a781b6f69</code>
</div>
</div>
<div class="rel">
<h2>Ariadne Resolver — Windows <span style="color:var(--acid)">0.1.10</span></h2>
<div class="meta">Windows 64-bit · unsigned · bundled Node runtime · 2026-09-29 · <b>0.1.10 — snapshot warm-start (works on networks that block electrum WSS)</b> — Before 0.1.10 the daemon's initial index build ran over electrum WSS (port 50004); on corporate networks or restrictive ISPs that filter WSS, the await never returned, <code style="display:inline">dns.bind</code> never ran, and every browser on the machine hung — task showed Running, port 53 was bound, but every query timed out. 0.1.10 warm-starts the index from HTTPS snapshots in parallel — <code style="display:inline">dl.silentmode.st/bns-name-index.json</code> on the operator VPS + <code style="display:inline">s3.silentmode.st:8600/bns/name-list.json</code> on Sia, first-wins with an 8-second deadline — falls back to a local cache at <code style="display:inline">C:\ProgramData\Ariadne\bns-name-snapshot.json</code> from the last successful fetch, then lets electrum WSS keep the index current in the background (WSS updates win because they're strictly newer). Same snapshot format Android's Ariadne consumes. Configurable via <code style="display:inline">snapshotUrls</code> in <code style="display:inline">ariadne.config.json</code>. Includes 0.1.9 (local search shim). Upgrades in place.</div>
<div class="file">
<div class="n"><a href="https://dl.silentmode.st/AriadneResolver-Setup-0.1.10.exe">AriadneResolver-Setup-0.1.10.exe</a> — ~24 MB</div>
<code>29710c4011dfe058a252f94af221c02593e728e89cc7427e3e01eaa530f8e526</code>
</div>
</div>
<div class="rel">
<h2>Ariadne for Android <span style="color:var(--acid)">0.20</span></h2>
<div class="meta">Android 5.0+ (API 21) · self-signed release key · 2026-09-28 · <b>0.20 — every live TLD, fresh snapshot</b> — Every live BNS TLD is claimed by the on-device resolver. The app took its TLD list from the registry's legacy advertised set (nine TLDs), so a name under a newer TLD was only intercepted once it had turned up in the local index; the app now reads the registry's routable list (every TLD on the public listing, 24 today), and ships a bootstrap list matching it for cold start. The cold-start snapshot it pulls from the CDN is now refreshed every ten minutes from the gateway's index instead of by hand, so a fresh install sees names registered minutes ago rather than weeks. Same signing key; installs over 0.19.</div>
<div class="file">
<div class="n"><a href="https://dl.silentmode.st/ariadne-v0.20.apk">ariadne-v0.20.apk</a> — 150 KB</div>
<code>e7362e356de14f010646f3c60908ccd4bbd8030914f7e6a5dc2722d9dcf5e51e</code>
</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 &lt;file&gt; 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>