9.2 KiB
9.2 KiB
External Integrations
Analysis Date: 2026-07-29
APIs & External Services
Bitcoin Protocol:
- Bitcoin Core RPC endpoint - Primary blockchain interaction
- SDK/Client:
bitcoincrate (v0.32.5),reqwestHTTP client - Endpoint:
http://127.0.0.1:8332/(configurable) - Used for: Transaction broadcasting, UTXO validation, network sync status
- Auth: Basic HTTP auth (hardcoded RPC credentials in containers)
- SDK/Client:
Lightning Network:
- Lightning Network Daemon (LND) - Layer 2 payments
- SDK/Client: Native REST API (
reqwest+serde_json) - REST Endpoint:
http://localhost:8080/(container network) - gRPC Endpoint:
http://localhost:10009/(not currently used by backend) - P2P Port: 9735
- Used for: Channel management, payment invoicing, routing
- Auth: Macaroon-based authentication (stored in
lnd-data:/root/.lnd) - Proxied:
/proxy/lnd/→ backend RPC auth + CORS handling
- SDK/Client: Native REST API (
Nostr Protocol:
- Nostr Relays - Node discovery and encrypted messaging
- SDK/Client:
nostr-sdkcrate (v0.44, with NIP-04 and NIP-44 support) - Usage: Optional, opt-in via
NOSTR_DISCOVERY_ENABLEDconfig - Relays: Configurable via comma-separated
NOSTR_RELAYSenv var - Transport: SOCKS5 Tor proxy optional via
NOSTR_TOR_PROXYconfig - Features: Ed25519 node identity publishing, encrypted peer handshake
- Related files:
core/archipelago/src/nostr_relays.rs,nostr_discovery.rs,nostr_handshake.rs
- SDK/Client:
Mesh Networking:
- Reticulum Protocol (RNS v1.3.5) - Local mesh radio coordination
- Daemon:
reticulum-daemon/(Python daemon, RNS 1.3.5 + LXMF 1.0.1) - Interface: Supervised as managed container
- LoRa Radio: Serial2 communication over USB (Meshtastic-compatible radios)
- P2P Discovery: mDNS (multicast DNS via
mdns-sdcrate) - Mesh Ports: IPv6 dual-stack listeners (port mirroring to containers)
- Related files:
core/archipelago/src/mesh/,core/archipelago/src/mesh_ports.rs
- Daemon:
Tor (Optional):
- Tor SOCKS5 Proxy - Anonymous network routing
- Endpoint:
socks5h://127.0.0.1:9050(default, configurable) - Used for: Nostr relay connections (when routed through Tor)
- Client:
reqwestwith SOCKS feature enabled - Config key:
nostr_tor_proxy
- Endpoint:
Fedimint:
- Federated Custody Chaumian Mint - Alternative payment layer
- SDK/Client: JSON-RPC API (
reqwest+serde_json) - Endpoint:
http://localhost:8174/(container network) - P2P Port: 8173
- UI Port: 8175 (guardian management)
- Used for: Custody alternatives, blind signatures
- Related files:
core/archipelago/src/api/rpc/fedimint.rs
- SDK/Client: JSON-RPC API (
Decentralized Web Node (DWN):
- DWN Health Check - Decentralized identity messaging
- Endpoint:
http://127.0.0.1:3100/health - Purpose: Node provisioning verification
- Related files:
core/archipelago/src/constants.rs
- Endpoint:
Data Storage
Databases:
-
Application Databases (optional, app-managed):
- PostgreSQL: Immich, IndeedHub, Penpot, Endurain, Nextcloud
- MySQL/MariaDB: Mempool, Nextcloud
- Redis/Valkey: Immich, IndeedHub, Penpot (caching/sessions)
- SQLite: Optional local state (Cargo.toml comments out
sqlx)
Connection: Via container network (not directly accessible from backend)
-
Key-Value Stores:
- In-memory cache: Tokio sync primitives (Arc, Mutex)
- Persistent app state: User credentials, device tokens, manifest cache stored in
$DATA_DIR
File Storage:
- Local filesystem only
- User data directory:
$ARCHIPELAGO_DATA_DIR(default/var/lib/archipelago/) - Subdirectories:
apps/,secrets/,backups/,content/,catalog/ - App-specific:
/var/lib/archipelago/<app>/(mounted into containers) - Content sharing: Peer-to-peer via HTTP Range requests (see
content_server.rs)
- User data directory:
Caching:
- No external cache service
- In-app caching: Tokio-spawned tasks, Arc for concurrent access
- Browser caching: Workbox service worker (5-min API cache, 30-day asset cache, 1-year font cache)
Authentication & Identity
Auth Provider:
- Custom JWT-based (node-local)
- Implementation: Ed25519 signing (key in
credentials/directory) - Session tokens: Stored browser-side via cookies (CSRF token middleware)
- Related files:
core/archipelago/src/auth.rs,core/archipelago/src/identity_manager.rs
- Implementation: Ed25519 signing (key in
BIP-39 Mnemonic Seed:
- Seed generation:
bip39crate (v2.1.0) - HD key derivation:
bitcoincrate (v0.32.5) with BIP-32 - Signing: Ed25519 for identity, ECDSA for Bitcoin transactions
- Related files:
core/archipelago/src/seed.rs
Identity (Decentralized):
- Nostr npub (from Ed25519 keys)
- DID (Decentralized Identifier) via did:dht (BitTorrent DHT)
- Related files:
core/archipelago/src/identity.rs,core/archipelago/src/nostr_discovery.rs
2FA:
- TOTP (Time-based One-Time Password)
- Library:
totp-rs(v5.7, with otpauth and gen_secret) - QR generation:
qrcodecrate (v0.14) - Encrypted storage: Argon2-derived key + ChaCha20-Poly1305
- Related files:
core/archipelago/src/totp.rs
- Library:
Monitoring & Observability
Error Tracking:
- Not integrated (logging only)
Logs:
- Approach: Structured logging via
tracingcrate - Output: stdout (configurable level via
RUST_LOGor config file) - Subscriber:
tracing-subscriberwithenv-filter - Related files:
core/archipelago/src/monitoring.rs,core/archipelago/src/health_monitor.rs
Health Monitoring:
- Health checks: Container liveness probes (Docker/Podman healthcheck)
- System metrics: Disk space, memory, container startup tiers
- Related files:
core/archipelago/src/health_monitor.rs
CI/CD & Deployment
Hosting:
- Bare metal (Debian Linux) with Podman rootless containers
- Fleet nodes: .198, .228, .116, x250-dev, Framework PT (various test/dev targets)
CI Pipeline:
- Git-based CI: Gitea (self-hosted at
.160:3000and.168:3000) - Push accounts:
gitea-ai(for protected main branch) - Build pipeline: Local
cargo build/npm run build(not centralized CI/CD service) - Release: Manual versioning + signed OTA manifests
- Docker builds: Local
docker-composeor Dockerfile.web/backend
Deployment:
- Container orchestration: Podman with Quadlet systemd units (Phase 3+)
- Legacy fallback: Direct
podman create + systemctl start - OTA (Over-The-Air): Signed manifest-driven updates (v1.7+)
- Sideload: Binary + tarball to
/usr/local/bin/archipelagoand/opt/archipelago/
Environment Configuration
Required env vars:
ARCHIPELAGO_DATA_DIR- Local state directory (default: platform-specific)ARCHIPELAGO_LOG_LEVEL- Logging verbosity (default:info)CONTAINER_RUNTIME-podmanordocker(auto-detect by default)NOSTR_DISCOVERY_ENABLED- Enable node publishing to Nostr relays (false by default)NOSTR_RELAYS- Comma-separated relay URLs (if discovery enabled)NOSTR_TOR_PROXY- SOCKS5 proxy address (optional, routes Nostr through Tor)VITE_AIUI_URL- AIUI chat interface URL (frontend, optional)BACKEND_URL- Backend target for dev server (frontend, default:http://localhost:5959)
Secrets location:
- At-rest:
$DATA_DIR/credentials/(user.json with encrypted TOTP, session keys) - In-container: Mounted as read-only volumes, never logged
- No
.envfile in production (config-driven)
Webhooks & Callbacks
Incoming:
- Marketplace callbacks - App catalog updates from registry
- Peer discovery webhooks (via Nostr relays)
- Related files:
core/archipelago/src/webhooks.rs
Outgoing:
- Device token push notifications (not yet implemented)
- App install/uninstall event notifications (framework-pt integration)
- Related files:
core/archipelago/src/device_tokens.rs
Container-Based Services (Orchestrated by Archipelago)
Bitcoin Stack:
- Bitcoin Core (lncm/bitcoind:v27.0 or knots variant)
- ElectrumX (via separate image)
- Electrs (alternative to ElectrumX)
Lightning/Payments:
- LND (lightninglabs/lnd:v0.17.4-beta+)
- BTCPay Server (btcpayserver:1.13.5+)
- Fedimint (fedimint/fedimintd:v0.10.0+)
Media & Content:
- Immich (self-hosted photo/media library)
- Nextcloud (cloud storage)
- OnlyOffice (document server)
- Penpot (design tool)
- SearXNG (search engine)
- FileBrowser (file management UI)
Infrastructure:
- nginx (reverse proxy, CORS, rate limiting)
- Home Assistant (home automation hub)
- Grafana (metrics dashboard)
- ThunderHub (Lightning node UI)
- Mempool Explorer (blockchain monitor)
- Endurain (fitness tracking)
- Morphos (file converter)
- IndeedHub (job board)
- Pine (voice assistant)
Integration Points (API Contracts)
Backend ↔ Frontend (gRPC-style RPC):
- Endpoint:
/rpc/v1/*(HTTP/REST) - Related files:
core/archipelago/src/api/rpc/(all RPC handlers) - Major modules:
auth.rs,bitcoin.rs,lnd/,container.rs,marketplace.rs,mesh/
Frontend ↔ App Iframes:
- Endpoint:
/app/<app-name>/*(proxied to container) - Sandbox: Cross-origin iframe isolation
Mesh Node ↔ Reticulum:
- Serial: USB LoRa radio (Meshtastic-compatible)
- Protocol: Binary Meshcore format
- Related files:
core/archipelago/src/mesh/
Catalog ↔ App Registry:
- Endpoint:
/api/app-catalog(cached from registry) - Format: Signed YAML manifest + SHA256 verification
- Related files:
core/archipelago/src/marketplace.rs,app_catalog/
Integration audit: 2026-07-29