201 lines
9.6 KiB
HTML
201 lines
9.6 KiB
HTML
|
|
<!doctype html>
|
||
|
|
<html lang="en">
|
||
|
|
<head>
|
||
|
|
<meta charset="utf-8">
|
||
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||
|
|
<title>Apps & downloads — Silent Mode</title>
|
||
|
|
<meta name="description" content="Downloads for Silent Mode clients: Theseus Navigator (desktop browser), Ariadne Resolver (Windows), Ariadne for Android APK. Every artifact carries a SHA-256, verifiable against the on-chain release index.">
|
||
|
|
<link rel="stylesheet" href="../shared.css">
|
||
|
|
<style>
|
||
|
|
/* tabs — used only on this page for now */
|
||
|
|
.tabs{display:flex;gap:4px;margin:1.4rem 0 1.6rem;border-bottom:1px solid var(--line);flex-wrap:wrap}
|
||
|
|
.tab{background:none;border:none;padding:10px 22px;color:var(--mut);font:inherit;
|
||
|
|
cursor:pointer;border-bottom:2px solid transparent;font-size:14.5px;font-weight:500}
|
||
|
|
.tab:hover{color:var(--ink)}
|
||
|
|
.tab.here{color:var(--acid);border-bottom-color:var(--acid)}
|
||
|
|
.pane[hidden]{display:none}
|
||
|
|
|
||
|
|
/* download listing — shared with the release notes format on the old homepage */
|
||
|
|
.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-bottom:12px}
|
||
|
|
.dl > div:first-child{flex:1;min-width:240px}
|
||
|
|
.dl h3{margin:0 0 .3rem}
|
||
|
|
.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}
|
||
|
|
</style>
|
||
|
|
</head>
|
||
|
|
<body>
|
||
|
|
|
||
|
|
<nav class="topnav">
|
||
|
|
<a class="brand" href="../">⛓️ Silent <span class="g">Mode</span></a>
|
||
|
|
<a href="../nav/">Tools</a>
|
||
|
|
<a href="./" class="here">Apps</a>
|
||
|
|
<a href="../register.html">Names</a>
|
||
|
|
<a href="../store/">Store</a>
|
||
|
|
<a href="../hermes/">Messenger</a>
|
||
|
|
</nav>
|
||
|
|
|
||
|
|
<header class="hero">
|
||
|
|
<h1>Apps & <span class="g">downloads</span></h1>
|
||
|
|
<p class="tag">Every Silent Mode client, with its version, size, and SHA-256. Nothing
|
||
|
|
here is signed by an authority your device already trusts — by design. The
|
||
|
|
fingerprint is the real check.</p>
|
||
|
|
</header>
|
||
|
|
|
||
|
|
<div class="wrap">
|
||
|
|
|
||
|
|
<div class="tabs" role="tablist">
|
||
|
|
<button class="tab here" data-tab="desktop" role="tab">Desktop</button>
|
||
|
|
<button class="tab" data-tab="mobile" role="tab">Mobile</button>
|
||
|
|
</div>
|
||
|
|
|
||
|
|
<!-- ============ DESKTOP ============ -->
|
||
|
|
<div id="pane-desktop" class="pane">
|
||
|
|
|
||
|
|
<div class="dl" id="theseus">
|
||
|
|
<div>
|
||
|
|
<span class="pill p-alpha">alpha</span>
|
||
|
|
<h3>Theseus Navigator</h3>
|
||
|
|
<p>A desktop browser that speaks BNS names natively. Tabs, search, a home page,
|
||
|
|
one-click Tor, and a registry badge on every page showing whether the content
|
||
|
|
came from the chain, from Sia, or from a server. Changes nothing on your system.</p>
|
||
|
|
<div class="meta">Windows 64-bit · ~92 MB · v0.0.1 · unsigned build (no code-signing certificate)</div>
|
||
|
|
</div>
|
||
|
|
<div class="act">
|
||
|
|
<a class="btn" href="https://dl.silentmode.st/TheseusNavigator-Setup-0.0.1.exe">Installer</a>
|
||
|
|
<a class="btn ghost" href="https://dl.silentmode.st/TheseusNavigator-0.0.1-portable.exe">Portable .exe</a>
|
||
|
|
</div>
|
||
|
|
<div class="hashes">
|
||
|
|
<div style="color:var(--mut);font-size:12.5px">SHA-256 — verify your download before running:</div>
|
||
|
|
<div class="h"><b>Installer</b><code>7c735e88bad2da3347145adba3016c8f626a18b8422289c8c6ba471972e2952b</code></div>
|
||
|
|
<div class="h"><b>Portable</b><code>008fd84445babeabb401b2bca40ea9466b24b0e6d6c85104da7640c5c5c84521</code></div>
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
|
||
|
|
<div class="dl" id="resolver">
|
||
|
|
<div>
|
||
|
|
<span class="pill p-alpha">alpha</span>
|
||
|
|
<h3>Ariadne Resolver</h3>
|
||
|
|
<p>A small background service plus an installer. Teaches your <i>whole computer</i>
|
||
|
|
to open BNS names in <i>every</i> browser, with HTTPS working. Asks for
|
||
|
|
administrator rights because it changes how your machine resolves names —
|
||
|
|
everything reverses with the bundled uninstaller.</p>
|
||
|
|
<div class="meta">Windows 64-bit · v0.1.0 · 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>5bcb216eef31ea28ed767e4134ab74bd5ac69dfbd365fd249e9e6938e55c986a</code></div>
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
|
||
|
|
<div class="dl" id="extension">
|
||
|
|
<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 Firefox for Android.</p>
|
||
|
|
<div class="meta">Firefox · ~8 KB · packaging in progress</div>
|
||
|
|
</div>
|
||
|
|
<div class="act">
|
||
|
|
<span class="soon">Packaging in progress</span>
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
|
||
|
|
<div class="note"><b>Verifying a Windows download.</b> 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.</div>
|
||
|
|
|
||
|
|
</div>
|
||
|
|
|
||
|
|
<!-- ============ MOBILE ============ -->
|
||
|
|
<div id="pane-mobile" class="pane" hidden>
|
||
|
|
|
||
|
|
<div class="dl" id="android">
|
||
|
|
<div>
|
||
|
|
<span class="pill p-alpha">alpha</span>
|
||
|
|
<h3>Ariadne for Android</h3>
|
||
|
|
<p>A phone app that resolves BNS names on the device itself — it talks to Bitcoin
|
||
|
|
Cash nodes directly, with no relay and no account. Tabs, a start page built
|
||
|
|
from the names actually registered on chain, and a badge on every page showing
|
||
|
|
whether the name came from the chain or from ordinary DNS, with the block and
|
||
|
|
transaction behind it one tap away.</p>
|
||
|
|
<div class="meta">Android 5.0+ (API 21) · ~97 KB · v0.2 · self-signed release key</div>
|
||
|
|
</div>
|
||
|
|
<div class="act">
|
||
|
|
<a class="btn" href="https://dl.silentmode.st/ariadne-v0.2.apk">Download APK</a>
|
||
|
|
</div>
|
||
|
|
<div class="hashes">
|
||
|
|
<div style="color:var(--mut);font-size:12.5px">SHA-256 — verify before installing:</div>
|
||
|
|
<div class="h"><b>ariadne-v0.2.apk</b><code>635c8f04d44ef855a8390b9eeddb8cd2d50622e81cc4e5004e8daffc1bb0425c</code></div>
|
||
|
|
<div class="h"><b>Signing key</b><code>46ebbbe5dc73148d66410fd0337b1e6683472128c983e8e2578200b9e3ca548c</code></div>
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
|
||
|
|
<div class="note"><b>Installing on Android.</b> The app is not in the Play Store —
|
||
|
|
distributing there requires a legal identity and Google's permission, the two things
|
||
|
|
this project exists to do without. You will have to allow installation from your
|
||
|
|
browser or file manager once, and your phone may warn you about an app from an
|
||
|
|
unknown developer. <b>The signing key fingerprint above is what matters</b>: every
|
||
|
|
future update is signed with the same key, and 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.</div>
|
||
|
|
|
||
|
|
<div class="note warn"><b>iOS.</b> Not yet. Apple's rules make what Ariadne does on
|
||
|
|
Android (intercepting requests, running its own resolver) considerably harder to
|
||
|
|
ship inside the App Store, and outside it there is no way to install one. Under
|
||
|
|
investigation.</div>
|
||
|
|
|
||
|
|
</div>
|
||
|
|
|
||
|
|
<div class="note" style="margin-top:2rem">The machine-readable list of every published
|
||
|
|
artifact is at <a href="../releases-manifest.json"><code class="inline">releases-manifest.json</code></a>,
|
||
|
|
and the human-readable version with verify instructions is <a href="../releases/">here</a>.
|
||
|
|
The canonical fingerprints live on the chain, at
|
||
|
|
<code class="inline">releases.silentmode.bch</code>.</div>
|
||
|
|
|
||
|
|
</div>
|
||
|
|
|
||
|
|
<footer>
|
||
|
|
<div>Silent Mode — a Deviant project.</div>
|
||
|
|
<div class="fine">Alpha software on a test network. Names, sites and downloads shown
|
||
|
|
here are experimental and may change or disappear without notice. Nothing here is
|
||
|
|
a service, a product guarantee, or an investment. Verify everything against the chain.</div>
|
||
|
|
</footer>
|
||
|
|
|
||
|
|
<script>
|
||
|
|
// Tab switching + deep links: /apps/#theseus → Desktop tab; #android → Mobile tab.
|
||
|
|
const panes = {desktop:['theseus','resolver','extension'], mobile:['android']};
|
||
|
|
const idToTab = Object.fromEntries(Object.entries(panes).flatMap(([tab,ids])=>ids.map(id=>[id,tab])));
|
||
|
|
|
||
|
|
function activate(tab, scrollTo){
|
||
|
|
document.querySelectorAll('.tab').forEach(b=>b.classList.toggle('here', b.dataset.tab===tab));
|
||
|
|
document.querySelectorAll('.pane').forEach(p=>p.hidden = p.id !== 'pane-'+tab);
|
||
|
|
if (scrollTo) document.getElementById(scrollTo)?.scrollIntoView({behavior:'smooth',block:'start'});
|
||
|
|
}
|
||
|
|
|
||
|
|
document.querySelectorAll('.tab').forEach(b=>{
|
||
|
|
b.addEventListener('click', ()=>activate(b.dataset.tab));
|
||
|
|
});
|
||
|
|
|
||
|
|
const hash = location.hash.slice(1);
|
||
|
|
if (hash && idToTab[hash]) activate(idToTab[hash], hash);
|
||
|
|
</script>
|
||
|
|
|
||
|
|
</body>
|
||
|
|
</html>
|