Unofficial mirror · offline-first mesh
App stores can be blocked. Phones talking over Bluetooth are much harder to silence. This mirror keeps bitchat’s Android APKs reachable when upstream is throttled, taken down, or censored.
Loading releases
Fetching the mirror index…
Upstream APKs are mirrored to Cloudflare R2 on a schedule. This site is static HTML on Vercel — the UI loads here; APKs download from R2.
flowchart TB GH["Upstream
bitchat-android
GitHub Releases"] subgraph job["① Mirror job"] direction LR GA["GitHub Actions
weekly"] SYNC["Python sync/
policy · SHA-256 · budget"] GA --> SYNC end subgraph store["② Object storage"] R2[("Cloudflare R2
apk/ · checksums/ · index/")] end subgraph web["③ Static site"] direction LR IDX["releases.json"] VER["Vercel · public/
Download · Archive · Why"] IDX --- VER end BR["Browser"] GH -->|"list releases + tags"| SYNC SYNC -->|"stream APKs one at a time"| R2 SYNC -->|"commit when changed"| IDX IDX -.->|"triggers redeploy"| VER BR -->|"browse UI"| VER BR -->|"download APKs"| R2 classDef src fill:#fff7ed,stroke:#c2410c,color:#7c2d12,stroke-width:2px classDef work fill:#ecfdf5,stroke:#0f766e,color:#134e4a,stroke-width:2px classDef blob fill:#eff6ff,stroke:#1d4ed8,color:#1e3a8a,stroke-width:2px classDef ui fill:#fafaf9,stroke:#57534e,color:#1c1917,stroke-width:2px classDef human fill:#fdf2f8,stroke:#be185d,color:#9d174d,stroke-width:2px class GH src class GA,SYNC work class R2 blob class IDX,VER ui class BR human