Library / SDK
jarnedemeulemeester/findroid avatar
jarnedemeulemeester/findroid

Findroid: a native Jellyfin client for Android that plays direct

Third-party native Jellyfin Android app

4,266 stars307 forksKotlinGPL-3.0

At a glance

What is it?
Findroid is a third-party Jellyfin app for Android, written in Kotlin and licensed GPL-3.0. It gives Jellyfin users a native interface with offline downloads, ExoPlayer and mpv playback, and no transcoding at all.
Who is it for?
Adopt Findroid if your Jellyfin library is already in formats your phone can decode and you want a native Android client with offline downloads. Do not adopt it if you rely on server-side transcoding, need Android TV, Chromecast or Syncplay, or want a client that the README does not describe as being in its early stages.
Can I use it commercially?
Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
Is it still maintained?
Yes. The repository last received commits 3 days ago.
What is it written in?
Mainly Kotlin, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 30, 2026, and from our analysis. They are not legal advice.

Editorial analysis

What Findroid is and who it is for

Findroid is a third-party Android application for Jellyfin. The README describes it as providing "a native user interface to browse and play movies and series." It is not the official Jellyfin client, and it is not a server. It is a Kotlin Android app that talks to a Jellyfin server you already run.

The intended user is someone with a Jellyfin library who wants a phone client that does not feel like a web page in a wrapper. The README's first feature bullet is "Completely native interface," and the repository is organised accordingly: separate Gradle modules for app, core, data, player, modes, settings and setup. The author states the app is developed in spare time and that "This project is in its early stages so expect bugs." That sentence should be read literally. Findroid is a working client, but it is a solo-maintained one, and the README does not promise stability.

The supported media items are movies, series, seasons and episodes. Music is not in that list, and neither is live TV. If your Jellyfin server is mostly a music library, Findroid is the wrong tool.

Direct play only: the constraint that shapes everything

The README's second feature bullet contains the decision that matters most: "Direct play only, (no transcoding)." Findroid does not ask the server to convert a stream into something the phone can handle. It plays the file as it is, or it does not play it.

That choice has consequences. Video codec support depends on the Android device, as the README notes under ExoPlayer: H.263, H.264, H.265, VP8, VP9 and AV1 are listed, but "Support depends on Android device." Audio support is broader because it comes from the ExoPlayer FFmpeg extension: Vorbis, Opus, FLAC, ALAC, PCM, MP3, AAC, AC-3, E-AC-3, DTS, DTS-HD and TrueHD. Subtitle support covers SRT, VTT, SSA/ASS and PGSSUB, with the README pointing to a known ExoPlayer issue for limited SSA/ASS styling.

There is a second player, mpv, which the README lists with container formats mkv, mov, mp4 and avi, video codecs H.264, H.265, H.266, VP8, VP9 and AV1, audio codecs Opus, FLAC, MP3, AAC, AC-3, E-AC-3, TrueHD, DTS and DTS-HD, and subtitle codecs SRT, VTT, SSA/ASS and DVDSUB. The mpv path also offers an option to force software decoding when hardware decoding has issues. That is the escape hatch for a file that a device's hardware decoder rejects, and it is the closest thing Findroid has to a fallback for awkward media.

What none of this does is rescue a file the phone simply cannot decode. On a server whose library is a mix of high-bitrate formats, direct play turns into a per-device compatibility problem, and the client has no server-side answer for it.

Installing Findroid and playing a first file

The README does not document a source build. It points at four distribution channels: Google Play, the Amazon Appstore, F-Droid and IzzyOnDroid. The package name used by all of them is dev.jdtech.jellyfin. The F-Droid listing is at f-droid.org/packages/dev.jdtech.jellyfin, and the IzzyOnDroid listing is at apt.izzysoft.de/fdroid/index/apk/dev.jdtech.jellyfin. There is no separate APK download section in the README, so the store listings are the install path.

After installing, the app needs your server. The repository has a setup module, which is where the connection flow lives, but the README itself does not describe the fields. What can be said from the README is that Findroid is a Jellyfin client, so it needs a Jellyfin server address and credentials. The README gives no example URL and no port, so do not copy one from anywhere claiming to be from this project.

The features that depend on server version are the ones to check after connecting. Trickplay requires Jellyfin 10.9 or higher, and media segments require Jellyfin 10.10 or higher. If your server is older, those two features will not appear.

For a source build, the repository layout is the only guide: it is a Gradle project with a wrapper. The README does not state which JDK or Android SDK version is required, so a build attempt starts from the wrapper and the Gradle files rather than from documented prerequisites.

bash
git clone https://github.com/jarnedemeulemeester/findroid.git
cd findroid
./gradlew assembleDebug

The wrapper script and the Gradle files are present at the repository root, which is what makes those commands the plausible entry point. The README does not document the output path or the signing setup, so treat the build as undocumented territory.

Downloads, PiP and chapters: the client-side features

