How mpv Got a Modern Android Interface with Jetpack Compose

If you've ever tried watching heavy video files with complex subtitles on Android, you've likely come across mpv-android. Its engine is versatile and fast, running the battle-tested libmpv library under the hood. But the classic client's interface remained spartan for a long time, as if stuck in the Android 7 era.
Recently, a fork called mpvEx (mpvExtended) gained popularity on GitHub. Its developer took the codebase from mpvKt and mpv-android projects as a foundation, rewrote the interface using Jetpack Compose with Material 3 Expressive, and added a bunch of useful features for everyday viewing.
Why Another mpv Fork
The original player is great in its minimalism, but mobile users often lack basic comfort. In mpvEx, the author focused on three things: preserving the rendering capabilities of libmpv, modernizing the UI, and proper support for home servers.
The app has no ads, trackers, or unnecessary permissions in the manifest. The code is fully open source under the Apache 2.0 license.
What makes the player interesting in practice
Network protocols out of the box
Pulling video files over the local network through third-party file managers is inconvenient. mpvEx includes built-in support for SMB, FTP, and WebDAV protocols. You can connect a home NAS or router drive directly in the player and open videos without downloading them to the phone's internal storage first.
Full frame-by-frame navigation
For those who analyze video frame by frame or look for a specific moment in a recording, there's a dedicated frame-by-frame navigation interface. Press a button and step forward or backward without buffering delays.
Flexible media handling
Alongside the familiar picture-in-picture (PiP) mode and background audio playback with the screen off, the player can:
- Attach external subtitle tracks and audio files
- Scale video with pinch-to-zoom gestures
- Switch directory view between folder tree and flat list
- Manage playlists and chapter navigation
Under the hood
The project is written in Kotlin with extensive use of Jetpack Compose. Integration with the native layer libmpv and FFmpeg libraries is implemented through JNI.
Building the app requires JDK 17 and Android SDK with build tools version 34.0.0 or newer. The repository has a GitHub Actions pipeline configured that automatically builds APKs for different architectures:
arm64-v8afor modern smartphonesarmeabi-v7afor old 32-bit chipsx86andx86_64for emulators and rare Intel-based devicesuniversaluniversal package with all libraries bundled
If you want to build the app from source with your own signing, the repository describes the procedure for passing keys through GitHub Secrets:
# Для Linux и macOS кодируем keystore в base64
base64 -i your-keystore.jks | tr -d '\n' > keystore.txt
On Windows PowerShell, this uses the built-in .NET method:
[Convert]::ToBase64String([IO.File]::ReadAllBytes("your-keystore.jks")) | Out-File -FilePath keystore.txt -NoNewline
Current state and conclusions
The project is actively developing: the repository already has over 2400 stars, though there are about 250 open issues in the tracker. The developer honestly warns that bugs may occur in non-standard scenarios.
If standard players like VLC seem overloaded to you, and plain mpv-android puts you off with its outdated design, mpvEx will be an excellent alternative. You can try ready-made builds from the releases page on GitHub or through the IzzyOnDroid catalog. For Android developers, the repository will also serve as a good example of wrapping a heavy C/C++ library in a modern Compose UI.
Related projects