REX Player: libmpv playback in a Jetpack Compose shell
A modern Android video player powered by libmpv, built with Jetpack Compose.
At a glance
- What is it?
- REX Player is an Android video player that pairs the libmpv engine with a Jetpack Compose interface, adding gesture control, local and remote media sources, a Jellyfin client and a companion app for web platforms. It is an Android-only app distributed as a signed build, not a source-level project you compile yourself.
- Who is it for?
- REX Player suits Android users who want libmpv's flexibility, from frame stepping and zoom to network sources, and who want a Compose interface rather than the classic mpv layout. It is the wrong choice if you need a player outside Android, if you expect the project to be a build-from-source component, or if a stable build on your device is non-negotiable, since only preview builds are published alongside the signed release.
- Can I use it commercially?
- Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- 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 October 24, 2026, and from our analysis. They are not legal advice.
Editorial analysis
A libmpv engine with a Compose interface on top
REX Player is an Android video player whose engine is libmpv, the multimedia player library, and whose interface is written in Jetpack Compose. The project documentation describes it as an advanced, customizable video player that combines the versatility of libmpv with a modern Compose interface and features aimed at the person holding the phone.
That combination is the defining design choice. mpv is known for a large option surface and for keyboard oriented control, which is excellent on a desktop and awkward on a phone. REX Player keeps the engine and rebuilds the surface: the screenshot set in the documentation shows a glass themed player, a video screen, a picture in picture view, a playlist window and a more sheet, all of which are Android interface conventions rather than mpv ones.
The lineage matters too. The documentation credits mpvEx as the root of the project, and mpvEx itself builds on mpv-android. So REX Player is not a fork that invents a playback engine; it is a third generation of Android front ends for the same engine, with the interface layer replaced and a set of user facing features added on top.
The repository is not archived and the last push was on 2026-10-19. The default branch is master, the project is written in Kotlin, and the licence is Apache 2.0. The project also notes that the repository was moved from sfsakhawat999/mpvRex to mpvRex/REX-Player, with old links redirecting automatically.
Gesture control, frame navigation, zoom and pan
The playback feature set is where the effort goes. According to the documentation, playback is powered by libmpv with customizable gestures, frame navigation, zoom, and pan.
Each of those four words points at a specific complaint about default players. Customizable gestures means the tap, double tap, swipe and pinch actions are yours to remap rather than fixed. Frame navigation means stepping through a video a frame at a time, which matters for anyone studying a shot or syncing a cut. Zoom and pan apply to the video surface, letting you inspect a letterboxed film or a cropped clip on a screen whose aspect ratio does not match the source.
Around the player, the documentation lists what it calls user-centric features: browsing local files, organizing playlists, tracking watched videos, and a Shorts mode for vertical clips. Tracking watched videos implies the app keeps a record of what you have seen, and Shorts mode implies a separate vertical feed presentation rather than the standard full screen player.
Presentation options are configurable as well. The feature list names glass themed controls, dynamic tabs, subtitle settings, and HDR-to-SDR tone mapping. The last of these is the one with real device implications: tone mapping converts HDR content for an SDR display, which matters on the many phones whose panels are not HDR. The documentation does not describe which devices or which pipeline the mapping uses, so the safe assumption is that it applies to the display path rather than to a decode step.
The app also offers picture in picture, visible in the screenshot set, and the ability to share files with nearby devices over your local network.
Where the media comes from: local files, network shares and a companion app
The source side is broader than a plain file player. The documentation lists browsing local files as one path, then streaming from SMB, WebDAV, FTP and direct URLs, then a separate route for supported web platforms that runs through an optional companion app called REX Ytdlp.
The distinction between the built-in network protocols and the web platform route is worth understanding. SMB, WebDAV and FTP are direct protocol clients, so the app talks to your NAS, your own server or an FTP host itself. Web platforms are different: the app reaches them through a separate helper application rather than fetching them natively, which keeps the main app smaller and puts the site-specific extraction logic in a component that can be updated on its own.
The price of that design is a dependency. Streaming from a supported web platform requires the user to install and enable the REX Ytdlp companion app, and the documentation calls it optional, which means the main player works without it and loses that capability without it. Whether the companion is bundled, sideloaded separately, or pulled from a store is not described in the project documentation, so check the release notes and the app listing before assuming it installs itself.
The fourth source is a Jellyfin server. The feature list states that the player can connect to Jellyfin, which means the app can act as a remote client for a self hosted media library rather than treating that server as just another network share.
Getting the app: signed release or preview build, and what the source tree gives you
Installation here means downloading a built artifact, and the documentation offers two channels. The stable channel is the GitHub releases page for the project, linked as the Download Stable Release badge. The preview channel is hosted on the project's own pages at mpvrex.github.io/REX-Player, linked as the Download Preview Build badge. The documentation adds a warning that preview builds may be unstable and are intended for testing only, so the two channels are not equivalent in reliability.
There is no documented command line install path in the project documentation, so there is nothing to run from a terminal to obtain the app, and it would be wrong to invent one. What the repository does contain is a standard Android project layout: an `app/` module, `build.gradle.kts`, `settings.gradle.kts`, `gradle.properties`, the `gradle/` directory and the `gradlew` wrapper scripts, plus a `fastlane/` directory that holds the store listing metadata and the phone screenshots referenced from the documentation.
That layout tells you something useful even without a documented build command. The presence of gradlew means the project is configured for a standard Gradle build, but the documentation does not describe required SDK versions, signing configuration, or the steps to produce a release build, and it does not describe a build for sideloading a self-signed variant. Anyone planning to fork it and ship their own build has real work to do on that front, and the fastlane directory shows the maintainers handle release metadata through that tooling rather than by hand.
For an end user, the practical instruction is short: take the stable release from the GitHub releases page, and use the preview channel only if you specifically want to test what is coming next.
Translations are edited with Droidlate, not by hand
Localization has its own tooling story. The documentation states that translations are managed using Droidlate, a local, web-based interface for editing Android `strings.xml` translation files, and it links to the project's PyPI package for it. Contributors are pointed to the translation contribution guide, which includes instructions for running Droidlate locally.
This is a small detail that reveals how the project is maintained. Rather than asking people to edit XML files and open pull requests against resource directories, the maintainers give contributors a web interface that runs on the contributor's own machine. The Android resource format is famously unpleasant to read in bulk, and a translation project touches hundreds of strings, so a tool that renders them as a table changes the cost of contributing significantly.
For anyone auditing localization coverage, the `strings.xml` resources in the app module remain the source of truth, and Droidlate is a way to edit them. The documentation does not describe a script for extracting the current string inventory or for checking that every locale has complete coverage, so if you need that, you will have to look at the app resources directly.
Release pace, licence, and where REX Player is the wrong choice
The release history shows a project shipping steadily. The recent versions are v5.3.0 on 2026-10-01, v5.2.0 on 2026-09-14 and v5.1.0 on 2026-09-04, so three tagged releases inside a month. The last push on 2026-10-19 came after the v5.3.0 tag, which means work is landing on master between releases. The version scheme is plain semantic versioning, and the release notes in the repository's release page are where the detail lives.
The licence is Apache 2.0, distributed with the full text in the LICENSE file. For an end user that means nothing beyond the terms of use. For a company that wants to rebrand the app or bundle it, the Apache 2.0 grant is permissive, it requires that the licence and any notices are kept with the distributed work, and it includes an explicit patent grant. That last point is the reason it is often preferred over MIT in corporate settings, though the difference is a legal question rather than a technical one and your own counsel should confirm the fit.
There are clear cases where REX Player is the wrong tool. It is Android only, so a desktop, iOS or browser media workflow is out of scope by definition. It is distributed as a built application rather than as a library, so a developer who wants to embed libmpv playback in their own Android app gets nothing reusable from this repository, only inspiration for the interface. And if you cannot tolerate preview instability, the two channel setup means you are always choosing between an older stable build and an explicitly experimental one.
The alternative to weigh is the foundation the project itself credits. mpv-android is the libmpv application that mpvEx and then REX Player were built on, and it remains the choice if you want the established libmpv interface on Android. The difference in approach is the interface and the feature layer rather than the decoder: REX Player replaces the mpv interface with Compose components, adds gesture remapping, frame navigation, zoom and pan, adds SMB, WebDAV, FTP and Jellyfin sources, and delegates web platform extraction to a separate companion app. If your priority is a familiar libmpv experience with a large option surface, the older lineage is the shorter path. If your priority is touch first interaction and network library sources, that is what this project adds.
Editorial conclusion
REX Player suits Android users who want libmpv's flexibility, from frame stepping and zoom to network sources, and who want a Compose interface rather than the classic mpv layout. It is the wrong choice if you need a player outside Android, if you expect the project to be a build-from-source component, or if a stable build on your device is non-negotiable, since only preview builds are published alongside the signed release. Before installing, check the release page for the current stable version, confirm the REX Ytdlp companion is acceptable for the sites you stream from, and read the Apache 2.0 licence terms if you plan to redistribute a modified build.
Frequently asked questions
Where do I download REX Player for Android?
The stable build is published on the GitHub releases page for mpvRex/REX-Player, and a preview build is hosted at mpvrex.github.io/REX-Player. The documentation warns that preview builds may be unstable and are intended for testing only.
What is the REX Ytdlp companion app and when is it needed?
It is an optional companion application used to stream media from supported web platforms. Local files, SMB, WebDAV, FTP and direct URLs are handled by the player itself, but web platform sources need the companion installed.
Can REX Player play files from a Jellyfin server?
Yes. The feature list states that the player can connect to Jellyfin, alongside streaming from SMB, WebDAV, FTP and direct URLs.
What licence is REX Player released under?
It is distributed under the Apache License 2.0, with the full text in the LICENSE file at the top of the repository.
How are REX Player translations contributed?
Translations are managed with Droidlate, a local web-based interface for editing Android `strings.xml` files. The project points contributors to the translation contribution guide, which explains running Droidlate locally.
How do I enable frame-by-frame navigation and zoom in REX Player?
The documented playback features include customizable gestures, frame navigation, zoom and pan, all powered by libmpv, along with subtitle settings and HDR-to-SDR tone mapping. The project documentation does not describe the exact menu paths for these controls.
Official sources
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.
[](https://hysenlabs.com/projects/mpvrex-rex-player)Was this useful?