An offline app for learning ukulele — on Android and iOS
Chords, scales, music theory, composition tools, and more.
Built with Kotlin Multiplatform, Jetpack Compose, and SwiftUI.
Ukulele Companion is designed to be usable by everyone, including blind and visually impaired musicians:
ukulele-companion/
├── shared/ # Kotlin Multiplatform shared module
│ └── src/
│ ├── commonMain/ # 55 Kotlin files — domain + data logic
│ │ ├── domain/ # ChordDetector, PitchDetector, Transpose, etc.
│ │ └── data/ # Notes, Scales, ChordFormulas, Progressions, etc.
│ ├── androidMain/ # Android platform actuals (UUID, Calendar)
│ └── iosMain/ # iOS platform actuals (NSUUID, NSDate)
│
├── app/ # Android app module
│ └── src/main/java/com/baijum/ukufretboard/
│ ├── audio/ # SoundPool, metronome, audio capture
│ ├── data/ # Repositories (SharedPreferences), backup/restore
│ ├── domain/ # NeuralPitchSupervisor, AchievementChecker
│ ├── ui/ # 55 Compose screens and components
│ └── viewmodel/ # 13 ViewModels (StateFlow)
│
├── iosApp/ # iOS app (SwiftUI)
│ └── UkuleleCompanion/
│ ├── Views/ # 48 SwiftUI views
│ ├── ViewModels/ # 15 ObservableObject ViewModels
│ ├── Audio/ # AudioCaptureEngine, TonePlayer, NeuralPitchSupervisor
│ ├── Helpers/ # Accessibility helpers, backup/restore manager
│ └── Resources/ # WAV samples, ONNX model
git clone https://github.com/baijum/ukulele-companion.git cd ukulele-companion # Android ./gradlew assembleDebug # iOS (requires macOS) cd iosApp && ./setup_onnxruntime.sh && cd .. xcodebuild -project iosApp/UkuleleCompanion.xcodeproj \ -scheme UkuleleCompanion \ -destination 'platform=iOS Simulator,name=iPhone 16 Pro' \ build
The Android debug APK will be at app/build/outputs/apk/debug/app-debug.apk.
# Unit tests (including property-based fuzz tests) ./gradlew testDebugUnitTest # Instrumented tests (requires emulator or device) ./gradlew connectedAndroidTest # UI stress test with Android Monkey (requires emulator or device) ./scripts/monkey_test.sh # 10,000 random events ./scripts/monkey_test.sh 42 # reproducible with seed ./scripts/monkey_test.sh 42 50000 # 50,000 events with seed
The project includes property-based tests using Kotest that generate thousands of random inputs to verify invariants in the domain logic (chord detection, transposition, FFT, pitch detection, and more). These run automatically as part of testDebugUnitTest and in CI on every push and PR.
The AAB will be at app/build/outputs/bundle/release/app-release.aab.
Contributions are welcome! Whether you're fixing a bug, adding a feature, improving documentation, or refactoring code — we'd love your help.
Please read the Contributing Guide for detailed instructions on development setup, code guidelines, and the PR process. All participants are expected to follow our Code of Conduct.
We actively encourage contributors to use AI coding tools to accelerate their work on this project. The codebase is well-structured and AI-friendly:
Detailed feature documentation and a user manual are available in the docs/ directory:
The Complete Ukulele Learning Book is a free PDF guide covering foundations, developing skills, mastery, and a songbook -- from first strums to jazz voicings and fingerstyle. Designed to pair with Ukulele Companion as a structured learning path.
Audio samples are from the "Ukelele single notes, close-mic" pack by stomachache on Freesound.org, licensed under CC BY 3.0. See ATTRIBUTION.md for full details.
Built with ❤️ for ukulele players everywhere
Star the repo if you find it useful — it helps others discover the project!