Files
archy/apps
archipelagoandClaude Opus 5 f1b5d2d267 fix(cuprate): stop publishing the unauthenticated unrestricted RPC
The manifest bound cuprated's unrestricted RPC (full node control) to
0.0.0.0 inside the container with
i_know_what_im_doing_allow_public_unrestricted_rpc = true, relying on
ports[].bind: 127.0.0.1 to keep it private. That only restricts the HOST
side. Verified live on archi-dev-box 2026-08-22: a peer container got a
valid unauthenticated get_info off container port 18081 — and still did
after cuprate was moved to its own network, because podman bridges route
to each other unless created with --opt isolate=true, which the
orchestrator's auto-create does not pass. Every app on the node could
therefore drive full node control with no credential.

The PR justified this as the pattern bitcoin-knots already uses, but
knots writes rpcuser/rpcpassword from generated secrets, so a 0.0.0.0
bind there still is not control without credentials. cuprated has no RPC
authentication at all, so the two are not equivalent.

Unrestricted RPC is now left at cuprated's own default — container
loopback only, published nowhere, reachable by nothing — which is what
upstream intends by refusing a non-local bind without an explicit
override. Restricted RPC (the safe-for-public subset wallets use) and p2p
are unchanged, and health_check moves to 18089 since 18184 is gone.

Re-verified after the change: peer container gets connection refused on
18081 (exit 7), restricted RPC and the health endpoint still answer, the
node still syncs, validator APPROVED, 76/76 container tests pass
including the unauthenticated-port canary (still 28 — an auth: local
port was removed, not an auth: none one).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-22 03:10:53 -04:00
..

Archipelago App Manifests

Containerized applications for the Archipelago Bitcoin Node OS. All apps run in rootless Podman with security hardening (cap-drop ALL, readonly root, non-root user, memory limits).

App Categories

Bitcoin & Lightning

  • bitcoin-knots — Full Bitcoin node (v28.1)
  • lnd — Lightning Network Daemon (v0.17.4-beta)
  • btcpay-server — Payment processor (v1.13.5)
  • mempool — Block explorer and fee estimator (v2.5.0)
  • electrumx — Electrum server
  • fedimint — Federated Bitcoin minting (v0.10.0)

Nostr

  • nostr-rs-relay — High-performance Rust relay (v0.9.0)
  • nostrudel — Nostr web client (v0.40.0)

Web5 & Identity

  • did-wallet — Web5 DID Wallet

Self-Hosted Services

  • nextcloud (v28), jellyfin (v10.8.13), immich (release), photoprism (v240915)
  • vaultwarden (v1.30.0-alpine), penpot (v2.4)
  • homeassistant (v2024.1), filebrowser (v2.27.0), searxng (2024.11.17)
  • ollama (v0.5.4), grafana (v10.2.0), portainer (v2.19.4)

Networking

  • tailscale (stable), nginx-proxy-manager (v2.12.1)

Custom & External

  • indeedhub — Bitcoin documentary streaming (custom build)
  • router — Mesh routing and network management
  • botfights — External web app

Manifest Format

Each app has a manifest.yml defining container image, resources, dependencies, security policies, health checks, and network config. See docs/app-manifest-spec.md for the spec.

Quick Reference