Native desktop apps for Jellyfin — macOS first, Windows and Linux to follow. Not Electron, not a web wrapper. Each platform is rendered by its own native UI toolkit, sharing a Rust core for API, audio coordination, and storage.
Status: macOS MVP playing music. Windows and Linux in planning.
core/ Rust library — Jellyfin API, queue, storage, stream URLs
macos/ SwiftUI + AVFoundation app (current focus)
windows/ WinUI 3 / C# app (planned)
linux/ GTK4 + libadwaita app (planned)
design/ Shared design tokens, fonts, icons, and prototype
examples/ Small Rust binaries exercising the core
Business logic lives in core/ as a Rust library. Each platform links it:
.xcframework, consumed through UniFFI-generated Swift bindings. Audio playback uses AVPlayer directly, with the Rust core providing authenticated stream URLs. MPNowPlayingInfoCenter / MPRemoteCommandCenter integrations (planned) make the app a first-class participant in macOS media controls.uniffi-bindgen-cs). MediaPlayer for audio, SMTC for transport integration. See windows/README.md.gtk-rs, linking the core directly in-process. GStreamer for audio, MPRIS2 for transport.Requirements: macOS 14+, Rust (brew install rust), Xcode 15+.
cd macos
./Scripts/build-core.sh # Builds the Rust core → Jellify.xcframework
swift build # Builds the SwiftUI app
./Scripts/make-bundle.sh # Wraps the binary into Jellify.app
open build/Jellify.app
Exercises login + playback without the UI. Useful in CI.
JELLYFIN_URL=https://your.server \
JELLYFIN_USER=you \
JELLYFIN_PASS=pw \
./.build/arm64-apple-macosx/debug/SmokeTest
cargo test --workspace
The visual reference lives in design/ — an HTML/CSS prototype produced in Claude Design. Every native implementation targets parity with it.
Tokens we track across platforms:
#0C0622, surface rgba(126,114,175,0.08), primary #887BFF, accent #CC2F71, teal #57E9C9.See CONTRIBUTING.md. Open issues for bugs and features; track milestones in ROADMAP.md.
GPL-3.0-only. See LICENSE.