Skip to content

Releases: spotiflacapp/SpotiFLAC-Mobile

SpotiFLAC-Mobile v4.8.5

Choose a tag to compare

@github-actions github-actions released this 01 Aug 18:55

New Features

  • settings: Reveal nested search results
  • settings: Search nested options
  • metadata: Show current cover dimensions
  • metadata: Add embedded cover resize options
  • navigation: Add go to album actions
  • player: Polish actions and synced lyrics
  • settings: Polish search and navigation layout
  • settings: Add searchable settings index
  • collections: Unify selection-aware screens
  • l10n: Localize settings search
  • details: Add adaptive cover palettes
  • theme: Add shared design tokens
  • album: Batch download selected tracks
  • metadata: Choose extension for online autofill
  • library: Add quality label display modes
  • library: Highlight high-bitrate quality badges
  • library: Show a trailing fade on the filter chips row
  • library: Playlists filter view and configurable default view
  • player: Animate track changes and open queue with a swipe up
  • tutorial: Fit pages on short viewports and fix page indicator visibility
  • setup: Make language list scrollability obvious and center step content
  • tablet: Cap wide-layout margins at 80dp so content uses the screen
  • appearance: Manual toggle to force backdrop blur on lower device tiers
  • queue: Long-press menu with move up/down for queued items
  • metadata: Show average bitrate for lossless files in the track screen
  • library: Add missing-ISRC metadata filter
  • android: Home-screen download queue widget
  • metadata: Manual MusicBrainz lookup in the tag editor
  • player: Add repeat off/all/one modes
  • queue: Offer one-tap retry when connectivity returns
  • ux: Unify added-to-queue snackbars and add fetch retry
  • library: ISRC duplicate detection beyond FLAC with review sheet
  • track: Add Open on... platform links sheet
  • l10n: Merge Crowdin updates, enable Korean at 98%
  • library: M3U8 playlist import and export
  • library: M3U8 playlist import and export
  • player: Restore playback session after process death
  • queue: Add download-next action on queued items
  • extensions: Verify decentralized package integrity
  • audio: Use VHQ settings for SoXR resampling

Bug Fixes

  • ci: Align APK targets with supported ABIs
  • search: Expose go to album for sparse tracks
  • database: Make playback session migration idempotent
  • metadata: Keep header details legible in light theme
  • player: Refresh lyrics after automatic track changes
  • metadata: Preserve WAV and AIFF tags
  • analysis: Guard unsupported AC-4 codec
  • lyrics: Reject empty embedded payloads
  • metadata: Support extension custom search
  • analysis: Detect full-band spectral cutoff
  • ui: Refine track action spacing
  • ui: Align track play button hitboxes
  • player: Restore lyrics after cold start
  • session: Enforce provider retry modes
  • session: Block challenged session generations
  • session: Honor canonical gateway error contracts
  • session: Coordinate verification across parallel downloads
  • selection: Keep modal sheets above selection bar
  • player: Restore playback position reliably
  • download: Make picker drag dismissal natural
  • player: Preserve audio quality across track changes
  • a11y: Improve compact control readability
  • android: Stop forcing display mode at startup
  • download: Suffix only colliding quality variants
  • metadata: Fetch maximum cover for online autofill
  • metadata: Verify maximum cover candidates
  • storage: Recover from unwritable download folders
  • ui: Sanitize user-facing errors
  • analysis: Detect effective spectral cutoff
  • library: Retain history during active downloads
  • metadata: Dismiss autofill preview and surface feedback
  • album: Overlay selection bar above navbar
  • metadata: Align source picker with edit sheet
  • analysis: Isolate metrics from active downloads
  • download: Always alert for verification pauses
  • download: Reject mismatched provider tracks
  • download: Honor explicitly selected provider
  • extensions: Serialize verification callbacks
  • library: Retain cached rows across refresh
  • library: Backfill local audio bitrates
  • library: Keep rows visible during refresh
  • library: Persist lossless bitrate metadata
  • download: Swap local track variant actions
  • home: Keep search visible during provider changes
  • library: Retain records when deletion fails
  • download: Complete quality variants reliably
  • audio: Wait for complete analyzer metrics
  • library: Keep track count readable next to filter actions
  • store: Center add-repository state and keep submit button above keyboard
  • download: Restore fast SQL-only duplicate check so huge playlists queue again
  • queue: Keep cancelled downloads retryable across every cancel path and app restarts
  • queue: Give completion-bridge cells swipe navigation into the library list
  • extensions: Anchor URL handler patterns to the host
  • extensions: Enforce minAppVersion and requiredRuntimeFeatures on load
  • extensions: Isolate invalid registry checksums
  • reenrich: Preserve release identity in batch actions
  • verification: Recover signed-session bootstrap failures
  • reenrich: Allow correcting stale release metadata
  • download: Avoid unsafe automatic range resume
  • config: Refresh announcements and remote content
  • ci: Download pinned Gradle for native tests
  • ci: Install Android 37 platform package

