Linthra v0.2.3
Linthra 0.2.3 is a community-driven stability and Linux desktop release, with stronger playback recovery, safer session restoration, better self-hosted server handling, and the first Audiobookshelf integration foundation.
What's new
- Linux playback recovers instead of getting stuck. Mid-stream server and network failures now use bounded recovery, a buffering watchdog, sibling-source fallback when available, and a clear Retry path instead of looping forever.
- Temporary network drops have a real reconnect state. Now Playing can show Reconnecting… while Linthra re-resolves a fresh authenticated stream URL and resumes near the preserved position.
- Suspend/resume is much safer on Linux. A track that was actively playing before system sleep can be re-resolved and reloaded after wake on the same player, while a track the user paused stays paused.
- Crash-safe Linux playback restoration. After an unexpected restart, Linthra can restore the logical queue, current item, repeat/shuffle state, and position as a paused session. It never persists authenticated stream URLs or provider tokens, and remote tracks re-resolve normally when playback resumes.
- Audiobookshelf support has started. This release adds the connection, authentication, server validation, session model, and library-listing foundation. Audiobook playback, chapters, progress sync, bookmarks, and offline audiobook support remain follow-up milestones.
- Self-hosted server URLs are more robust. Jellyfin, Plex, and Subsonic/Navidrome now share one URL-normalization path, including correct handling for IPv6 literal hosts.
- Large source re-syncs are cheaper. The local database now indexes
tracks.source_id, avoiding a full catalog scan when one source is refreshed. Existing databases migrate automatically. - Linux library defaults fit the desktop better. The folder chooser can start from the user's XDG Music directory instead of assuming
~/Music, including localized or relocated Music folders. - System theme behavior is documented and guarded across desktop/mobile. Linthra keeps one shared Flutter
ThemeMode.systempath rather than adding GNOME/KDE-specific theme code. - Player accessibility improved. The custom play/pause control now exposes the proper button role and enabled state to assistive technologies.
Linux reliability
The recent Linux playback work intentionally reuses Linthra's existing playback controller rather than creating provider-specific retry systems or extra players. Recovery is bounded, concurrent recovery triggers are coalesced, and failure still ends in a normal user-visible error/Retry state.
Real hardware timing can vary after suspend — especially with Bluetooth, PipeWire/PulseAudio, or networking that returns after the Flutter lifecycle signal — so docs/linux-desktop.md includes the manual matrix used for milestone testing.
Audiobookshelf status
Audiobookshelf in v0.2.3 is the first integration milestone, not the complete audiobook player. The foundation validates the server before credentials are sent, uses the server's supported login/token flow, and keeps session parsing defensive against corrupt persisted data.
The next milestones can build browsing/domain models, chapters/playback, progress sync, bookmarks, and offline behavior on top of this base without mixing audiobook behavior into the existing music providers.
Android and F-Droid
Android remains a first-class target. The Linux-specific recovery/restore paths are gated so Android screen-on and normal mobile lifecycle behavior do not begin auto-restarting playback.
The canonical Android version for this release is:
- versionName:
0.2.3 - base versionCode:
203999
F-Droid's split-ABI scheme remains:
- armeabi-v7a:
2039991 - arm64-v8a:
2039992 - x86_64:
2039993
GitHub APKs and F-Droid packages remain signed by different keys, so users should keep updating from the same install source they originally chose.
Linux download
The GitHub Release workflow can attach:
Linthra-v0.2.3-linux-x64.tar.gz
This is the native Flutter Linux bundle, not the future Flatpak. Runtime requirements and the current Linux support matrix are documented in docs/linux-desktop.md.
Upgrade notes
No manual migration is required. The SQLite schema upgrade that adds the source index is handled automatically, and crash-safe playback state uses defensive versioned persistence. Existing Android library/settings data remain in place during a normal same-source update.
Community
A big part of v0.2.3 came from community contributions across self-hosted server support, Audiobookshelf, accessibility, database performance, Linux desktop integration, and playback reliability.
Special thanks to @jpdexter101-lang and @Borhan2004 for their contributions to this release. These acknowledgements are release-level thanks, not a one-to-one mapping between each nearby feature bullet and a specific commit author.
Thank you to everyone testing Linthra, reporting edge cases, reviewing changes, and helping the project grow.