Skip to content
View CruxCoach's full-sized avatar

Block or report CruxCoach

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
CruxCoach/README.md

CruxCoach

Open-source Kilter Board climbing app for Android.

Browse climbs, control your Kilter Board via Bluetooth, log ascents, import your Kilter logbook, and track your progress β€” no third-party cloud services, full control over your data.

πŸ“² Get the app

Install via Zapstore Β  Download latest APK from Codeberg Β  Build from source

Zapstore auto-updates, Nostr-native, verifiable builds Β· APK release ships with a .apk.sha256 sidecar Β· Source build reproducible from main

Board BrowserΒ Β  Climb DetailΒ Β  Hold SearchΒ Β  Heatmap

First-time sideload from Codeberg? Android Settings β†’ Apps β†’ Special app access β†’ Install unknown apps β†’ enable for your browser or file manager. The signing certificate is stable across releases, so future updates install on top without re-enabling.


What makes it different

Custom LED Colors β€” Choose your own hold colors on the Kilter Board. Different colors for start, hand, foot, and top holds. Visible to everyone around you.

Nearby Sharing β€” Share your current climb with nearby CruxCoach users over Bluetooth. No internet needed, works instantly at the Kilter Board.

Your Data, Your Device β€” All personal data encrypted locally. Decentralized identity via Nostr β€” no email, no password, no central server. No cloud accounts, no telemetry, no ads.


All Features

  • 85,000+ climbs with filters for grade, angle, quality, moves, and setter
  • BLE board control β€” light up holds on your Kilter Board
  • Climb lists β€” favorites, projects, custom lists
  • Log ascents with grade opinions, attempts, and notes
  • Hold Search β€” tap holds on the Kilter Board to find climbs that use them
  • Heatmap β€” visualize hold popularity by type, sends, or all climbs
  • Kilter logbook import from your Kilter account
  • Statistics β€” grade progression, difficulty trends, favorite angles
  • Data export/import as JSON backup
  • Encrypted cloud backup (0.1.3+, opt-in) β€” your climbing data encrypted on-device, mirrored across the open Nostr network and Blossom storage servers. The maintainer cannot decrypt it; only your CruxCoach Account key can. Survives app uninstall + device transfer.
  • App-share QR code β€” share CruxCoach with nearby climbers by QR
  • Reliable notifications β€” guided setup for Android battery and autostart restrictions so dev-DMs and sync updates always arrive
  • In-app auto-updater β€” verifiable APK updates with TOFU certificate pinning (auto-disabled on Zapstore installs)
  • In-app developer contact via encrypted Nostr DMs

Download

Channel When to pick it Trade-off
Zapstore You already use Zapstore, want hands-off auto-updates and Nostr-native verifiable builds Requires the Zapstore client app installed
Codeberg release APK You want a direct sideload, no app-store dependency, full SHA-256 transparency Manual install + updates (or opt into the in-app updater under Settings β†’ Updates)
Source build You want to read / patch the code first Requires Android SDK + NDK and a few minutes

Verifying the APK

Each Codeberg release ships an *.apk.sha256 sidecar next to the APK asset. After downloading both into the same folder:

sha256sum -c CruxCoach-v*.apk.sha256

Expected output: CruxCoach-v0.1.x.apk: OK. The signing certificate is the same across every release β€” Android refuses installs from a different cert, which is your second integrity check on top of the SHA-256.

Updating

  • Zapstore: handled by the Zapstore client.
  • Codeberg APK + in-app updater: open Settings β†’ Updates β†’ Check for updates. The updater pulls the next release's APK + SHA-256 from Codeberg and installs over the current build (signature must match β€” same certificate as the original install).
  • Source build: git pull && ./gradlew :androidApp:assembleRelease.

Building from Source

git clone https://codeberg.org/CruxCoach/CruxCoach.git
cd CruxCoach
bash scripts/setup_dev_env.sh   # installs JDK 17, Android SDK, NDK, CMake (Debian/Ubuntu)
source ~/.bashrc                # or ~/.zshrc
./gradlew :androidApp:assembleDebug

The APK is at androidApp/build/outputs/apk/debug/androidApp-debug.apk.

For signing, testing, and full setup details see CONTRIBUTING.md.


Architecture

Layer Technology
Language Kotlin (shared + Android)
UI Jetpack Compose + Material 3
Database SQLDelight (board data) + SQLCipher (personal data)
DI Hilt
Async kotlinx-coroutines
Serialization kotlinx-serialization
Navigation Jetpack Navigation Compose
BLE Android BLE API (Nordic UART Service)
Nostr Quartz (Vitor Pamplona)
Background WorkManager

Domain logic lives in a shared Kotlin Multiplatform module (~60–70% of code). See CONTRIBUTING.md for the full project structure.


Board Compatibility

Currently supported: Kilter Board (all sizes and angles).

Primarily tested on the 12x12 Original layout. Other sizes should work but are less tested β€” feedback welcome!

See LEGAL.md for our position on interoperability and data usage.


Data & Privacy

Board database β€” community-created content distributed via Nostr Blossom. Content-addressed and verifiable by any client. See LEGAL.md.

Personal data β€” stored locally in an encrypted SQLCipher database. Encryption keys live in the Android Keystore and never leave the device.

Optional cloud backup (off by default) β€” when you turn it on, your data is encrypted on the device with a key derived from your Nostr identity, then mirrored across the open Nostr network and Blossom storage servers. No single provider holds a usable copy. Saving your CruxCoach Account key once is what makes the backup recoverable on any other device β€” see SECURITY.md for the full threat model.

Your identity β€” a Nostr key pair. No central server can lock you out. The same key pair that is your CruxCoach Account encrypts your cloud backup, so saving it once protects both.


Contributing

We welcome contributions! See CONTRIBUTING.md for bug reporting, dev setup, coding standards, and PR guidelines.

For the active feature roadmap and per-release specifications, see docs/specs/.

Security

Found a vulnerability? See SECURITY.md for responsible disclosure.

Legal

CruxCoach is not affiliated with Kilter, LLC or Aurora Climbing. See LEGAL.md.


Support


License & Trademark

Popular repositories Loading

  1. CruxCoach CruxCoach Public

    Open-source Kilter Board climbing app for Android. Browse climbs, control your Kilter Board via Bluetooth, log ascents, import your Kilter logbook, and track your progress β€” no third-party cloud se…

    Kotlin 1