Skip to content

ADR index

Fairwave records significant architectural decisions as ADRs (Michael Nygard format, kept short). An ADR is immutable once accepted; superseding decisions get a new ADR that links back.

# Title Status Date
0001 Mobile core: Open5GS instead of Magma Accepted 2026-08-02
0002 Ship 4G EPC first; gate 5G SA/NSA Accepted 2026-08-02
0003 Control plane language: Go (not Rust) Accepted 2026-08-02
0004 Peering data plane: WireGuard Accepted 2026-08-02
0005 Breakout: edge NAT local-first, hub optional Accepted 2026-08-02
0006 SIM credential storage: HSM-ready AES-GCM at rest Accepted 2026-08-02
0007 Operator auth: WebAuthn + TOTP + bootstrap token TTL Accepted 2026-08-02
0008 TX gating: compile-time flag + runtime ack + allow-list Accepted 2026-08-02
0009 RF backend: srsRAN Project 4G-first, OAI as alt Accepted 2026-08-02
0010 UE identifier minimization: hash-at-rest, no IMSI in logs Accepted 2026-08-02
0011 Onboarding: captive portal anchor, not an ePDG Accepted 2026-08-02
0012 Config: three-file YAML + env; jsonschema validation Accepted 2026-08-02
0013 Lab eSIM (SM-DP+) stack: SGP.22-shaped RSP, JSON transport, lab-only Accepted 2026-08-04

Conventions

Each ADR has Context → Decision → Consequences → Alternatives considered. Rejected-but-plausible options stay written down so the next contributor doesn't re-litigate them.