⚒️

The forge on Bitcoin Cash.

Hephaestus is the code host for the BCH ecosystem — Cauldron contributors, Sirius developers, wallet authors, indexer maintainers. Sign in with a wallet, push a repo, host a release. No email, no password reset, no middleman.

How it works

Three moving parts, no magic. Forgejo does the git and issue tracking, an auth-proxy translates Bitcoin Cash message signatures into OpenID Connect tokens Forgejo understands, and Caddy fronts the whole thing behind the two hostnames — hephaestus.x for BCNR-aware browsers, code.silentmode.st as a public DNS mirror.

🔑 Wallet is the account

Generate or import a BCH wallet in the browser. Sign one BIP-137 "Bitcoin Signed Message" challenge, and Forgejo auto-provisions bch_<first-20-of-your-cashaddr>. Rename it later — even to a plain name like BitcoinCash. The private key never leaves your device.

💾 Cold blobs on Sia

Live git repos + Postgres stay on the VPS SSD for speed. LFS objects, release archives, container images, package registry blobs and issue attachments spill to the Sia network via s3.silentmode.st:8600. Encrypted client-side, sharded across independent hosts.

🌐 Two hostnames, one instance

hephaestus.x is the primary — an on-chain BCNR certificate, chipnet, owner-controlled, TLS via the Silent Mode CA. code.silentmode.st is the public-DNS mirror for browsers without a BCNR resolver. Same Forgejo, same accounts, same repos.

🧭 Standard git, nothing weird

git clone, git push, PRs, issues, releases, container/npm registries, the Forgejo API. Bring your existing muscle memory — the only unusual bit is that you signed in with a wallet instead of an email.

Sign in in three steps

Nothing to install, nothing to remember except your recovery phrase.

  1. Pick your route. Sign up (create a new wallet in the browser), Sign in (import a 12/24-word phrase you already have), or WizardConnect (sign with an external wallet — Cashonize, Paytaca — over an encrypted relay).
  2. Set a browser passphrase. Used to encrypt the wallet in your browser's localStorage. Minimum 8 characters. Never leaves your device.
  3. Sign the challenge. Your browser signs a one-time message, the auth-proxy verifies the signature against your Bitcoin Cash address, and Forgejo hands you a session cookie. You land in the dashboard.

See the source. Verify the deploy.

The whole forge — the Docker Compose stack, the Caddyfile, the auth-proxy that verifies wallet signatures, the Forgejo Dockerfile with our CA baked in, every helper script — is on Hephaestus itself. Clone it, read it, run it.

📖 silentmode/hephaestus

The full stack. docker-compose.yml, caddy/Caddyfile, auth-proxy/ (Fastify OIDC provider), forgejo/Dockerfile, scripts/, PROTOCOL.md.

🔐 auth-proxy

The wallet-to-OIDC bridge. ~250 lines of TypeScript that produces an Ed25519-signed id_token after verifying a BIP-137 signature against a claimed CashAddr. The whole crypto path is in src/verify.ts.

📜 PROTOCOL.md

Wallet-auth flow, message format, replay-protection, prefix handling (bitcoincash / bchtest / bchreg). The document a third-party wallet needs to add native support.

Run your own

Nothing here needs Hephaestus.X's operator — the same compose stack runs on any Linux box with Docker. Bring your own domain, a TLS cert, and a Sia bucket (the sia.storage free tier is enough for a small forge). Then docker compose up.

# 1. clone
git clone https://code.silentmode.st/silentmode/hephaestus.git
cd hephaestus

# 2. configure — copy .env.example, fill in your domain, Sia S3 creds, and OIDC secret
cp .env.example .env
$EDITOR .env

# 3. run — Caddy + Postgres + Forgejo + auth-proxy come up together
docker compose up -d

# 4. first wallet signs in and takes the admin seat
open https://your-domain.example/user/oauth2/hephaestus-wallet
Open source, MIT. Every commit is signed, every dependency is pinned. If you find something you want to fix or improve, open a PR — or just fork it and run your own instance. That is the point.

The Silent Mode pantheon

Hephaestus is one of seven sibling .x names. Each project is its own on-chain certificate, each site is reachable through any BCNR resolver, plus the silentmode.st gateway for browsers without one.

⛓️ Silentmode.X

The project umbrella. Redirects to silentmode.st where every pillar has its own landing.

⭐ Sirius.X

Names on Bitcoin Cash — register, resolve, verify, manage TLDs and names.

🧭 Theseus.X

The browser that speaks BCNR natively — Chromium build with the resolver baked in, no OS-level daemon.

⚒️ Hephaestus.X you're here

The forge. Forgejo instance for the ecosystem's git repos, backed by BCH wallet auth. This site.

🔮 Prometheus.X

Fire from the chain. Foresight and experimentation layer. Redirects to silentmode.st/prometheus/.

☀️ Helios.X

Public gaze — analytics, dashboards, transparency. Redirects to silentmode.st/helios/.

✉️ Hermes.X

Messenger. Nostr-based messaging bound to a BCNR name via the np + nr records.

Verify this page against the chain

You do not have to trust that hephaestus.x is served by anyone specific. The name's certificate is on the Bitcoin Cash chain; the records point to a specific IP and a specific Sia bucket; every path is independently checkable.

1. Reach this site via more than one route

The same content should be served from at least two independent paths. If one mirror disappears, the others still work. If two disagree, the on-chain record is the tiebreaker.

2. Where it lives

forge
hephaestus.x (primary) · code.silentmode.st (public-DNS mirror) — same Forgejo 10 instance, dual-hostname
this name
hephaestus.x — on-chain BCNR certificate, chipnet, owner-controlled, TLS via the Silent Mode CA
storage
Sia network via s3.silentmode.st:8600, client-side encrypted · static landing mirrored to a Sia bucket as DR backup
source
silentmode/hephaestus — docker-compose, auth-proxy, Caddyfile, the whole stack
protocol
BIP-137 "Bitcoin Signed Message" over BCH secp256k1 — any wallet that speaks Sign Message can log in