Mornye v5.3.0
Requirements: 7.0+
Overview: music in FLAC format without quality loss from Deezer, Tidal, Qobuz, and Amazon Music.
Mobile music utility built with Flutter and Go. High-quality audio management for your personal library. No ads, no subscription.
✓ High-quality sound selection
✓ Ability to download entire albums
✓ Ability to create playlists
✓ Many settings
✓ Embedding lyrics in FLAC files
✨Features
Everything you need to build a high-quality music library on your phone.
True Lossless FLAC
Download in up to 24-bit/192kHz quality. No transcoding, no quality loss. Pure studio-grade audio files.
Multiple Providers
Download from Tidal, Qobuz, Deezer, and more via extensions. Automatic fallback if a source is unavailable.
Extensions
Community-built extensions add new music sources and features. Install from the built-in Store with one tap.
Search by Link or Name
Paste a Spotify, Tidal, Qobuz, or Deezer link. Or just search by song name — it handles the rest.
Batch & Playlist Download
Download entire albums and playlists at once. Smart queue management with concurrent downloads.
Rich Metadata
Full metadata embedding — album art, lyrics, genre, label, copyright, and more. All embedded in the FLAC file.
Extensions let the community add new music sources and features without waiting for app updates. When a streaming service API changes or a new source becomes available, extensions can be updated independently.
➠ Installing Extensions
Open the “Repo” (Store) tab in the app
Enter https://github.com/mornyeapp/Mornye-Extension/tree/main/extensions into the “Repository URL” and press on “Add Repository” button
Browse and install extensions with one tap
Or download a .spotiflac-ext file by clicking on it and pressing on “Raw” button and install manually via “Settings” tab > “Extensions”
Enable extensions under “Settings” tab > “Extensions” > “Installed Extensions”
Configure extension settings if needed
Set provider priority under “Settings” tab > “Extensions” > “Provider Priority”
➡ Untouched apk with Original Hash Signature
➡ Certificate MD5 digest: e316523c63417a22727c732c524df0a8
➡ No changes were applied
➡ Screen DPIs: 160dpi, 240dpi, 320dpi, 480dpi, 640dpi
What’s New:
New Features
whats-new: Give Nearby devices its own page
collections: Reorder saved songs in place
onboarding: Ask for Nearby devices on Android 17
linux: Add optional unsecured extension storage
onboarding: Add a What’s New tour for 5.3
download: Add FLAC quality caps and Opus 160 kbps
link: Add desktop device picker and file activity
link: Tell the desktop which audio files embed a picture
android: Serve cover files to media browsers read-only
covers: Show stored network covers in cover widgets
covers: Look up, adopt and refresh stored covers
covers: Cap cover fetches and back off longer from missing covers
covers: Add a durable store for network covers
link: Show computer playback on the iOS 27 Lock Screen
lyrics: Let synced lyrics run later or earlier than playback
library: Suggest songs under albums, singles and playlists
link: Manage desktop music files from mobile
home: Keep Resume after dismissing the player
lyrics: Romanize non-Latin lyrics with the AI translation
link: One player at a time; the computer follows a phone
player: Footer buttons as filled expressive pills
settings: Regroup the settings list by purpose
player: Compact player beside idle lyrics
home: More kinds of mixes, and genre mixes that keep their genre
home: Mixes built from the user’s own songs
player: Gapless playback
search: Recognize songs playing nearby
lyrics: Translate lyrics with an AI provider
player: Show the cover full screen by default in Material
lyrics: Let Mornye’s lyrics blur strength be set
link: Send or save the playing song from the player menu
link: Send and save songs from desktop menus
link: Run song transfers on the desktop
link: Receive whole phone songs for transfers
link: Transfers rows in Link settings and the player bar
link: Transfers list with expandable transfers
link: Keep the session up while songs transfer
link: Send and save songs from phone screens
link: Run phone song transfers in the background
link: Share the song transfer protocol and store
autoplay: Leave song analysis off until turned on
lyrics: Raise sung words in Material word-timed lyrics
settings: Show how well autoplay ranking learned
autoplay: Learn how much each part of a score counts
settings: Song analysis controls
autoplay: Analyze how songs sound
rust: Describe how songs sound from decoded windows
autoplay: Learn which songs are played together
autoplay: Explore artists with Thompson sampling
autoplay: Learn from loves, playlists and replays; add ranking signals
autoplay: Rank by the listening session and keep artists apart
link: Follow the computer’s playback and add phone options
link: Show a paired phone’s songs in the desktop’s Library
network: Serve network hosts that are not saved connections
link: Send a phone’s songs and their files to the desktop
link: Build the list of a phone’s songs for the desktop
link: Describe a phone’s songs for the desktop’s Library
android: Add Android TV remote navigation
l10n: Merge Crowdin updates and enable Chinese and Vietnamese (#731) (#731)
player: Immersive Material lyrics while idle
playback: Exclusive output on Windows, macOS and Linux
search: Show songs as covers in the wide grid view
library: Browse the Library by folder
network: Show lyrics for songs on a Subsonic server
link: Serve song lyrics over the songLyrics extension
link: Show the playing device on the Devices button
playlists: Reorder tracks, create from folders, import files
link: Start a phone-only song on the desktop while it uploads
link: Drive the desktop queue, notification and uploads from the phone
link: One player on the phone for both devices
link: Play the phone’s own songs on the desktop
player: Browse and play the Library from Android Auto
link: Mark Mornye Link as beta
link: Add the phone settings page and player bar devices control
link: Run the Mornye Link host on desktop
link: Add the Devices sheet and desktop actions on phones
link: Add phone features for a paired desktop
link: Download original Subsonic files and decode song paths
link: Keep the phone link and its sync alive with the app
link: Add the phone client for desktop discovery and pairing
link: Sync collections and history between phone and desktop
link: Track collection and listening changes for sync
link: Serve the desktop library over OpenSubsonic
link: Add the HTTPS server core and desktop link methods
link: Share the active client, router and catalog index providers
link: Add the Mornye Link crate skeleton and shared protocol types
player: Shuffle downloads and scanned songs from the Library
search: Group sort and view tools as on Library pages
desktop: Animate Material rail items like the playlist rows
desktop: Expand the Material rail and list playlists in it
player: Group Material shuffle and repeat and start-align the title
player: Let the Now Playing menu hide the volume slider
search: Keep the result rows by default and offer the grid as a view
search: Show cover grids and shelves for search results on wide screens
desktop: Let the song table keep the preview and cover saving
desktop: Adjust volume by scrolling over its controls
settings: Request local network access with the LAN toggle
extensions: Allow a network permission for any domain
Bug Fixes
setup: Accept existing all-files access on Android
downloads: Preserve cross-provider recording identity
downloads: Preserve artwork in playlist downloads
network: Recognize WebDAV NAS addresses behind tunnels
whats-new: Bring back the 5.2 rebrand tour’s look
whats-new: Match the tutorial on phones, use a dialog on desktop
network: Handle WebDAV HTTP listing variants
link: Exchange missing listening statistics covers
link: Sync AI lyrics translations across devices
link: Keep Android phones available in the background
about: Restore Git commit in direct mobile builds
link: Refresh paired device addresses after network changes
downloads: Recover moved files after changing folders
link: Preserve playback position during device handoff
player: Keep Android PCM defaults apart from the Bluetooth format
player: Follow us on Telegram saved sessions longer than 512 KB in pieces
ffmpeg: Register the plugin callbacks before Kotlin wraps them
covers: Keep the index when it cannot be read in a worker
covers: Never hand out a cover the byte budget deleted
startup: Report a failed orientation setup once
covers: Never take a 304 as the cover of a removed image
network: Keep the desktop’s newest Link songs first in latest
player: Keep the listening flush timer until every write settles
link: Tell a phone that missed the last catalog push
network: Log on afresh for connection checks and refused reconnects
desktop: Rebuild the macOS menu items on hot reload
link: Export web cover copies as webCoverPath
link: Rank web cover copies after every other cover
link: Use a web cover copy only for songs without a picture
link: Serve desktop web-only covers from a lasting Link folder
replaygain: Recognize Opus gain tags consistently
covers: Show a collection song’s network cover only where it loads
link: Keep a song’s network cover when a peer’s edit comes back
covers: Keep the network cover reference of Loved and playlist songs
link: Sync collection songs without network cover references
downloads: Keep network cover references out of the download queue
android: Close a cover descriptor on any failed check
android: Show local covers in Android Auto’s queue view
android: Check cover names per folder and serve the opened file
player: Look for the cover provider again after a failure
player: Show local covers in Android Auto browse lists
covers: Keep a Subsonic cover path while its image is unchanged
covers: Show the window’s cover on the Rewind first song and replay
covers: Keep a song’s recorded cover when its latest day has none
link: Sync no loopback artwork from older statistics
home: Show a network cover not stored yet in Continue listening
player: Keep stored loopback covers out of the Android Auto browser
covers: Keep temporary player covers out of Loved and recents
covers: Follow us on Telegram stored statistics covers as durable references
covers: Keep a stored tag cover when a read has none
covers: Keep desktop covers fresh and drop removed tag covers
covers: Show a known tag cover and fetch changed covers on use
player: Fetch network covers when an AutoMix starts a song
network: Play folder covers by reference
link: Show stored covers on mirrored playback
player: Show stored network covers on every play
library: Match cleared library covers by folder name
covers: Name untimed embedded previews by their content
library: Rescan local songs after clearing library covers
covers: Keep embedded previews of untimed sources on disk
library: Keep cover files that other stores still name
library: Keep thumbnail paths across forced rescans
covers: Key library thumbnails by 128-bit SHA-256
link: Refresh playback and details after desktop file changes
network: Keep SMB HEAD 416 framing and test rejected covers
covers: Fetch awaited covers before background rechecks
network: Release cover connections and keep the proxy’s 416 framing
link: Keep phone covers until the Library stops showing them
link: Key extracted cover pictures by their audio file
link: Fall back when a listed cover file is gone
covers: Keep a missing local cover out of the error handler
player: Share the iPhone home indicator inset with Playing on
home: Keep sections in place while one comes or goes
player: Shrink Material’s empty Playing on row
player: Keep the motion cover playing after rotating
search: Keep Sort beside the filters on wide results
library: Follow us on Telegram Opus tags with large artwork
downloads: Handle unsupported exclusive renames
ffmpeg: Load large metadata from temporary files
android: Resolve audio service lint warnings
android: Guard media artwork against recycled bitmaps
player: Hide internal playback UI in external mode
player: Follow us on Telegram deferred ReplayGain tags in audio info
link: Run computer file actions like local ones
link: Hold seek position until the playing device confirms
player: Slim the Material volume slider
metadata: Save animated artwork during re-enrichment
deezer: Prefer playable releases for ISRC matches
downloads: Hide temporary SAF audio from media scanners
library: Stop scans when NAS connections are removed
link: Recover discovery after network changes
metadata: Export cover and lyrics for local library files
downloads: Restart paused items after cancellation settles
artist: List an artist’s releases newest first
library: Hide CUE sources after a complete split
player: Stabilize timestamps and restored-session seeking
metadata: Keep WAV INFO and ID3 tags in sync
mornye: Show menu glass throughout its opening motion
motion: Only a list’s first reveal staggers in
link: Resolve phone artwork on desktop and refresh late covers
player: Controls stay put with or without Playing on
link: Recover remote covers and retire cancelled playback errors
desktop: Handle LRC sidecars and percent paths safely
playback: Drain desktop audio before advancing tracks
metadata: Review rows span their track card
link: Send fewer songs ahead of the computer
macos: Keep one instance for debug builds too
player: Open a phone song from its resolved source
link: Show covers for songs a phone sent to the computer
link: Show paired devices as Mornye Link, not a plain server
lyrics: Translate in song context, skip lyrics already in the target
link: Send handed-off songs only a window ahead of the computer
home: Run the Material desktop search field across the pane
autoplay: Draw on network Library songs, a paired phone’s included
home: Run Material desktop Home across the whole pane
link: Show a downloaded song’s cover when a phone plays it
link: Shrink the Mornye Playing on label to footnote size
link: Give transfer groups the page-wide settings inset
playback: Start a phone song on macOS while it still arrives
settings: Run desktop settings across the pane like page cards
link: Route Android volume keys to desktop player
player: Give Material landscape lyrics more room
autoplay: Save played-together sessions on pause and follow learning
link: Sync playback modes and restore queue covers
windows: Exclude x64 exception runtime from ARM64 bundles
extensions: Preserve verification after challenge failures (#610) (#610)
extensions: Return verification-required when challenge minting fails by @HDShinobi
desktop: Hide the FFmpeg console on Windows (#727) (#727)
desktop: Hide the console window when running FFmpeg on Windows by @barakunshetan-design
windows: Bundle the Visual C++ runtime (#728) (#728)
windows: Bundle the Visual C++ runtime next to mornye.exe by @barakunshetan-design
player: Keep Material backdrop blurred in landscape
ios: Respect verification browser preference
link: Hide Continue on phone once the phone plays
desktop: Hide window controls in fullscreen
link: Send a phone’s large embedded covers shrunk
link: Keep full-size phone covers from the web, shrunk
player: Show the restored song’s cover from its file
link: Fetch covers of downloaded phone songs on the desktop
link: Keep a phone’s song list until its Library changes
l10n: Preserve duplicate warning count placeholders
l10n: Validate Crowdin imports and enable Chinese and Vietnamese
ui: Keep one scrollbar in desktop menu popups
Improve playback responsiveness and resource lifecycles
link: Keep the notification on the desktop’s song in the background
player: Play the song again when Android’s media server dies
library: Keep scanned songs unplayable while Local Library is off
link: Advertise the desktop over IPv4 only
link: Keep playback usable while the desktop is out of reach
link: Keep the sent song in the player until the desktop reports
link: Start the desktop on Play on from a paused phone
link: Show desktop addresses as sent and group the phone’s code
link: Report the app version in Subsonic auth errors
link: Close the desktop pairing dialog only once
build: Name the macOS SDK for Rust C code built inside Xcode
link: Let the server derive starred artist ids from names
link: List OpenSubsonic extensions without credentials
settings: Keep loading when retired credential cleanup fails
player: Reshuffle each repeat-all pass in shuffle mode
desktop: Open sidebar links without passing the Library root
ui: Keep page titles clear of the back button
library: Keep playlist songs visible in Songs and Singles
downloads: Trust the audio bytes over a provider’s FLAC label
search: Leave room under result covers for the text line box
stats: Credit collaborators individually in listening history
android: Preserve audio routing during player initialization
settings: Follow us on Telegram the restore heading style inside the dialog
desktop: Show a short profile label in the sidebar
repo: Keep the store button beside the text when the title fits
library: Keep current row text readable on cover fills
player: Give the phone navigation bar the cover scheme
android: Coalesce background work progress notifications
android: Keep background playback resumable
mornye: Tint album surfaces from the player’s source colour
lyrics: Recover download lyrics after provider failures
Performance
player: Encode session songs here when no isolate starts
player: Encode each queued song once for session writes
ffmpeg: Load FFmpegKit on first use, off the main thread
player: Send Windows SMTC status and timeline only when needed
player: Reuse Now Playing artwork and skip unchanged republishes
player: Bound the Android notification art cache
player: Mask only the faded band of the full-screen cover
covers: One batched cover cache from its first use
covers: Add a cover index that saves in batches
theme: Build the first frame with the system palette
startup: Overlap the platform calls before runApp
theme: Validate and hash custom fonts off the UI isolate
network: End a search3 sync only on an empty song page
network: Revalidate stale Subsonic covers with their ETag
network: Sync a Mornye desktop through search3 song pages
material: Settle the collection header blur
ui: Add SettledBlur, a blur drawn from a cached image once settled
library: Match collection history keys once per page data
library: Skip history refreshes on resume that change nothing
library: Skip snapshot builds for pages and failed builds
library: Reuse the lookup index while the Library is unchanged
library: Follow us on Telegram the download shadow check from a TEMP snapshot
player: Hold back Now Playing states on macOS too
player: Load media session art from the app cover cache
player: Send the phone media session only states it cannot advance
player: Run the listening flush timer only while there is time to write
player: Ask the engine only for positions the player uses
player: Run the libmpv position timer only while playing
link: Match unmapped history songs in batches
link: Push the desktop catalog only when its songs changed
network: Share SMB read sessions across listings and reads
library: Keep the folder song table rows across rebuilds
library: Keep the desktop Songs table rows across rebuilds
library: Build the quality label patterns once
app: Reuse the orientation fade curve
app: Keep window metrics out of the app builder
desktop: Send the macOS menu bar only when it changes
player: Send the session queue only to Android, newest first
conversion: Speed up FLAC encoding and reuse SAF sources
preview: Resolve extension previews when they play
shell: Follow us on Telegram the keyboard inset without a dependency on back press
shell: Stop rebuilding the shell on every keyboard frame
library: Rebuild only the toolbar title when local collections flip it
mornye: Resolve the cover colour when the mini player changes track
material: Move the mini player wave on the 30 Hz decorative clock
mornye: Stop the mini player marquee after two passes on liquid glass
player: Hold decorative motion while the app draws no frames
material: Cache the full-screen cover blur at quarter resolution
player: Cap decorative playback motion at 30 Hz
mornye: Skip the backdrop pass for the extension overview glass
mornye: Fade full-bleed artwork without a shader mask
mornye: Skip the backdrop read on plain-page glass
pages: Rebuild only the toolbar title when it flips
mornye: Stop glass settings groups sampling the flat page
mornye: Draw settled lyric blurs from a cached image
mornye: Decode the details sheet cover at thumbnail size
library: Reuse the prepared page data across rebuilds
mornye: Keep position ticks and lyric control fades local
mornye: Share the bar read with resting side capsules
mornye: Compose standalone glass lenses into one backdrop read
mornye: Compute glass tint only for translucent surfaces
desktop: Summarize downloads in one pass for the toolbar ring
library: Skip the no-op rebuild after a scanned cover checks out
desktop: Sort the song table once per input and scope row hover
mornye: Shade the player from the cover source colour only
palette: Follow us on Telegram cover samples once and add a source colour path
mornye: Remember Cupertino icon lookups
navigation: Keep keyboard insets from hidden tabs
material: Stop flat wavy progress indicators from ticking
mornye: Reuse artist surface themes across page rebuilds
mornye: Rebuild layout slivers only when their layout value changes
startup: Overlap the SAF grant check with the install marker read
history: Extend lookup indexes when a download is prepended
mornye: Keep equal Mornye themes identical
theme: Rebuild the app theme only for theme settings
Refactoring
library: Keep the shadow check SQL in a leaf file
app: Name the app content builder
covers: Normalize statistics covers only where rows are read
link: Keep the sync protocol free of the cover store
link: Share the desktop cover reference
network: Follow us on Telegram network covers directly over the connection
covers: Show screen covers through the shared helper
covers: Follow us on Telegram every stored cover form through one helper
Import moved files directly and remove the re-export shims
repo: Build the store category chips from a list
Drop the unused LogBuffer.filter tag option
Drop the always-true AnimatedSelectionCheckbox visible flag
Fix MotionHeaderBanner to cover and top center
Drop the unused AppChoiceChip visualDensity
Drop AppTextField options every caller left at default
Drop showAppBottomSheet flags no caller sets
Make ClickableArtistName single-line with ellipsis
Push plain material pages through pushPage
pages: Drop the title flip rebuild opt-out from the header mixin
library: Share the selection bar toggle in the library folder
library: Build the album selection bars with LibraryTrackSelectionBar
settings: Resolve the library dialogs’ error fill in the dialog
settings: Build the cache rows from one helper
settings: Use the shared section slivers and confirm dialog
settings: Move library and lyrics pages to shared sheets and dialogs
dialogs: Resolve the error confirm color inside the dialog
playback: Share the library queue playback path
library: Derive unified item quality in one call
metadata: Share one lyrics fetch body
library: Move confirm dialogs to showAppConfirmDialog
player: Make the metadata title always ellipsize
Drop parameters every caller leaves at the default
settings: Build the plain-page glass group from MornyeGlassPanel
convert: Share the batch convert choice section
search: Loop the collection result sections
extensions: Share the feature row and priority link widgets
mornye: Drop the MornyeGlass default constructor
library: Share the collection selection bar toggle
library: Share the album and playlist header action row
settings: Move download, metadata and files pages to shared helpers
settings: Share confirm dialog, choice sheet and section helpers
download: Pass AppSettings to the output folder builders
ffmpeg: Call the FFmpeg modules directly
library: Build songs, singles and collection cells once
library: Remove the unreachable Mornye page chip row
library: Share the staged ingestion steps
library: Share queue store sort terms, paging and counts
player: Share the current queue index rule
mornye: Drop unused filter chip glass options
Use switch expressions in format and model mappers
bridge: Share channel invoke helpers in PlatformBridge
material: Share expressive press squish and disabled fill
history: Share schema column, backfill and single-row helpers
settings: Route setters through one commit helper
settings: Reuse the shared library quality label normalizer
Documentation
player: Point each position mirror at the code it copies
library: Fold the collections JSON export comment
Styling
settings: Keep the song.link regions as a const list
test: Format two tests after the repository rename
Testing
player: Make the position tick tests prove the change under load
covers: Cross-check the document slot and steady the marker test
playback: Expect the exclusive output wrapper on macOS
link: Accept a reset when an idle WebSocket client is dropped
search: Cover the wide result layouts and pin the phone rows
settings: Keep a page test for the choice sheets
settings: Pump the cache page and check its rows
settings: Compare the migrated dialogs and sheets with the old ones
player: Check the shared motion clock in now playing rows
download: Pin relative output folders for a settings matrix
mornye: Find lyric blur snapshots by render object type
library: Cover incremental upsert and source replacement
library: Pin the generated queue Library SQL
Dependencies
deps: Update Flutter, native and Rust dependencies
Chores
desktop: Remove beta release label
link: Drop imports the Link actions now export
Update AltStore source to v5.2.6 by @github-actions[bot]
link: Drop an unused import from the sync protocol
windows: Prepare verified SignPath release signing
desktop: Build macOS FFmpeg with Opus 1.6.1 and NASM 3.02
android: Update Gradle to 9.8.2 and android-junit5 to 2.0.2
flutter: Update packages and refresh the iOS pod lock
rust: Update toolchain, Tokio, scraper and lockfile dependencies
Bump version to 5.3.0 (166)
Remove unused searchProviders and a write-only track index
library: Drop the unread playlist id from the folder track tile
screens: Drop write-only private widget data fields
services: Drop write-only result and config fields
services: Remove unused service members and write-only fields
providers: Remove unused provider members
Remove unused widget and utility members
Remove unread extension manifest model fields
download: Remove test-only DownloadQueueNotifier.updateProgress
ffmpeg: Remove unused FFmpegProbe.isLosslessAudioCodec
lyrics: Move the active lyric reference into its test
library: Remove the test-only collections map export
backup: Remove test-only legacy envelope helpers
motion: Remove the test-only withMotionArtworkProxy wrapper
library: Remove test-only single-item collection mutators
history: Remove the unused streaming history restore
library: Remove unused collection JSON factories
library: Remove unused loadPlaylistTracks
Remove unused library database write wrappers
palette: Skip the unused sample copy and document the builder
mornye: Remove the glass warmup re-export
Remove unused history lookups and restore wrapper
Merge
Integrate reviewed Windows and extension fixes
Integrate validated Crowdin translations with local changes
New Contributors
@barakunshetan-design made their first contribution
@HDShinobi made their first contribution
This app has no advertisements
More Info:https://mornye.com https://github.com/mornyeapp/Mornye
Download Instructions:
armeabi-v7a:
Mirrors:
arm64-v8a:
Mirrors: