Skip to content

Choosing a client ​

Songloft offers Flutter and Lynx players connecting to the same backend. Their packages and capability scopes are maintained separately.

ItemFlutterLynx (preview)
TechnologyFlutter / DartReactLynx / TypeScript
PlatformsAndroid, iOS, macOS, Windows, Linux, WebAndroid, iOS, HarmonyOS, Web
Bundled local backendSupported on mobile and desktopNot implemented; all platforms require a separate server
Desktop clientSupportedNot implemented
Client updatesSee Flutter's client guidesDownload and install again; no in-app update checks yet
Core featuresPlayback, library, playlists, lyrics, plugins, themesImplemented, with native device regression still required
LicenseApache-2.0Apache-2.0

Flutter ​

Full backend images/binaries embed Flutter Web by default. Adding a Lynx download option does not switch the bundled interface.

Lynx preview ​

Underlying technology: Lynx official website · ReactLynx documentation.

PlatformPackageLimits
Android 5.0+songloft-lynx-android.apkRelease-signed; upgrades require the same key and a newer build number
iOS 15+songloft-lynx-ios-nosign.ipaUnsigned; re-sign before installation. Live Activity needs iOS 16.2+
HarmonyOS NEXT / API 13+songloft-lynx-harmony.hapExperimental; profile controls eligible devices. No fullscreen video
Websongloft-lynx-web-{standalone,embedded}.tar.gzRequires HTTPS and COOP/COEP; no Bundle, DLNA, or single-song offline cache

Releases include version.json and checksums.txt. Downloadable dev packages are also Release builds with no TCP/E2E bridge.

Standalone Web shows a server-address field; embedded uses the same-origin server and hides that field. Both require suitable MIME types and isolation headers. Replacing Go's embedded Flutter assets does not automatically satisfy the Lynx host contract. See Web deployment; subpath deployment is unverified.

Releases and documentation upkeep ​

Preview a Lynx release in its own repository with pnpm run release patch --dry-run. Actual release synchronizes versions and atomically pushes main and its version tag. A client release does not require changing the server version.

Public guides are synced from the clients/player-lynx submodule to /player-lynx/ and /en/player-lynx/. Edit, commit, and push the source repository, then update its submodule pointer in the parent. Do not edit generated site pages. Actions/Release are authoritative for builds and signing; background playback, notifications, and casting also need device validation.