What's New
⚠️ ALPHA VERSION: DO NOT USE IF YOU ARE A NORMAL USER
This is a major pre-release (v3.0.0) intended for developers and testers only. Expect bugs and instability.
Extension System
- Custom Search Providers: Extensions can now provide custom search functionality
- YouTube, SoundCloud, and other platforms via extensions
- Custom search placeholder text per extension
- Configurable thumbnail aspect ratios (square, wide, portrait)
- Extension Upgrade System: Upgrade extensions without losing data
- Preserves extension settings and cached data during upgrades
- Version comparison prevents downgrades
- Auto-detects upgrades when installing same extension
- Custom Thumbnail Ratios: Extensions can specify thumbnail display format
"square"(1:1) - Album art style (default)"wide"(16:9) - YouTube/video style"portrait"(2:3) - Poster style- Custom width/height override available
Added
- Track Source Tracking: Tracks now remember which extension provided them
Track.sourcefield stores extension IDTrackState.searchExtensionIdfor current search context- Enables extension-specific UI customization
- Extension Upgrade API: New methods for extension management
upgradeExtension(filePath)- Upgrade existing extensioncheckExtensionUpgrade(filePath)- Check if file is an upgradeRemoveExtensionByID- Remove extension by ID
- iOS Extension Support: Added missing iOS method handlers
upgradeExtension- Upgrade extension from filecheckExtensionUpgrade- Check upgrade compatibility
- Extension Documentation: Comprehensive extension development guide
- Thumbnail ratio customization documentation
- Extension upgrade workflow documentation
- New troubleshooting entries for common issues
Changed
- Version Bump: 2.2.7 → 3.0.0-alpha.1 (major version for extension system)
- Build Number: 49 → 50
- Extension Manager: Improved upgrade detection in
LoadExtensionFromFile- Auto-detects if installing same extension with higher version
- Calls
UpgradeExtensionautomatically for seamless upgrades
Fixed
- Extension
registerExtension: Fixed globalextensionvariable not being set- Extensions can now access their own functions via
extension.functionName() - Required for
customSearchand other provider functions
- Extensions can now access their own functions via
- Custom Search Empty Results: Fixed error when extension returns null
- Now returns empty array instead of error
- Prevents crash when no results found
- Mutex Crash on Upgrade: Fixed "Unlock of unlocked RWMutex" crash
- Removed
defer m.mu.Unlock()when manual unlock is used - Proper lock handling in upgrade flow
- Removed
- Duplicate Error Messages: Fixed extension install errors showing twice
- Added
clearError()method to extension provider - Improved PlatformException parsing to remove "null, null" artifacts
- Added
- Extension Images Field: Fixed thumbnails not showing in search results
- Added
Imagesfield toExtTrackMetadatastruct - Renamed
GetCoverURLtoResolvedCoverURL(gomobile conflict)
- Added
Technical
- Go Backend Changes:
go_backend/extension_manager.go: AddedcompareVersions(),UpgradeExtension(),CheckExtensionUpgradeJSON()go_backend/extension_providers.go: AddedImagesfield,ResolvedCoverURL()methodgo_backend/extension_manifest.go: AddedThumbnailRatio,ThumbnailWidth,ThumbnailHeighttoSearchBehaviorConfiggo_backend/exports.go: AddedRemoveExtensionByID,UpgradeExtensionFromPath,CheckExtensionUpgradeFromPath
- Flutter Changes:
lib/models/track.dart: Addedsourcefieldlib/models/track.g.dart: Updated forsourcefieldlib/providers/track_provider.dart: AddedsearchExtensionId, updated_parseSearchTrackwith source parameterlib/providers/extension_provider.dart: AddedSearchBehavior.getThumbnailSize(),clearError()lib/screens/home_tab.dart: Dynamic thumbnail size based on extension configlib/screens/settings/extensions_page.dart: Improved error handlinglib/services/platform_bridge.dart: AddedupgradeExtension(),checkExtensionUpgrade(),removeExtension()
- iOS Changes:
ios/Runner/AppDelegate.swift: AddedupgradeExtension,checkExtensionUpgradehandlers
- Android Changes:
android/app/src/main/kotlin/com/zarz/spotiflac/MainActivity.kt: Already had upgrade methods
Documentation
- Updated
docs/EXTENSION_DEVELOPMENT.md:- Added thumbnail ratio customization section
- Added extension upgrade documentation
- Added settings fields table with
secretfield - Added new troubleshooting entries
- Updated table of contents
- Updated changelog
Downloads
Android
- arm64:
SpotiFLAC-v3.0.0-alpha.1-arm64.apk(recommended for modern devices) - arm32:
SpotiFLAC-v3.0.0-alpha.1-arm32.apk(older devices)
iOS
- iOS:
SpotiFLAC-v3.0.0-alpha.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