Alex 3fc371b8c4 Extension OAuth + store: flatten action JSON, open auth URLs, spotiflac:// callback
Third-party extensions (e.g. Spotify PKCE addons) need three things the current app does not fully provide:

Extension button results – The Go runtime returned { success, result: { message, open_auth_url, … } } while Flutter read message / open_auth_url only on the outer map, so OAuth buttons appeared to do nothing. InvokeAction now merges the extension’s return object onto the top-level JSON (arrays/non-objects still use result).

Flutter – extension_detail_page: unwrap nested result for compatibility, merge setting_updates into saved extension settings (for copyable OAuth URLs), and launchUrl when open_auth_url is set.

Mobile OAuth return – spotiflac://callback?code=…&state=<extension_id> was not handled on Android (manifest + MainActivity) or iOS (AppDelegate open URL + cold-start launchOptions). This wires SetExtensionAuthCodeByID + invokeExtensionAction(..., "completeSpotifyLogin") so PKCE extensions can finish login after the browser redirect.

Extension store HTTP – Add Cache-Control: no-cache on registry and extension package downloads to reduce stale CDN/proxy responses.

Testing: Install a metadata extension that uses PKCE; tap Connect; confirm browser opens, return via spotiflac://callback, and tokens complete without pasting the code manually.

extension InvokeAction JSON was nested under result while the Flutter settings UI only read the top level, so OAuth-related buttons never showed messages or opened the browser. This PR flattens that payload, merges optional setting_updates, launches open_auth_url, adds spotiflac://callback handling on Android and iOS, and sends no-cache on store HTTP fetches. Needed for extensions like SpoitiLists (Spotify Web API + PKCE).
2026-04-12 02:40:31 -06:00
2026-04-04 13:27:33 +02:00
2026-03-16 20:35:57 +07:00
2026-04-04 13:27:33 +02:00
2026-04-04 13:27:33 +02:00
2026-04-04 13:27:33 +02:00
2026-04-04 13:27:33 +02:00
2026-03-27 22:29:16 +07:00

GitHub Release VirusTotal Crowdin

Telegram Channel Telegram Community

Screenshots


Extensions

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

  1. Open the Store tab in the app
  2. On first launch, enter an Extension Repository URL when prompted
  3. Browse and install extensions with one tap
  4. Or download a .spotiflac-ext file and install manually via Settings > Extensions
  5. Configure extension settings if needed
  6. Set provider priority under Settings > Extensions > Provider Priority

Developing Extensions

Note

Want to build your own extension? The Extension Development Guide has everything you need.


SpotiFLAC (Desktop)

Download music in true lossless FLAC from Tidal, Qobuz & Amazon Music available for Windows, macOS & Linux.

SpotiFLAC (Python Module)

Python library for SpotiFLAC integration, maintained by @ShuShuzinhuu.


FAQ

Why does the Store tab ask me to enter a URL?

Starting from version 3.8.0, SpotiFLAC uses a decentralized extension repository system extensions are hosted on GitHub repositories rather than a built-in server, so anyone can create and host their own. Enter a repository URL in the Store tab to browse and install extensions.

Why is my download failing with "Song not found"?

The track may not be available on the streaming services. Try enabling more providers under Settings > Download > Provider Priority, or install additional extensions like Amazon Music from the Store.

Why are some tracks downloading in lower quality?

Quality depends on what's available from the streaming service and its extensions. Built-in providers:

  • Tidal up to 24-bit/192kHz
  • Qobuz up to 24-bit/192kHz
  • Deezer up to 16-bit/44.1kHz
Can I download playlists?

Yes! Just paste the playlist URL in the search bar. The app will fetch all tracks and queue them for download.

Why do I need to grant storage permission?

The app needs permission to save downloaded files to your device. On Android 13+, you may need to grant All files access under Settings > Apps > SpotiFLAC > Permissions.

Is this app safe?

Yes SpotiFLAC is open source and you can verify the code yourself. Each release is also scanned with VirusTotal (see badge above).

Why is downloading not working in my country?

Some countries have restricted access to certain streaming service APIs. If downloads are failing, try using a VPN to connect through a different region.

Can I add SpotiFLAC to AltStore or SideStore?

Yes! Add the official source to receive updates directly within the app. Copy this link:

https://raw.githubusercontent.com/zarzet/SpotiFLAC-Mobile/refs/heads/main/apps.json

In AltStore/SideStore, go to Browse > Sources, tap +, and paste the link.

Note

If SpotiFLAC is useful to you, consider supporting development:

Ko-fi


Contributors

Thanks to everyone who has contributed to SpotiFLAC Mobile!

We also appreciate everyone who helped with translations on Crowdin, reported bugs, suggested features, and spread the word.

Interested in contributing? Check out the Contributing Guide to get started!


API Credits

hifi-api music.binimum.org qqdl.site squid.wtf spotisaver.net
dabmusic.xyz AfkarXYZ LRCLib Paxsenix Cobalt
qwkuns.me SpotubeDL Song.link IDHS

Tip

Star the repo to get notified about all new releases directly from GitHub.

Languages
Dart 73.1%
Go 16.3%
HTML 6.4%
Kotlin 3.2%
Swift 0.9%