Performance

  • metadata: Avoid SAF copies during quality probes
  • android: Skip unused download widget work
  • ui: Scope scan rebuilds, aspect-bound MediaQuery, lazy duplicate list
  • history: Coalesce index bumps and batch per-row exists lookups
  • metadata: Cache MusicBrainz ISRC lookups in the finalize path
  • go: Cut redundant signed-session writes, progress-callback churn, tombstone growth
  • assets: Instance GoogleSansFlex to the wght axis only

Refactoring

  • ui: Standardize error and empty states
  • extensions: Share extension rows
  • settings: Unify settings components
  • selection: Share bottom bar behavior
  • library: Unify track cards
  • ui: Standardize modal sheets
  • ui: Unify sliver page headers
  • metadata: Split cover cache, display helpers, and options menu into part files
  • extensions: Split manifest models and provider-priority logic into part files
  • library: Split row models and queue union SQL into part files
  • analysis: Split models, info card, and spectrogram into part files
  • android: Split replaygain journal, snapshots, and network policy out of DownloadService
  • android: Split media, ffmpeg, and SAF publish helpers out of NativeDownloadFinalizer
  • go: Split per-format scanners and incremental scan out of library_scan.go
  • go: Split result/overlay helpers and output builders out of extension_fallback.go
  • go: Split deezer models, cache upkeep, and browse endpoints out of deezer.go
  • go: Split lyrics provider config, LRC codec, and search matching out of lyrics.go
  • queue: Fold duplicated final-embed blocks into one helper
  • queue: Decompose single-item god-method into _DownloadRun pipeline class
  • queue: Move single-item download pipeline into a part file
  • android: Split SAF scan and URI IO helpers out of MainActivity
  • artist: Split section builders and dialogs into a part file
  • go: Split package validation and VM lifecycle out of extension_manager.go
  • history: Split models and startup maintenance into part files
  • home: Split explore, recent, import, and search-results into part files
  • queue: Split progress, verification, and connectivity into part files
  • go: Split Ogg parsing and cover-art extraction out of audio_metadata.go
  • go: Split M4A/MP4 tagging out of metadata.go
  • Consolidate lyrics builders, cancel registries, and priority plumbing
  • go: Consolidate duplicated track maps, selectors, and small helpers
  • dart: Consolidate duplicated lookup, filename, and search-provider helpers
  • ffmpeg: Remove dead conversion cluster and speculative decryption fields
  • library: Drop unwired DB pagination providers
  • Remove orphaned bridge, database, and queue helpers
  • bridge: Remove dead cross-layer platform bridge methods
  • ios: Isolate and test extension callbacks
  • android: Extract native finalization policies
  • dart: Extract queue search and media policies

Documentation

  • release: Add 4.8.5 changelog
  • extensions: Document the .sflx package suffix
  • extensions: Document file download recovery options
  • extensions: Add current development guide

Styling

  • settings: Restore connected group layout
  • dart: Apply repository formatting
  • go: Apply Go 1.26 formatting

Testing

  • ui: Cover search and player action consistency
  • ui: Cover shared design system contracts
  • go: Close output handle before cleanup

Dependencies

  • deps: Update Flutter and Go dependencies
  • deps: Update FFmpeg and notifications

Chores

  • Update AltStore source to v4.8.0 by @github-actions[bot]
  • release: Bump version to 4.8.5
  • repo: Improve contributor experience
  • release: Bump version to 4.8.1
  • analysis: Enable unreachable_from_main lint
  • about: Credit blackgold8282 (Korean) and BrandQc (French) as translators
  • altstore: Describe extension-based providers instead of Amazon

Full Changelog: v4.8.0...v4.8.5


Downloads

