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

text
1apps/mobile/android/ Android application
2apps/mobile/ios/ iOS application and Swift package
3apps/desktop/ GPUI desktop prototype
4crates/aurelia-core/ Shared domain, persistence, and Jellyfin logic
5crates/aurelia-lyrics/ Lyrics parsing and models
6crates/uniffi-bindgen/ Mobile binding-generation CLI wrapper
7plugins/jellyfin-animated-artwork/ Optional server plugin for animated album artwork

Quick start

Enter the Nix development shell when using NixOS:

bash
1nix develop

Build and test Android:

bash
1cd apps/mobile/android
2./gradlew testDebugUnitTest assembleDebug

Build the Rust core and run its tests:

bash
1cargo test --workspace

Run the desktop prototype:

bash
1cargo 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:

bash
1./apps/mobile/ios/build-rust.sh
2open 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.