# ๐Ÿชผ Jellify ![Jellify App Icon](assets/icon_dark_60pt_3x.png) [![Latest Version](https://img.shields.io/github/package-json/version/anultravioletaurora/jellify?label=Latest%20Version&color=indigo)](https://github.com/anultravioletaurora/Jellify/releases) [![publish-beta](https://github.com/anultravioletaurora/Jellify/actions/workflows/publish-beta.yml/badge.svg?branch=main)](https://github.com/anultravioletaurora/Jellify/actions/workflows/publish-beta.yml) [![Publish Over-the-Air Update](https://github.com/Jellify-Music/App/actions/workflows/publish-ota-update.yml/badge.svg)](https://github.com/Jellify-Music/App/actions/workflows/publish-ota-update.yml) [![Sponsors](https://img.shields.io/github/sponsors/anultravioletaurora?label=Project%20Sponsors&color=magenta)](https://github.com/sponsors/anultravioletaurora) [![Patreon](https://img.shields.io/badge/Patreon-F96854?logo=patreon&logoColor=white)](https://patreon.com/anultravioletaurora?utm_medium=unknown&utm_source=join_link&utm_campaign=creatorshare_creator&utm_content=copyLink) ## ๐Ÿ”— Quick Links [TestFlight](https://testflight.apple.com/join/etVSc7ZQ) [![Discord Server](https://dcbadge.limes.pink/api/server/https://discord.gg/yf8fBatktn)](https://discord.gg/yf8fBatktn) ## ๐Ÿ“„ Contents - [Info](#โ„น๏ธ-info) - [Downloading](#๏ธ-downloading) - [Screenshots](#-screenshots) - [Features](#-features) - [Built with](#-built-with-good-stuff) - [Support](#-support-the-project) - [Running Locally](#๏ธrunning-locally) - [Contributing](#-contributing) - [Special Thanks](#-special-thanks-to) ## โ„น๏ธ Info > **jellify** (verb) - _to make gelatinous_
> [see also](https://www.merriam-webster.com/dictionary/jellify) _Jellify_ is a free and open source music player for the [Jellyfin Media Server](https://jellyfin.org/). Built with [React Native](https://reactnative.dev/), it is available for both iOS and Android. > _Jellify_ requires a connection to a [Jellyfin Media Server](https://jellyfin.org/) server to work. [See also](https://jellyfin.org/docs/) 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](https://github.com/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](https://repo.jellyfin.org/files/plugin/manifest.json) - Available in the default plugins catalog - Really good at fetching song lyrics ## โฌ‡๏ธ Downloading ### Android Head to [releases](https://github.com/Jellify-Music/App/releases) to download the required .APK directly. Also there is [obtanium](https://github.com/ImranR98/Obtainium) 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](https://testflight.apple.com/join/etVSc7ZQ) and install the latest version from there #### The Sideloading Way Head to [releases](https://github.com/Jellify-Music/App/releases) to download the required .IPA directly. Install via [Altstore](https://altstore.io) 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](https://github.com/anultravioletaurora/Jellify/releases) - 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](https://github.com/jesseward/jellyfin-plugin-lastfm) support - Full Library Browsing - Playlist support, including creating, updating, and reordering - Offline Playback - Support for Jellyfin Instant Mixes - Over-the-Air Updates - Powered by [react-native-ota-hot-update](https://github.com/vantuan88291/react-native-ota-hot-update), incremental app updates are automatically fetched and applied from our [App Bundles Repository](https://github.com/Jellify-Music/App-Bundles) ### ๐Ÿ›  Roadmap (in order of priority) - ["Smart Shuffle"](https://github.com/anultravioletaurora/Jellify/issues/57) - [CarPlay / Android Auto Support](https://github.com/anultravioletaurora/Jellify/issues/5) - [App Store / Google Play / FDroid Release](https://github.com/anultravioletaurora/Jellify/issues/361) - [Translations](https://github.com/anultravioletaurora/Jellify/issues/317) - [Web / Desktop support](https://github.com/anultravioletaurora/Jellify/issues/71) - [Shared, Public, and Collaborative Playlists](https://github.com/anultravioletaurora/Jellify/issues/175) - [Watch (Apple Watch / WearOS) Support](https://github.com/anultravioletaurora/Jellify/issues/61) - [TV (Android, Apple, Samsung) Support](https://github.com/anultravioletaurora/Jellify/issues/85) ## ๐Ÿ— Built with Good Stuff [![Made with React](https://img.shields.io/badge/React-19-blue?logo=react)](https://reactjs.org) [![React Native](https://img.shields.io/badge/React-Native-079?logo=react)](https://reactnative.dev) [![Made with TypeScript](https://img.shields.io/badge/TypeScript-5-blue?logo=typescript&logoColor=white)](https://typescriptlang.org) [![code style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg)](https://github.com/prettier/prettier) [![GitHub License](https://img.shields.io/github/license/anultravioletaurora/jellify?color=indigo)](https://github.com/anultravioletaurora/jellify/blob/main/LICENSE) ### ๐ŸŽจ Frontend [Tamagui](https://tamagui.dev/)\ [React Navigation](https://reactnavigation.org/)\ [React Native CarPlay](https://github.com/birkir/react-native-carplay)\ [React Native Draggable Flatlist](https://github.com/computerjazz/react-native-draggable-flatlist)\ [React Native Reanimated](https://docs.swmansion.com/react-native-reanimated/)\ [React Native Toast Message](https://github.com/calintamas/react-native-toast-message)\ [React Native Vector Icons](https://github.com/oblador/react-native-vector-icons) - Specifically using [Material Community Icons](https://oblador.github.io/react-native-vector-icons/#MaterialCommunityIcons) ### ๐ŸŽ›๏ธ Backend [Jellyfin SDK](https://typescript-sdk.jellyfin.org/)\ [Tanstack Query](https://tanstack.com/query/latest/docs/framework/react/react-native)\ [React Native DNS Lookup](https://github.com/tableau/react-native-dns-lookup)\ [React Native File Access](https://github.com/alpha0010/react-native-file-access)\ [React Native MMKV](https://github.com/mrousavy/react-native-mmkv)\ [React Native OTA Hot Update](https://github.com/vantuan88291/react-native-ota-hot-update)\ [React Native Track Player](https://github.com/doublesymmetry/react-native-track-player)\ [React Native URL Polyfill](https://github.com/charpeni/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](https://glitchtip.com/) - [See logging statements](https://github.com/search?q=repo%3AJellify-Music%2FApp+console.&type=code&p=1) [TelemetryDeck](https://telemetrydeck.com) ### ๐Ÿ’œ Love from Wisconsin ๐Ÿง€ This is undoubtedly a passion project of [mine](https://github.com/anultravioletaurora), 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](https://patreon.com/anultravioletaurora?utm_medium=unknown&utm_source=join_link&utm_campaign=creatorshare_creator&utm_content=copyLink) or [GitHub Sponsors](https://github.com/sponsors/anultravioletaurora) 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 - [Ruby](https://www.ruby-lang.org/en/documentation/installation/) for Fastlane - [NodeJS v22](https://nodejs.org/en/download) for React Native ### ๐ŸŽ iOS #### Dependencies - [Xcode](https://developer.apple.com/xcode/) for building #### Instructions ##### Setup - Clone this repository - Run `yarn init-ios:new-arch` to initialize the project - This will install `npm` packages, install `bundler` and required gems, and install required CocoaPods with [React Native's New Architecture](https://reactnative.dev/blog/2024/10/23/the-new-architecture-is-here#what-is-the-new-architecture) - 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 - [Android Studio](https://developer.android.com/studio) - [Java Development Kit](https://www.oracle.com/th/java/technologies/downloads/) #### 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 - [Setting up Android SDK](https://developer.android.com/about/versions/14/setup-sdk) - [ANDROID_HOME not being set](https://stackoverflow.com/questions/26356359/error-android-home-is-not-set-and-android-command-not-in-your-path-you-must/54888107#54888107) - [Android Auto app not showing up](https://www.reddit.com/r/AndroidAuto/s/LGYHoSPdXm) ## ๐Ÿ‘ฉโ€๐Ÿ’ป 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](#๏ธrunning-locally) - Hack, hack, hack - ??? - Submit a Pull Request to sync the main repository with your fork! - Profit ๐ŸŽ‰ ## ๐Ÿ™ Special Thanks To - The [Jellyfin Team](https://jellyfin.org/) for making this possible with their software, SDKs, and unequivocal helpfulness. - Extra thanks to [Niels](https://github.com/nielsvanvelzen) and [Bill](https://github.com/thornbill) - [James](https://github.com/jmshrv) and all other contributors of [Finamp](https://github.com/jmshrv/finamp). _Jellify_ draws inspiration and wisdom from it, and is another fantastic music app for Jellyfin. - Jamesโ€™ [API Blog Post](https://jmshrv.com/posts/jellyfin-api/) proved to be exceptionally valuable during development - The folks in the [Margelo Community Discord](https://discord.com/invite/6CSHz2qAvA) for their assistance - [Nicolas Charpentier](https://github.com/charpeni) for his [React Native URL Polyfill](https://github.com/charpeni/react-native-url-polyfill) module and for his assistance with getting Jest working - The team behind [Podverse](https://github.com/podverse/podverse-rn) for their incredible open source project, of which was used as a reference extensively during development - My fellow [contributors](https://github.com/anultravioletaurora/Jellify/graphs/contributors) who have poured so much heart and a lot of sweat into making _Jellify_ a great experience - Extra thanks to [John](https://github.com/johngrantdev) and [Vali-98](https://github.com/Vali-98) for shaping and designing the user experience in many places - Huge thank you to [Ritesh](https://github.com/riteshshukla04) 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_ - [Thalia](https://github.com/PercyGabriel1129) - [BotBlake](https://github.com/BotBlake) - 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](https://github.com/lainie-ftw) (Android) - [Jordan](https://github.com/jordanbleu) (iOS) - My best(est) friend [Alyssa](https://www.instagram.com/uhh.lyssarae?igsh=MTRmczExempnbjBwZw==), 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](https://api.star-history.com/svg?repos=anultravioletaurora/Jellify,Jellify-Music/App&type=Date)](https://www.star-history.com/#anultravioletaurora/Jellify&Jellify-Music/App&Date)