# Linthra v0.1.14 — release notes

**Linthra is an Android music player for local files and self-hosted music servers.** v0.1.14 improves album browsing, fixes compilation and collaboration grouping, adds full light/dark appearance support, and makes first-time server synchronization clearer.

- **Version:** `0.1.14` (`versionName`), `versionCode` `114999`
- **Platform:** Android
- **Application ID:** `io.github.thezupzup.linthra`
- **License:** MPL-2.0

## What's new

### Compilation and collaboration albums stay together

- Linthra now prefers a provider-namespaced album ID when grouping tracks.
- Tracks from the same album remain grouped even when each track credits a different artist or collaborator.
- Jellyfin and Plex also use their album-artist metadata when available; local files use an embedded album-artist tag when present.
- Navidrome/Subsonic albums use the server-provided album ID without guessing an album artist.
- Existing catalogs and settings are preserved by an additive database migration.
- Allow or start a library sync after updating so existing tracks receive the new album metadata.

### A responsive album grid

- The Albums tab now shows two cover-focused columns on phones instead of one full-width row per album.
- Wider screens gain additional columns only when enough space is available.
- Album artwork remains square, while long titles and artist names are safely truncated.
- Tap and long-press behavior remains unchanged, including album navigation and bulk playlist actions.
- Layout and semantics adapt to larger text sizes and accessibility tools.

### System, Light, and Dark appearance modes

- Linthra now follows the phone's light or dark setting by default.
- Settings → Appearance includes explicit System, Light, and Dark choices.
- The selected mode is restored before the first frame, avoiding a theme flash at startup.
- Light palettes were retuned and tested for readable contrast while preserving Linthra's visual identity.

### Clearer first synchronization

- Empty-library screens now recognize active Jellyfin, Navidrome/Subsonic, and Plex synchronization.
- Linthra names the source being synchronized when one source is active, and uses a general message when several are active.
- Plex users are no longer shown the unrelated local-folder prompt while their server library is scanning.
- Navidrome/Subsonic users no longer see a misleading empty-catalog message while the first sync is still filling the library.

## Release and F-Droid reliability

- The release version remains fully defined in `pubspec.yaml`, with the matching in-app version enforced by tests.
- F-Droid can detect the `v0.1.14` tag automatically and derive the three per-ABI version codes: `1149991`, `1149992`, and `1149993`.
- Dependency resolution remains locked through the committed `pubspec.lock` and `flutter pub get --enforce-lockfile`.
- Pull-request CI validates the Android release lint path before the immutable stable tag is created.
- The stable publisher verifies the universal APK, AAB, and all three signed per-ABI APKs on the GitHub Release.

## Upgrade and distribution notes

- Normal in-place updates preserve accounts, settings, playlists, catalog, favorites, and cache.
- Run or allow one server-library sync after updating to populate the new album identifiers for existing tracks.
- Do not mix GitHub and F-Droid installations because the APKs use different signing keys and cannot update one another.
- F-Droid builds and signs its own APKs from the source tag; GitHub Release APKs are signed by the upstream project.

No ads, no tracking, no analytics, no telemetry. Linthra plays music you already own or that your own server provides.
