| Metadata | Value |
|---|---|
| Status | Active |
| Version | 2.1.0 |
| Last Updated | 2026-09-10 |
| Author | Sangeetha Grantha Team |
| Document Type | Navigation |
Rasika is the public Kotlin Multiplatform app for Android and iOS. It uses a shared Compose UI, a V2 catalogue client, and local bookmark/preferences storage. The mobile PRD defines the current release boundary.
| Module | Owns |
|---|---|
| shared/domain | Public DTOs and domain enums |
| shared/mobile-data | Ktor V2 client, repositories, local document storage, fixtures |
| shared/presentation | Home/Explore/Library/Settings, reader, entity screens and presenters |
| mobile/androidApp | Android host and instrumentation |
| mobile/iosApp | iOS host and UI test targets |
Home keeps search available independently of discovery. Explore searches compositions, ragas, and composers with submitted queries, UUID filters, and recoverable paging. Library stores bookmarks on the device. Settings includes persistent appearance; the reader preserves the chosen stored variant and source labels.
make test-mobile
make mobile-android
make mobile-ios
Native journeys require an explicit device:
bash tools/mobile/verify-rasika-journeys.sh android <device-serial>
bash tools/mobile/verify-rasika-journeys.sh ios <simulator-udid>
Replace the placeholders with an available device identifier; these commands are examples, not literal shell invocations. The harness rejects generic destinations. Hosted CI compiles native targets but does not establish full device runtime proof.
TRACK-140 acceptance still includes native journeys and manual TalkBack/VoiceOver verification. Read the evidence report for what was actually executed.
KtorCatalogueApi calls /v2/catalogue, including discovery. Its DTOs omit editorial fields and include published unclassified compositions. V2’s later metadata directories are not mounted yet. API contract covers parameters, visibility, and errors.
Android emulator debug uses http://10.0.2.2:8080; iOS simulator debug uses http://127.0.0.1:8080. Release transport requires HTTPS. Physical devices need an explicitly reachable server address.
Local persistence protects future/corrupt documents and serializes writes. Bookmarks are not offline lyric packs or account sync. Source changes and unavailable compositions still need current network/error handling when opening a saved work.