Jellystack is a privacy-focused Jellyfin and Seerr client with a native Android experience. Browse and play your own media, manage requests, download for offline use, and keep playback state in sync—without a Jellystack cloud, ads, analytics, or tracking.
Android is the stable, published platform. The shared Kotlin Multiplatform code and iOS host remain experimental; iOS is not currently distributed as a supported release.
Jellystack connects directly to servers configured by the user. Server credentials and tokens are stored in the platform-protected credential store. The app has no analytics SDK, automatic log upload, advertising, or developer-operated media proxy.
See Privacy, Permissions, and the German privacy policy.
Requirements:
All Gradle commands run from the repository root:
./gradlew :app-android:assembleDebug
./gradlew :app-tv:assembleDebug
Useful verification:
./gradlew spotlessCheck detekt
./gradlew :app-android:check
./gradlew :shared-network:jvmTest :shared-core:testDebugUnitTest
See Building for local setup and Architecture for module boundaries.
The TV beta uses a separate GMS-free application module while sharing Jellyfin, Seerr, settings, and playback logic with mobile. See Android TV and Fire TV for emulator setup, remote controls, builds, testing, and store submission.
Issues, discussions, and pull requests are welcome. Every change—including maintainer changes—lands through a pull request with required CI checks.
Read CONTRIBUTING.md, CODE_OF_CONDUCT.md, and SECURITY.md before contributing.
Jellystack is licensed under GPL-3.0. See Third-Party Notices for dependencies.
Jellystack is an independent community project and is not affiliated with or endorsed by Jellyfin, the Jellyfin project, Seerr, or their maintainers.