The features that do not depend on the server are the ones Findroid implements itself. Offline playback and downloads are listed as a single bullet, which is the main reason to pick a native client over a browser tab. Picture-in-picture mode is listed separately. Media chapters get timeline markers and chapter navigation gestures.

These are client behaviours, and the README does not say where downloads are stored, how much space they take, or how they are removed. That gap matters if you plan to use offline playback as a primary feature rather than an occasional one. A downloads feature without documented storage management is a feature you have to test on your own device before trusting it on a trip.

Trickplay and media segments are the two features that reach back to the server. Trickplay needs Jellyfin 10.9 or higher. Media segments need Jellyfin 10.10 or higher and provide a skip button plus auto skip. Both are version-gated, and both are the kind of thing that silently does nothing on an older server rather than failing loudly.

What Findroid does not do yet

The README has a planned features list, and it is short: Android TV, websocket connection for Syncplay, and Chromecast support. All three are absent today. If any of them is a requirement, Findroid is not the client for you right now.

Android TV is the notable one for this audience. A Jellyfin user with a television and a phone often wants both, and Findroid covers only the phone. Chromecast is the second: the README lists it as planned, so casting from Findroid is not available. Syncplay depends on a websocket connection, which is also planned, so synchronised group viewing is not there either.

The other limitation is the one the README states about itself. The project is in its early stages and the author expects bugs. Combined with a single maintainer working in spare time, that means the failure mode is not a dramatic crash but a feature that quietly does not work on your particular device or server version. Direct play makes this more likely, not less, because device codec support is outside the app's control.

Findroid compared with the official Jellyfin Android app

The obvious alternative is the official Jellyfin Android client. The difference in approach is architectural. The official client is built around a web-based interface, which is why it can be updated independently of the Android release cycle and why it behaves consistently across devices. Findroid rejects that approach: the README's first feature is "Completely native interface," and the module layout (app, core, data, player, modes, settings, setup) reflects a conventional native Android app rather than a web view.

That trade is real in both directions. A native client can integrate with the platform in ways a web view cannot, and Findroid's ExoPlayer and mpv player paths are the clearest example. But a native client also has to reimplement every screen, and it inherits the device's codec support instead of leaning on server transcoding. Findroid's direct-play-only stance is the sharpest expression of that: the official client can fall back to a transcoded stream, and Findroid cannot.

So the comparison is not about which app is better in the abstract. It is about whether your library and your devices line up well enough that direct play is not a problem. If they do, Findroid's native interface and offline downloads are the payoff. If they do not, the official client's ability to transcode is the feature you actually need.

Licence, maintenance and what updates cost you

Findroid is licensed under GPL-3.0, and the LICENSE file is at the repository root. For an end user installing from a store, the practical effect is that the app is free software and the source is available. For anyone considering shipping Findroid inside another product, GPL-3.0 is a copyleft licence, and the obligations it creates are a question for a lawyer, not for this article.

The README also notes that the logo combines the Jellyfin logo with the Android robot, that the Android robot is used under the Creative Commons 3.0 Attribution License, and that Android, Google Play and the Google Play logo are trademarks of Google LLC. Those are separate from the code licence and are worth reading in the README rather than assuming.

On maintenance: the last push to the repository was on 2026-09-21, and the most recent release is v1.1.0 from 2026-07-18. The two releases before that were v1.0.2 on 2026-01-12 and v1.0.1 on 2025-12-31. The repository is not archived. The README describes the project as early-stage and developed in spare time, and the planned features list has been carried forward rather than completed, which is the honest signal about pace. Upgrading means installing a new build from the same store channel; the README does not document a migration path, a database schema, or any rollback procedure, so that is a gap rather than a guarantee.

Editorial conclusion

Adopt Findroid if your Jellyfin library is already in formats your phone can decode and you want a native Android client with offline downloads. Do not adopt it if you rely on server-side transcoding, need Android TV, Chromecast or Syncplay, or want a client that the README does not describe as being in its early stages. Before installing, verify that your Jellyfin server is 10.9 or higher if you want trickplay, and 10.10 or higher if you want media segment skipping, because those features are gated on the server version.

Frequently asked questions

Is Findroid free to use?

Yes. The README lists it on Google Play, the Amazon Appstore, F-Droid and IzzyOnDroid, and the project is licensed under GPL-3.0.

What are the differences between Findroid and Jellyfin?

They are not the same kind of thing. Jellyfin is the media server; Findroid is a third-party Android client that connects to a Jellyfin server to browse and play movies and series.

What is the best Android TV app for Jellyfin?

Findroid cannot answer this, because Android TV is listed in its planned features and is not available today. The README's supported client is Android phones.

What is Findroid?

It is a third-party Android application for Jellyfin that provides a native user interface to browse and play movies and series, written in Kotlin and licensed under GPL-3.0.

Official sources

  1. Issues
  2. jarnedemeulemeester/findroid on GitHub
  3. License: GPL-3.0
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/jarnedemeulemeester-findroid.svg)](https://hysenlabs.com/projects/jarnedemeulemeester-findroid)