Skip to content

A cross-platform, free and open source music player for Jellyfin 🪼 Powered by React Native ⚛️

License

Notifications You must be signed in to change notification settings

Jellify-Music/App

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🪼 Jellify

Jellify App Icon

Latest Version publish-beta Publish Over-the-Air Update

Sponsors Patreon

🔗 Quick Links

TestFlight

Discord Server

📄 Contents

ℹ️ Info

jellify (verb) - to make gelatinous
see also

Jellify is a free and open source music player for the Jellyfin Media Server. Built with React Native, it is available for both iOS and Android.

Jellify requires a connection to a Jellyfin Media Server server to work. See also

Showcasing the artwork of your library, it has a user interface congruent to what the big guys do. Jellify also provides algorithmic curation of your music (not that you have to use Jellify that way). It's designed to be lightweight, and scale to even the largest of music libraries (...like 100K tracks large).

😇 Background

This app was designed with me and my dad in mind. I wanted us to have a sleek, one stop shop for live recordings of bands we like (read: the Grateful Dead). The UI was designed so that we'd find it instantly familiar and useful. CarPlay / Android Auto support was also a must for us, as we both use CarPlay religiously.

⚙️ Recommended Plugins

  • lyarenei/jellyfin-plugin-itunes
    • Really good at fetching missing artist artwork for obscure / less popular artists
    • Recommended to set this as a lower priority, Apple likes to respond with HTTP 429s when refetching all images with large libraries
  • LrcLib
    • Available in the default plugins catalog
    • Really good at fetching song lyrics

⬇️ Downloading

Android

Head to releases to download the required .APK directly.

Also there is obtanium to which you can add Jellify as a repo to use the above releases as a repository.

For Obtanium, click "Add App", put "https://github.com/Jellify-Music/App" as the source URL, and on the next screen toggle "prereleases". You'll now be easily able to keep your local copy in sync with new releases.

iOS

The TestFlight Way

Join the TestFlight and install the latest version from there

The Sideloading Way

Head to releases to download the required .IPA directly.

Install via Altstore or your favorite sideloading utility

📱 Screenshots

Screenshots taken on iPhone 15 Pro Max


🏠 Home

Jellify Home


🎵 Library

Artists

Library Artists

Downloaded Tracks

Library Tracks

Artist View

Artist

Similar Artists

Similar Artists

Album Views

Album MultiArtist Album Offline Album

Track Options & Add to Playlist

Track Options Playlist


🔍 Search

Search


▶️ Player

Player Queue Favorite Track


🚗 CarPlay

Home (CarPlay)


🖥️ On the Server

Playback Tracking

💡 Features

✨ Current

  • Available via Testflight and Android APK
    • APKs are associated with each release
  • Light and Dark modes
  • Home screen access to previously played tracks, artists, and your playlists
  • Quick access to similar artists and items for discovering music in your library
  • Jellyfin playback reporting and Last.FM Plugin support
  • Full Library Browsing
  • Playlist support, including creating, updating, and reordering
  • Offline Playback
  • Support for Jellyfin Instant Mixes
  • Over-the-Air Updates

🛠 Roadmap (in order of priority)

🏗 Built with Good Stuff

Made with React React Native Made with TypeScript code style: prettier GitHub License

🎨 Frontend

Tamagui
React Navigation
React Native CarPlay
React Native Draggable Flatlist
React Native Reanimated
React Native Toast Message
React Native Vector Icons

🎛️ Backend

Jellyfin SDK
Tanstack Query
React Native DNS Lookup
React Native File Access
React Native MMKV
React Native OTA Hot Update
React Native Track Player
React Native URL Polyfill

👩‍💻 Opt-In Monitoring

All logging and metrics gathering is opt-in by default. This is merely here to help us make Jellify better.

All logs and metrics are completely anonymized. No data can be traced back to you.

GlitchTip

TelemetryDeck

💜 Love from Wisconsin 🧀

This is undoubtedly a passion project of mine, and I've learned a lot from working on it (and the many failed attempts before it). I hope you enjoy using it! Feature requests and bug reports are welcome :)

🙏 Support the Project

You can support Jellify development via Patreon or GitHub Sponsors starting at $1.

This allows me to prioritize specific features, acquire additional hardware for testing and development, and helps cover operational costs like Apple Developer Licenses.

🏃‍♀️Running Locally

⚛️ Universal Dependencies

🍎 iOS

Dependencies

Instructions

Setup
  • Clone this repository
  • Run yarn init-ios:new-arch to initialize the project
  • In the ios directory, run fastlane match development --readonly to fetch the development signing certificates
    • You will need access to the "Jellify Signing" private repository
Running
  • Run yarn start to start the dev server
  • Open the Jellify.xcodeworkspace with Xcode, not the Jellify.xcodeproject
  • Run either on a device or in the simulator
    • You will need to wait for Xcode to finish it's "Indexing" step
Building
  • To create a build, run yarn fastlane:ios:build to use fastlane to compile an .ipa

🤖 Android

Dependencies

Instructions

Setup
  • Clone this repository
  • Run yarn install to install npm packages
Running
  • Run yarn start to start the dev server
  • Open the android folder with Android Studio
    • Android Studio should automatically grab the "Run Configurations" and initialize Gradle
  • Run either on a device or in the simulator
Building
  • To create a build, run yarn fastlane:android:build to use fastlane to compile an .apk for all architectures

References

👩‍💻 Contributing

We are open to any developer that wants to lend their hand at Jellify development! Here's the best way to get started

  • Fork this repository
  • Follow the instructions for Running Locally
  • Hack, hack, hack
  • ???
  • Submit a Pull Request to sync the main repository with your fork!
  • Profit 🎉

🙏 Special Thanks To

  • The Jellyfin Team for making this possible with their software, SDKs, and unequivocal helpfulness.
  • James and all other contributors of Finamp. Jellify draws inspiration and wisdom from it, and is another fantastic music app for Jellyfin.
    • James’ API Blog Post proved to be exceptionally valuable during development
  • The folks in the Margelo Community Discord for their assistance
  • Nicolas Charpentier for his React Native URL Polyfill module and for his assistance with getting Jest working
  • The team behind Podverse for their incredible open source project, of which was used as a reference extensively during development
  • My fellow contributors who have poured so much heart and a lot of sweat into making Jellify a great experience
    • Extra thanks to John and Vali-98 for shaping and designing the user experience in many places
    • Huge thank you to Ritesh for literally so many things:
      • Offline Mode and Network Detection
      • Error Boundary Detection
      • Over-the-Air Updates
      • Supreme memes
  • The friends I made along the way that have been critical in fostering an amazing community around Jellify
  • My long time friends that have heard me talk about Jellify for literally eons. Thank you for testing Jellify during it's infancy and for supporting me all the way back at the beginning of this project
    • Tony (iOS, Android)
    • Trevor (Android)
    • Laine (Android)
    • Jordan (iOS)
  • My best(est) friend Alyssa, for your design knowledge and for making various artwork for Jellify.
    • You’ve been instrumental in shaping it’s user experience, my rock during development, and an overall inspiration in my life

⭐️ Star History

Star History Chart