Android

  • arm64: SpotiFLAC-v4.8.5-arm64.apk (recommended for modern devices)
  • arm32: SpotiFLAC-v4.8.5-arm32.apk (older devices)

iOS

  • iOS: SpotiFLAC-v4.8.5-ios-unsigned.ipa (sideload required)

Installation

...

Read more

SpotiFLAC-Mobile v4.8.0

Choose a tag to compare

@github-actions github-actions released this 25 Jul 03:34

New Features

  • ui: Smooth download progress updates
  • download: Preserve quality variants
  • convert: Optionally retain original files
  • convert: Support same-format lossless re-encoding
  • ui: Shimmer skeletons for the home feed artist/album sections
  • player: ReplayGain/R128 volume normalization for the built-in player
  • net: DoH fallback, uTLS pool flush on cleanup, retry hardening
  • ui: Crossfade the app content on orientation and rail-breakpoint changes
  • settings: Toggle to disable Hero animations
  • tablet: Clamp remaining screens - settings, queue lists, wizard
  • player: Swipe the mini player away to stop playback
  • ui: Surface the audio-analysis cache in cache management
  • tablet: Navigation rail, landscape now-playing, clamped track lists
  • tablet: Clamp dialogs and sheets, adaptive selection-card columns
  • ui: Real headers on extension loading screens so hero covers fly on open
  • metadata: Album-style header with centered square cover
  • player: Fade the sheet in place on close, letting only the cover travel
  • ui: Crossfade skeleton into content on extension detail screens
  • ui: Shared-element hero covers from search and recents to detail screens
  • player: Expand transition from mini player with drag-to-dismiss
  • ui: Fluid bouncing scroll physics on capable devices
  • android: Request highest display refresh rate at current resolution
  • download: Resume interrupted downloads via Range/If-Range
  • update: Force update when 3+ stable releases behind
  • artist: Shimmer skeleton for album and popular-track cover placeholders
  • ui: Add shared widgets, utils, and models for deduplicated screens
  • metadata: Route MP3, Ogg, and M4A edits to the native writers
  • metadata: Add native Ogg/Opus vorbis comment editor
  • metadata: Add native M4A ilst tag editor
  • metadata: Add native MP3 ID3v2 tag editor
  • ios: Run verification and OAuth through ASWebAuthenticationSession
  • downloads: Support up to 3 concurrent downloads
  • downloads: Detect lost SAF grant and offer folder re-selection
  • metadata: Surface explicit content flag with [E] badge
  • extensions: Complete signed-session grants from help dialog

