Mufify 1.0.2
An offline-only music player for Android. Plays the files a streaming service
will not — FLAC, ALAC, and whatever else is already on the phone — and shows you
what they actually are.
Install
Download mufify-1.0.2.apk below and open it on the phone. Android will ask
you to allow installing from this source; that is expected for an APK that did
not come from a store.
Upgrading from any earlier build works in place — this one's version code is
higher, so nothing needs uninstalling.
Since 1.0.1
The tab bar no longer draws over the queue. 1.0.1 claimed this fix and did
not deliver it, which is worth saying plainly.
The first two attempts were built on a wrong reading. Android sorts sibling
views by Z before it uses the drawing order zIndex produces, so the obvious
suspect was react-navigation's bottom bar, which carries an elevation of its
own. It was not that. Patching that elevation to zero in react-navigation's own
stylesheet — so the value definitely reached the bar — changed nothing, and
neither did giving the sheets an elevation above it.
What is actually happening, on Android 10 and not on Android 16 with the same
build: leaf views from underneath the queue composite in front of it, while
their own backgrounds stay correctly behind. Removing the tab bar entirely
showed it was never about the tab bar — a row of the library list came through
in its place.
So the queue now gets its own window rather than a higher number. The
compositor keeps windows apart, and nothing in the app's window can reach into
another one. The two elevation changes have been reverted; a wrong explanation
in the code is worse than no change at all.
What it does
- Playback of local files, lossless first-class, with background playback,
lock-screen and notification controls, and a persistent queue. - Five shuffle algorithms, each explained where you pick it.
- Local playlists with drag-reorder and cover mosaics, plus liked songs.
- On-device listening statistics by week, month and year — top tracks,
artists, albums and playlists, with a Wrapped summary. - The technical truth of a file on a monospaced spec strip: container,
sample rate, bit depth, bitrate, channels, size. - Turkish and English, dark and light.
- A statistics switch, if you would rather it kept no history. Turning it
off stops new writes and leaves what is already recorded alone. - An animation speed setting — Normal, Fast, or Instant.
No network, and it is enforced
There is no network layer. Not a disabled one, not one behind a setting.
This release ships without the INTERNET permission — plugins/withOfflineOnly.js
strips it from the release manifest, so a change that introduces a network call
does not fail review, it fails to work. Check it yourself:
aapt2 dump permissions mufify-1.0.2.apk | grep INTERNET # prints nothingACCESS_NETWORK_STATE does survive, pulled in by a dependency. It cannot open a
connection — that needs INTERNET, which is absent — but Android renders it as
"view network connections", so it is worth naming rather than leaving you to
find it.
Worth knowing
- Signed with a debug key. Fine for sideloading, not fine for the Play
Store. It also means a future Play-signed build cannot replace this one
without uninstalling first. - The APK is universal — every ABI in one file, which is why it is ~128 MB. What
gets installed is a fraction of that. minSdkVersion26 (Android 8.0), targets 36.- No favourite button in the media notification:
expo-audiodoes not expose
MediaSession custom actions. The reasoning and the options are in
docs/adr/015.