What's New
Extension System (Major Feature)
SpotiFLAC 3.0 introduces a powerful extension system that allows third-party integrations for metadata, downloads, and more.
Extension Store
- Browse and install extensions directly from the app
- New "Store" tab in bottom navigation
- Browse by category: Metadata, Download, Utility, Lyrics, Integration
- Search extensions by name, description, or tags
- One-tap install, update, and uninstall
- Offline cache for browsing without internet
Spotify Web Extension
- Available in Extension Store - install and enable in Settings > Extensions
- Metadata provider using Spotify's internal web player API
- Download tracks from Daily Mix, Discover Weekly, and other personalized playlists
- Useful when official Spotify API is rate-limited or unavailable
Extension Capabilities
- Custom Search Providers
- Custom URL Handlers
- Custom Thumbnail Ratios: Square (1:1), Wide (16:9), Portrait (2:3)
- Post-Processing Hooks: Extensions can process downloaded files
- Quality Options: Extensions can define custom quality settings
Extension APIs
- Full HTTP support: GET, POST, PUT, DELETE, PATCH
- Persistent cookie jar per extension
- Browser-like polyfills:
fetch(),atob()/btoa(),TextEncoder/TextDecoder,URL/URLSearchParams - Storage API for persistent data
- File API for file operations
- HMAC-SHA1 utility for cryptographic operations
Security
- Sandboxed JavaScript runtime (goja)
- Permission-based access control
- Network domain whitelisting
- Improved credential encryption with per-installation random salt
Added
-
Album Folder Structure Setting: Option to remove artist folder from album path
Artist / Album(default):Albums/Artist Name/Album Name/Album Only:Albums/Album Name/
-
Separate Singles Folder: Organize downloads into Albums/ and Singles/ folders
- Based on
album_typefrom Spotify/Deezer metadata - Toggle in Settings > Download > Separate Singles Folder
- Based on
-
Parallel API Calls: Download URL fetching now uses parallel requests
- Tidal: All 8 APIs requested simultaneously, first success wins
- Qobuz: Both APIs requested simultaneously, first success wins
- Significantly reduces download URL fetch time
UI/UX Improvements
-
Swipeable History Filters: History tab now supports swipe gestures between All, Albums, and Singles filters
-
Swipe left/right to switch between filter tabs
-
Filter chips sync with swipe position
-
Smooth edge-to-edge transition: swipe past Singles to go to Store, swipe past All to go to Home
-
Natural gesture feel - drag connects to parent navigation
-
Improved File Open Intent: Play button in History now correctly opens music players only
-
Added proper MIME type (
audio/flac,audio/mpeg, etc.) when opening downloaded files -
Prevents system from showing unrelated apps in the "Open with" dialog
-
Fixed
-
Fixed Tab Edge Overscroll: Home and Settings tabs now stop at edges instead of bouncing into empty space
-
Fixed Extension Duplicate Load Error: Extension loading now silently skips already-loaded extensions instead of throwing error
-
Fixed Settings Item Highlight on Swipe: Settings items no longer highlight when swiping at page edge
-
Fixed Keyboard Appearing on Tab Switch: Keyboard now auto-dismisses when swiping between tabs
-
Removed Search Source Badges: Removed "Free" and "API Key" labels from Deezer/Spotify selector in Options
-
Back Gesture Freeze on Android 13+: Fixed app freeze when using back gesture in settings
- Added
PopScopewithcanPop: trueto all settings pages - Changed navigation to use
PageRouteBuilderwith proper slide transition
- Added
-
Bottom Overflow in Folder Organization Dialog: Fixed overflow in portrait and landscape mode
- Made dialog scrollable with max height constraint
-
Japanese Artist Name Order: Fixed artist mismatch for Japanese names
- "Sawano Hiroyuki" vs "Hiroyuki Sawano" now correctly matches
-
Multi-Artist Matching: Fixed artist mismatch for collaboration tracks
- "RADWIMPS feat. Toko Miura" now matches when service only shows "Toko Miura"
-
Max Resolution Cover Download: Fixed cover not upgrading to max resolution on mobile
- Mobile now correctly upgrades 300x300 → 640x640 → max resolution (~2000x2000)
-
EXISTS: Prefix in File Path: Fixed "File not found" error in metadata screen
- Duplicate detection prefix now stripped before saving to history
-
Extension Search Result Parsing: Fixed "cannot unmarshal array" error
- Go backend now handles both array and object formats from extensions
-
Store Tab Unmount Crash: Fixed "Using ref when widget is unmounted" error
-
Duplicate History Entries: Fixed duplicate entries when re-downloading same track
- Detects existing entries by Spotify ID, Deezer ID, or ISRC
-
Permission Error Message: Fixed download showing "Song not found" when actually permission error
- Now shows proper message: "Cannot write to folder, check storage permission"
-
Android 13+ Storage Permission: Fixed storage permission not working on Android 13+
- Now requests both
MANAGE_EXTERNAL_STORAGEandREAD_MEDIA_AUDIO
- Now requests both
Changed
- Extension Manifest: New
filepermission required for file operations"permissions": { "network": ["api.example.com"], "storage": true, "file": true }
Technical
- Go backend: Simplified parallel download result handling in Tidal/Qobuz
- Go backend: Removed unused functions and fixed bit shifting warnings
- Release workflow: Fixed duplicate
---separator in release notes
Downloads
Android
- arm64:
SpotiFLAC-v3.0.0-arm64.apk(recommended for modern devices) - arm32:
SpotiFLAC-v3.0.0-arm32.apk(older devices)
iOS
- iOS:
SpotiFLAC-v3.0.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