Bug Fixes

  • navigation: Open download queue from snackbar actions
  • extensions: Preserve explicit track metadata
  • lyrics: Reject mismatched search results
  • native-worker: Harden background queue handling
  • analysis: Render full-track spectrograms
  • library: Persist records before download completion
  • library: Preserve downloaded file records
  • notifications: Restore verification alert sound
  • android: Sanitize restored installation state
  • queue: Clarify and coalesce verification progress
  • download: Accelerate verified extension resumes
  • download: Persist and reconcile history reliably
  • convert: Simplify output names and harden writes
  • metadata: Resolve audio format and local artwork
  • queue: Bridge completed downloads into library
  • ui: Honor disabled hero animations
  • ui: Restore plain loading skeleton on extension album screen
  • logging: Keep cursors valid after rollover
  • extensions: Bound file reads
  • extensions: Bound cookie runtime state
  • download: Name variants by measured quality
  • queue: Open completed batch track metadata
  • reenrich: Always clean temporary artifacts
  • player: Prevent stale playback and clean SAF temps
  • extensions: Harden package and runtime lifecycle
  • extensions: Surface swallowed signed-session verification in provider fallback
  • metadata: Send Accept-Language on Deezer requests so names follow the app language
  • download: Skip AC-4 repair for non-MP4 decrypt output
  • ui: Fetch covers via the Go backend instead of raw HttpClient
  • go: Build with Go 1.26.5 for aligned cgo frames, safe on arm32
  • shell: Rail overflow on short viewports and tab reset on rotation
  • player: Don't auto-resume after interruption while backgrounded
  • reenrich: Keep release identity when the matched track is from another album
  • extensions: Remove extension data dir on uninstall
  • ui: Match loading-header placeholder heights to the loaded rows
  • ui: Hero continuity for motion (Apple Music) headers
  • ui: Defer loaded-screen swap until the push transition settles
  • playlists: Keep imported playlist track order (#482)
  • player: Pause motion header video when its screen is hidden
  • player: Dissolve the sheet while it slides down on close
  • artist: Drop blurBackground stretch mode on the header
  • player: Fade Now Playing content with the expand transition
  • network: Harden audit findings in transport, uTLS pool, and cover cache
  • queue: Restore pre-refactor guarantees found by commit audit
  • metadata: Shift stco/co64 chunk offsets when the ilst resizes
  • finalizer: Stage conversion outputs and sync SAF streams
  • download: Fsync staged downloads before the promote rename
  • metadata: Write FLAC, M4A, and AC-4 tags atomically with fsync
  • metadata: Stop the endless FLAC-write failures on misnamed files
  • queue: Keep create-playlist label at natural size
  • queue: Prevent header row overflow on narrow screens
  • android: Stop double-destroying the shared audio_service engine
  • renovate: Target main instead of nonexistent dev branch
  • native-worker: Keep batches and retries intact across seam races
  • downloads: Stage direct-mode outputs and serialize same-path writes
  • saf: Stage all SAF downloads, serialize same-name writes, safe replace
  • native-worker: Recover from dead runs and make queue replacement safe
  • native-worker: Never delete a published download over bookkeeping failures
  • extensions: Serialize storage/credential/salt file writes across runtimes
  • queue: Keep just-completed tracks pinned while the batch is running
  • downloads: Flush queue persistence when app is backgrounded
  • downloads: Defer verification challenge until app is foregrounded
  • extensions: Expire stale pending auth challenges
  • metadata: Close FLAC file handles after parsing
  • ios: Create security-scoped bookmark inside native folder picker session
  • store: Harden extension repo registry handling
  • download: Suffix batch filenames with track number when needed
  • ui: Use State's context instead of stale parameter in CSV import (#460) (#460) by @A831ARD0

Performance

  • go: Add runtime metrics and benchmarks
  • dedupe: Batch isrc lookups under one lock
  • library: Scan flac and m4a in one pass
  • extensions: Invoke goja providers directly
  • memory: Drop disposable caches on pressure
  • cache: Defer cover cache maintenance
  • queue: Persist and index incremental updates
  • playback: Batch local playlist resolution
  • shell: Gate backdrop blur by device capability
  • startup: Bootstrap persisted app state
  • library: Trim startup lookup index
  • library: Streamline search and grouped counts
  • player: Isolate high-frequency playback updates
  • library: Lazy-load collections and dispose queries
  • player: Narrow now-playing queue sheet to shuffle-mode selector
  • embed: Native-first tag writes and overlapped fetches in finalization
  • ui: Skip the shell backdrop blur on low-end devices
  • db: Enable incremental auto-vacuum so cleared data shrinks the file
  • android: Sweep stale cache files, relax scan poll, debounce worker snapshots
  • disk: Byte-cap the cover disk cache with an init sweep
  • net: Cache update-check and remote-config fetches with TTL and ETag
  • net: Fetch embed covers once per release instead of per track
  • analysis: Stream PCM from disk instead of buffering the whole track
  • images: Decode completion-bridge cover precache at cell size
  • scan: Stream SAF library scan results to a spill file
  • memory: Release Go heap and decoded image caches on OS memory pressure
  • lyrics: Bound the in-memory lyrics cache
  • extensions: Reuse isolated goja download runtimes via per-extension pool
  • ogg: Stream tag rewrites instead of buffering every page
  • m4a: Stream tag rewrites instead of buffering the whole file
  • Hoist per-call regex compiles to package level
  • network: Enable gzip on the metadata transport
  • tls: Enable session resumption on the stdlib transports
  • network: Mobile stability and data-usage fixes from network audit
  • native-worker: Stop shipping the full item payload on every poll
  • dedupe: Make the ISRC index incremental, cover-free, and batch-stable

Refactoring

  • library-scan: Reuse applyAudioMetadataToScan for M4A/MP3/APE
  • settings: Share the provider-priority reorder page
  • providers: Remove dead lookup/history APIs and dedup provider resolution
  • search: Remove unreachable artist/album/playlist result path
  • reenrich: Share the FFmpeg re-enrich apply flow
  • backend: Drop dead exports/availability path and dedup Go tag writers
  • library: Drop dead pre-pagination filter pipeline in queue tab
  • Rename extension store bridge ABI to repo across all layers
  • dart: Rename store provider and screen folder to repo
  • go: Rename extension store files and internals to repo
  • queue: Split download_queue_provider into concern part files
  • queue: Extract shared payload, history, and polling helpers
  • Unify extension call skeleton and download finalization paths
  • screens: Migrate remaining screens to shared header and selection components
  • screens: Share album-screen scaffolding and track flows
  • ui: Consolidate duplicated sheets, rows, and cover widgets
  • Extract shared helpers for repeated low-level patterns
  • Remove dead code across Dart and Go l...
Read more

SpotiFLAC-Mobile v4.7.1

Choose a tag to compare

@github-actions github-actions released this 01 Jul 18:42

New Features

  • extensions: Embed full metadata and cover after extension downloads
  • audio: Add dither and resampler options for lossless conversion
  • extensions: Manual verification help when browser launch fails
  • settings: Add extension verification browser mode preference

Bug Fixes

  • convert: Make convert bottom sheets draggable and scroll-controlled
  • extensions: Default verification browser to in-app first
  • download: Hand off native worker verification to interactive queue
  • ac4: Reject truncated AC-4 sample entries safely
  • extensions: Bootstrap and clear pending signed-session auth

Chores

L10n

  • Add extension verification and lossless processing strings

Full Changelog: v4.7.0...v4.7.1


Downloads

Android

  • arm64: SpotiFLAC-v4.7.1-arm64.apk (recommended for modern devices)
  • arm32: SpotiFLAC-v4.7.1-arm32.apk (older devices)

iOS

  • iOS: SpotiFLAC-v4.7.1-ios-unsigned.ipa (sideload required)

Installation

Android: Enable "Install from unknown sources" and install the APK
iOS: Use AltStore, Sideloadly, or similar tools to sideload the IPA

SpotiFLAC-Mobile v4.7.0

Choose a tag to compare

@github-actions github-actions released this 30 Jun 20:59

New Features

  • extension-repo: Preserve package suffix from download URL
  • extensions: Route Deezer metadata through enabled extension
  • ui: Stabilize album and playlist header layouts
  • extension-health: Lengthen cache TTL and honor per-check minimum
  • Apply lossless conversion quality cap to album screen batch convert
  • Reorderable up-next queue + playback stability
  • Cap bit depth/sample rate on lossless conversion + WAV/AIFF
  • ui: Hide audio quality badge on downloading queue items
  • ui: Redesign local/downloaded album and folder screen headers
  • Playback queue, preview exclusivity, player bug fixes
  • Add new playback experience and media integration
  • go: Verification early-abort in fallback + album metadata from tracks
  • banner: HLS motion-artwork header banners and audio-quality badges
  • preview: Play short track preview snippets in lists
  • extension-health: Cache results, force refresh, treat lookup errors as transient
  • ui: Polish album folder structure picker bottom sheet
  • ui: Add Beta badge to Backup & Restore settings entry
  • network: Add opt-in allow local/private network setting
  • backup: Include installed extensions and settings in backup/restore
  • settings: Add backup and restore for settings, history and library
  • library: Add rename action to playlist folder screen
  • download: Add {playlist_position} filename placeholder
  • Handle extension verification and retry-after on download
  • Extension runtime and provider improvements
  • download: AC-4 passthrough support
  • replaygain: Add Opus R128 gain tags
  • queue: Tap a failed download to view its error details

Bug Fixes

  • download: Track verification retries per service
  • extensions: Scope signed session files by endpoint and app context
  • lyrics: Sync provider priority to backend on save
  • lyrics: Prefer workers.dev LyricsPlus mirror first
  • banner: Allow motion artwork video to mix with other audio
  • queue: Resolve local album tracks by album_key
  • lyrics: Sync provider settings to backend before fetch
  • go: Widen lyrics priority grace to 5s so priority provider wins
  • Preview player lifecycle and minor safety cleanups
  • go: Classify transient timeout/5xx in extension health as unknown (grey)
  • ui: Prevent home search skeleton row from overflowing on narrow screens
  • lyrics: Improve provider fallback and health handling
  • deps: Keep file_picker on 12.x beta to stay win32 6 compatible
  • download: Detect actual output format from audio codec on fallback
  • Navigate to correct artist when tapping artist name
  • metadata: Cap oversized cover art and support QuickTime/MP4 tags
  • android: Disable Impeller on Sony audio players and Vivante GPUs
  • metadata: Write M4A ISRC/label natively and read all edited fields from file
  • download: Honor requested quality when fallback provider recognizes it

Performance

  • Optimize queue/library pagination, counts, scan, and extension runtime

Refactoring

  • Hoist lossless labels before async convert paths
  • track-provider: Rework verification retry, parse preview/header video
  • ui: Make backup/restore page consistent with other settings

Dependencies

  • deps: Update Flutter and Go dependencies to latest stable

Chores

  • player: Log internal pause and audio interruption events
  • Bump version to 4.7.0+136
  • Clean up redundant comments across Go backend and Flutter sources
  • Move website to spotiflacapp/Website repo
  • Update AltStore source to v4.6.0 by @github-actions[bot]

Build

  • android: Bump Java to 25 and targetSdk to 37
  • android: Bump compileSdk to 37 and pin file_picker to beta.5

L10n

  • Localize settings, store, and metadata UI strings
  • Localize audio conversion labels and confirmations
  • Localize library settings and announcements
  • Add localization keys for hardcoded UI strings

Full Changelog: v4.6.0...v4.7.0


Downloads

Android

  • arm64: SpotiFLAC-v4.7.0-arm64.apk (recommended for modern devices)
  • arm32: SpotiFLAC-v4.7.0-arm32.apk (older devices)

iOS

  • iOS: SpotiFLAC-v4.7.0-ios-unsigned.ipa (sideload required)

Installation

Android: Enable "Install from unknown sources" and install the APK
iOS: Use AltStore, Sideloadly, or similar tools to sideload the IPA

SpotiFLAC v4.6.0

Choose a tag to compare

@github-actions github-actions released this 13 Jun 19:43

New Features

  • playlist: Blurred backdrop with full cover in playlist header
  • ui: Add bottom inset so scrollable content clears the transparent navbar
  • library: Show active downloads inside the library grid
  • ui: Reduce bottom navbar height
  • ui: Frosted translucent bottom navbar
  • lyrics: Show actual lyrics source in metadata
  • audio: Add WAV and AIFF support + settings-style metadata menu
  • lyrics,replaygain: Add LyricsPlus provider and ReplayGain batch scanning
  • l10n: Enable French and German locales

Bug Fixes

  • metadata: Use high-res cover in track metadata header
  • download: Honor selected provider when it equals the track source
  • download: Request fallback provider's own highest quality
  • downloads/extensions: IOS background task, serialize extension mutations, safer batch convert sheet
  • ui: Center modals on large screens, modernize edit-metadata + convert sheets, themed badges, fix artist skeleton and format-editor crash
  • l10n: Remove redundant ICU plural categories causing gen-l10n warnings
  • android: Override predictive-back page transition
  • queue: Simplify queue header and rate-limit indicator layout

Refactoring

  • Generalize Tidal-specific naming to legacy/DASH terminology
  • download: Remove concurrent download option

Dependencies

  • deps: Update Flutter and Go dependencies

Chores

  • ios: Strip CRLF from ffmpeg plugin scripts before pod install
  • Bump version to 4.6.0
  • Trim redundant comments
  • about: Credit Mickael81 as French translator
  • Update AltStore source to v4.5.6 by @github-actions[bot]

fix

  • l10n: Correct crowdin language mapping

Full Changelog: v4.5.6...v4.6.0


Downloads

Android

  • arm64: SpotiFLAC-v4.6.0-arm64.apk (recommended for modern devices)
  • arm32: SpotiFLAC-v4.6.0-arm32.apk (older devices)

iOS

  • iOS: SpotiFLAC-v4.6.0-ios-unsigned.ipa (sideload required)

Installation

Android: Enable "Install from unknown sources" and install the APK
iOS: Use AltStore, Sideloadly, or similar tools to sideload the IPA

arm64 arm32 iOS

SpotiFLAC v4.5.6

Choose a tag to compare

@github-actions github-actions released this 01 Jun 18:23

New Features

  • Polish search empty state and share caching
  • Rebuild cross-extension sharing and queue controls

Bug Fixes

  • Align ios deployment target for file picker
  • Prevent queue header action clipping
  • Align cross-service sharing and fallback routing
  • Harden download errors and re-enrich sidecars
  • Resolve album-only autofill and placeholder re-enrich regressions
  • Stricter metadata matching, respect embedLyrics setting, improve Apple Music lyrics

Chores

Full Changelog: v4.5.5...v4.5.6


Downloads

Android

  • arm64: SpotiFLAC-v4.5.6-arm64.apk (recommended for modern devices)
  • arm32: SpotiFLAC-v4.5.6-arm32.apk (older devices)

iOS

  • iOS: SpotiFLAC-v4.5.6-ios-unsigned.ipa (sideload required)

Installation

Android: Enable "Install from unknown sources" and install the APK
iOS: Use AltStore, Sideloadly, or similar tools to sideload the IPA

arm64 arm32 iOS

SpotiFLAC v4.5.5

Choose a tag to compare

@github-actions github-actions released this 14 May 23:25

New Features

  • Expose audio codec in download result and skip lossy-to-lossless conversion
  • Add 5 new lyrics providers
  • Enhanced audio analysis with loudness, clipping, and spectral cutoff
  • Audio analysis rescan and AAC conversion support
  • Add AAC lossy target and toggle for Apple Music eLRC word sync
  • Show remote-config launch announcement on app start
  • Persist codec format and bitrate in download history
  • Detect FLAC/ALAC/EAC3/AC3/AC4 codecs inside MP4 containers
  • Allow re-running audio quality analysis after cached result
  • Add library scroll-to-top and scroll-to-bottom quick buttons

Bug Fixes

  • Native FLAC handling and extension API optimizations
  • MP3 lyrics embedding via ID3v2.3 USLT frame
  • Gate M4A to FLAC conversion on a codec probe in every branch
  • Force native FLAC muxer when decrypting to .flac output
  • Report zero bit depth for non-ALAC M4A containers
  • Probe codec to avoid fake FLAC upscale from lossy sources
  • native-worker: Preserve requested output container in finalizer
  • saf: Use extension-agnostic .partial staged filename

Refactoring

  • Extract download progress label formatting
  • Use audio_conversion_utils in downloaded_album_screen

Chores

  • Bump version to 4.5.5 (build 132)
  • Housekeeping cleanup and code deduplication

Full Changelog: v4.5.1...v4.5.5


Downloads

Android

  • arm64: SpotiFLAC-v4.5.5-arm64.apk (recommended for modern devices)
  • arm32: SpotiFLAC-v4.5.5-arm32.apk (older devices)

iOS

  • iOS: SpotiFLAC-v4.5.5-ios-unsigned.ipa (sideload required)

Installation

Android: Enable "Install from unknown sources" and install the APK
iOS: Use AltStore, Sideloadly, or similar tools to sideload the IPA

arm64 arm32 iOS

SpotiFLAC v4.5.1

Choose a tag to compare

@github-actions github-actions released this 07 May 18:22

Bug Fixes

  • Avoid native worker binder payload limit
  • Show missing extension state for returning users
  • Preserve selected metadata and update credits
  • Declare dataSync type when starting foreground download service
  • Restore default quality settings
  • Stabilize library search and bump version
  • Prevent settings editor white screens

Documentation

  • Update credits and trendshift badge

Chores

Full Changelog: v4.5.0...v4.5.1


Downloads

Android

  • arm64: SpotiFLAC-v4.5.1-arm64.apk (recommended for modern devices)
  • arm32: SpotiFLAC-v4.5.1-arm32.apk (older devices)

iOS

  • iOS: SpotiFLAC-v4.5.1-ios-unsigned.ipa (sideload required)

Installation

Android: Enable "Install from unknown sources" and install the APK
iOS: Use AltStore, Sideloadly, or similar tools to sideload the IPA

arm64 arm32 iOS

SpotiFLAC v4.5.0

Choose a tag to compare

@github-actions github-actions released this 06 May 15:40

New Features

  • Improve library grid, image loading, and metadata filters
  • Add experimental Android native download worker
  • Show extension service health
  • Add deduplicateDownloads setting & fix build errors by @Amonoman
  • settings: Reorganize settings into focused pages by @Amonoman
  • Add Favorite Artists collection
  • Retire built-in download providers, add isolated extension runtimes, Google Sans Flex font, and monochrome icon support
  • Improve extension metadata UI
  • Expose audio duration in metadata API and fix home empty-state race
  • Add generic extension provider resolution, progress phases, and instrumental lyrics heuristic
  • Remove Tidal built-in provider, add extension download dedup/ISRC/Lyrics APIs, and expand l10n/a11y
  • Add skip_fallback capability for extension availability results
  • Propagate download cancellation through entire pipeline, add MusicBrainz album artist fallback, and allow disabling home feed

Bug Fixes

  • Guard security scoped bookmark options on iOS
  • Preserve source cover metadata embeds
  • Show lossy audio bitrate in quality labels
  • Distinguish preparing from downloading in native worker progress
  • Sync NativeDownloadFinalizer history schema to v8
  • Truncate SAF filenames and directory segments safely at UTF-8 boundaries
  • Improve native worker metadata embedding and notification progress
  • Sync download progress notification states
  • Persist probed audio duration
  • Constrain artist album covers
  • Avoid disk resizing cover cache by default
  • Clean up settings merge regressions
  • Map missing Crowdin locale variants
  • ios: Use security-scoped bookmarks for download directory persistence
  • Fallback unsupported locales to English

Performance

  • Unify queue tab with DB-backed pagination and cross-database queries
  • Optimize native worker snapshot writes with delta mode
  • Reduce library and queue update overhead
  • Reduce bridge and UI churn
  • Improve download queue resilience

Refactoring

  • Migrate local library from in-memory list to database-backed pagination
  • Remove built-in provider registry in favor of extensions
  • settings: Split download/options into focused pages by @Amonoman
  • Split large screen files into part files and DRY platform bridge
  • Rename skipBuiltInFallback to stopProviderFallback, unify service/search provider grid layout, and retire useExtensionProviders toggle
  • Remove Qobuz built-in provider and delete qobuz.go
  • Remove Qobuz from built-in provider registry, add retired provider detection
  • Abstract built-in providers into generic registry and unify platform bridge API

Testing

  • Add comprehensive Go backend and Dart model test suites

Chores

  • Remove dead code, fix error casing, and add lint rules
  • Remove redundant comments and boilerplate across codebase
  • Update default lyrics providers and about links
  • Update app dependency versions
  • Enable Ukrainian locale on main
  • Import l10n updates from l10n_dev into main
  • Update AltStore source to v4.3.1 by @github-actions[bot]

I18n

  • Add missing optionsDefaultSearchTabAlbums/Tracks keys to all locales by @Amonoman
  • Sync missing EN strings to all locales & fix DE consistency by @Amonoman

Revert

Full Changelog: v4.3.1...v4.5.0


Downloads

Android

  • arm64: SpotiFLAC-v4.5.0-arm64.apk (recommended for modern devices)
  • arm32: SpotiFLAC-v4.5.0-arm32.apk (older devices)

iOS

  • iOS: SpotiFLAC-v4.5.0-ios-unsigned.ipa (sideload required)

Installation

Android: Enable "Install from unknown sources" and install the APK
iOS: Use AltStore, Sideloadly, or similar tools to sideload the IPA

arm64 arm32 iOS

SpotiFLAC v4.3.1

Choose a tag to compare

@github-actions github-actions released this 14 Apr 14:21

New Features

  • Carry extension download metadata through host pipeline and avoid FLAC-only genre/label pre-embed on non-FLAC files
  • Improve Tidal metadata (copyright, album artist), remove Qobuz metadata search fallback, fix DATE/YAR tag sync
  • Add preserveNativeOutputExtensions capability for extensions
  • Convert M4A to FLAC when extension doesn't prefer native M4A output

Bug Fixes

  • Handle .mp4 as alias for .m4a throughout download pipeline
  • Show filter button in all/singles modes when tracks are empty but filters are active
  • Ensure non-null search provider fallback and update default labels to Tidal
  • Reset OutputExt on extension→extension fallback too
  • Reset OutputExt on extension→built-in fallback
  • Normalize extension codec for built-in fallback, remove dead Tidal ISRC
  • Respect user provider choice over source extension priority

Chores

  • Bump version to 4.3.1+126
  • Reduce Gradle memory, add extension network timeout, fix tr locale

Full Changelog: v4.3.0...v4.3.1


Downloads

Android

  • arm64: SpotiFLAC-v4.3.1-arm64.apk (recommended for modern devices)
  • arm32: SpotiFLAC-v4.3.1-arm32.apk (older devices)

iOS

  • iOS: SpotiFLAC-v4.3.1-ios-unsigned.ipa (sideload required)

Installation

Android: Enable "Install from unknown sources" and install the APK
iOS: Use AltStore, Sideloadly, or similar tools to sideload the IPA

arm64 arm32 iOS