Skip to content

Repository files navigation

Linthra

License: MPL-2.0 Platform: Android Platform: Linux Built with Flutter Latest release: v0.2.3 Releases

Get it on F-Droid

Linthra

Your music, your server.

Linthra is an open-source music player for people who keep their music on their own devices or self-hosted servers. Android is the mature mobile target, and native Linux desktop support is now available for early testing. Linthra plays local files and streams from your own Jellyfin, Navidrome / Subsonic, or Plex server. No ads, no tracking, no account.

Features

  • Plays music from a folder on your phone. Uses the Android folder picker, so it never asks for a broad storage permission.
  • Streams from your own Jellyfin, Navidrome / Subsonic, or Plex server. Streaming is the default and nothing is downloaded automatically.
  • Offline cache: download the tracks you want, Wi-Fi only by default, with a size limit and "Keep offline" pinning.
  • Chromecast, implemented in pure Dart. No Google Play Services needed.
  • Android Auto.
  • Queue, playlists and favorites. Playlists and hearts sync both ways with Jellyfin and Navidrome, and also work without a server.
  • Smart mixes (recently played, most played, never played). Built from listening data that stays on the device.
  • Background playback with lock-screen, Bluetooth and headset controls, shuffle, repeat, and synced lyrics.
  • Themes and launcher icon switching.

Each of these has its own page in the docs.

Two builds

Linthra comes in two flavours. The F-Droid build is fully free and open: no account, no proprietary unlock code, all the music features, and the built-in themes (Classic, Neon, Gold, and Black & White). That's the complete player, and it stays free.

The GitHub Sponsor build has everything the F-Droid one has, plus the custom colour palette for supporters. You get it from GitHub Releases, and it unlocks when you sponsor the project for at least $3 USD per month.

Why isn't the palette on F-Droid, even as a paid option? Because I want the F-Droid build to stay fully libre: no paywalled features, no code that phones a proprietary service like GitHub. That's what an F-Droid build should be, and I'd rather keep it clean than bend it. So the F-Droid build gives you the complete player for free, and the custom palette lives in the GitHub build for supporters.

And it's not DRM. Linthra is open source. If you really want the palette, you can clone the repo and build it yourself. The $3 isn't locking you out; it's a way to support the project and get the official supporter build without the hassle. If Linthra is useful to you, sponsoring genuinely helps: it tells me the work matters and keeps me building it. And if you just want a clean libre player with no account, the F-Droid build is yours, free, for good.

Screenshots

Welcome Choose your source Now Playing
Welcome Choose your source Now Playing
Branding Offline downloads About v0.2.0
Branding Offline downloads About v0.2.0

Install

New versions land on GitHub Releases first, as signed Android APKs and, starting with v0.2.2, a native Linux x64 archive. The current stable is v0.2.3. Linthra is also on F-Droid; F-Droid builds may arrive a bit later while their build and review process runs. Not on Google Play yet.

Don't mix Android install sources. GitHub APKs and F-Droid builds are signed with different keys and can't update each other. Pick one and stick with it.

To install from GitHub Releases and get Android updates, use Obtainium:

  1. Install Obtainium.
  2. Tap Add App and paste the source URL: https://github.com/thezupzup/linthra
  3. Install the latest release. Obtainium handles updates from then on. (Enable "Include prereleases" only if you want to test pre-release builds.)

Or download the .apk from the latest release and open it on your phone.

For Linux, download Linthra-v0.2.3-linux-x64.tar.gz from the same GitHub Release. This is the native bundle, not a Flatpak yet; required runtime packages and native development instructions are in docs/linux-desktop.md.

Notes:

Supported sources

Source Status
Local files ✅ Scan a folder, play directly (SAF, no broad permission) (docs)
Jellyfin ✅ Stream, cache, cast, playlists & favorites (docs)
Navidrome / Subsonic ✅ Stream, cache, cast, lyrics, playlists & favorites, two-way sync (docs)
Plex ✅ Browse, stream & cache from your own Plex Media Server (docs)
WebDAV / NAS 🔜 Planned, behind the same MusicSource interface

Privacy

Linthra does not send telemetry or analytics.

  • Bug reports are built locally and only sent if you open the prefilled issue yourself.
  • Downloads only happen when you start them.
  • Minimal permissions: playback and internet, no storage permission.
  • The server password is used once to get a token, then discarded. The token is stored encrypted and never logged.

Details are in PRIVACY.md and the provider docs.

Contributing

Testing against your own server, screenshots, and doc fixes are useful contributions, not just code. CONTRIBUTING.md covers setup. The contributor roadmap lists where help is needed. To support development, see docs/SUPPORT.md.

Roadmap

See docs/roadmap.md. In short: keep Android stable, deepen the native Linux desktop experience, and finish Flatpak/Flathub packaging while continuing backup/restore and optional Linthra Connect work. Linthra always works on its own: no Docker, no account, no required pairing.

Documentation

Everything is indexed in docs/README.md: setup, architecture, and a page per feature.

License

MPL-2.0

About

Linthra is an open-source, local-first music player for Android with local library scanning, Jellyfin/navidrome/plex streaming, explicit offline cache, and user-controlled playback.

Topics

Resources

Contributing

Stars

45 stars

Watchers

3 watching

Forks

Releases

Sponsor this project

Packages

Contributors

Languages