README.md
Aurelia
Aurelia is a native music client for Jellyfin.
- Android is built with Kotlin, Jetpack Compose, and Media3.
- iOS is built with SwiftUI and AVFoundation.
- The desktop prototype is built in Rust with mainline GPUI and Aurelia-owned controls.
- Shared Jellyfin, library, cache, and lyrics behavior lives in Rust. Mobile uses it through UniFFI; desktop links it directly.
Repository layout
| 1 | apps/mobile/android/ Android application |
| 2 | apps/mobile/ios/ iOS application and Swift package |
| 3 | apps/desktop/ GPUI desktop prototype |
| 4 | crates/aurelia-core/ Shared domain, persistence, and Jellyfin logic |
| 5 | crates/aurelia-lyrics/ Lyrics parsing and models |
| 6 | crates/uniffi-bindgen/ Mobile binding-generation CLI wrapper |
| 7 | plugins/jellyfin-animated-artwork/ Optional server plugin for animated album artwork |
Quick start
Enter the Nix development shell when using NixOS:
| 1 | nix develop |
Build and test Android:
| 1 | cd apps/mobile/android |
| 2 | ./gradlew testDebugUnitTest assembleDebug |
Build the Rust core and run its tests:
| 1 | cargo test --workspace |
Run the desktop prototype:
| 1 | cargo run -p aurelia-desktop |
The desktop app can authenticate with a Jellyfin server, persist the session, sync a profile-specific library cache, and populate the home screen from that cache. It streams audio through Rodio, reports playback progress to Jellyfin, and publishes metadata and transport controls through the operating system's media-session interface.
iOS builds require macOS with Xcode:
| 1 | ./apps/mobile/ios/build-rust.sh |
| 2 | open apps/mobile/ios/Aurelia.xcworkspace |
See docs/BUILDING.md and docs/TESTING.md for the complete workflows.
The optional Animated Album Artwork plugin provides animated covers in Jellyfin Web and an authenticated MP4 artwork API used by Aurelia’s Android album and player views.