limusic README

The project's README from github.com/SimoHypers/limusic. As one markdown file: README.md.

Limusic Banner

Limusic

A native desktop YouTube Music client. Rust + Tauri, ad-free, no Electron.

GitHub Downloads GitHub Release License Translation status Website Support on Ko-fi
Linux Windows macOS Tauri 2 Rust

Limusic talks directly to YouTube's internal API and plays audio through libmpv: no bundled browser runtime, no backend server, no ads in the audio. It started as a desktop rebuild of the playback engine behind Metrolist, an Android YouTube Music client, and grew from there.


Features


Screenshots

A playlist in Limusic Word-by-word synced lyrics
An album page, colors adapted to the cover A music video playing with lyrics alongside

Download & Install

Platform File Notes
Windows -setup.exe Self-updating
Windows .msi Plain installer, no auto-update
Linux .AppImage Self-updating, libmpv bundled. Needs glibc 2.39+ (Ubuntu 24.04+, Debian 13+, Fedora 40+)
Linux (Ubuntu/Debian) .deb No self-update. Needs Ubuntu 24.04+ / Debian 13+; apt pulls libmpv and webkit2gtk in for you
Linux (Fedora/RHEL) .rpm Needs mpv-libs installed (sudo dnf install mpv-libs). No updates, redownload each release
macOS (Apple Silicon) .dmg Self-updating. Unsigned, so the first launch needs xattr -dr com.apple.quarantine /Applications/limusic.app
macOS (Intel) none Build from source, see docs/BUILD-PLATFORMS.md

Community-maintained repositories, packaged and updated by their maintainers rather than by this project:

Platform Source Notes
Linux (Arch) AUR yay -S limusic-bin. Maintained by @xiryuudev, updates through pacman
Linux (Fedora COPR) COPR sudo dnf copr enable oguzkarayemis/limusic then sudo dnf install limusic. Maintained by @oguzkarayemis, updates through dnf
Linux (openSUSE Tumbleweed) OBS sudo zypper ar -p 100 https://download.opensuse.org/repositories/home:/itachi_re/openSUSE_Tumbleweed/home:itachi_re.repo then sudo zypper install limusic. Maintained by @itachi-re, updates through zypper. The repo carries the maintainer's other packages too, so -p 100 keeps it below the distro repos

Scrobbling & Discord

Last.fm lives in the title bar, next to the window controls, and ListenBrainz connects from Settings ▸ Scrobbling. Both get the same cleaned-up track (the tab's preview shows what each play counts as).

Building from source? Last.fm needs your own API credentials, and they are not in the repo. Get a key at last.fm/api/account/create and put it in src-tauri/lastfm.keys:

LIMUSIC_LASTFM_API_KEY=your_key
LIMUSIC_LASTFM_API_SECRET=your_secret

Without that file everything else still builds and runs; the Last.fm button just reports that it isn't configured.


Lyrics

Open the panel with the microphone button in the player bar, next to the queue button. It takes the same side of the window as the queue, so opening one closes the other.

Lyrics come from Boidu first, then LRCLIB, then YouTube Music's own timed lyrics, then Netease, QQ Music and Kugou, falling back to plain un-timed text when nobody has a synced version. Matching is keyed on the track's exact length, because popular songs exist as several cuts and the wrong one drifts a few seconds out. Results are cached locally, so replaying a track is instant.

Boidu is the only source with per-word timings, which is what lets a line highlight word by word as it's sung. It goes first for that reason, which also means it is asked about every track you play. Turn it off in Settings -> Playback -> Word-by-word lyrics and the other sources still provide line-by-line lyrics. Netease additionally supplies translations, shown under each line where it has them.

Note that YouTube Music's lyrics are licensed per region and are missing entirely in some countries. Where that's the case, LRCLIB does all the work.


Listen Together

Synced listening with friends. Everyone streams their own audio from YouTube; the room only relays play/pause, seeks, track changes and the queue. One person hosts the relay:

cargo run -p sync-server        # plain WebSocket on 0.0.0.0:8080

Front it with something that terminates TLS (Tailscale Funnel, Cloudflare Tunnel), then paste the wss:// URL into the Listen Together panel in the app. Rooms have join codes and the host approves every join and every track suggestion.


Translations

Limusic is translated on Weblate, who host it free for libre projects.

Translation status

English, Spanish, French, Turkish, Brazilian Portuguese and Indonesian ship in the app today. The badge above shows everything else in flight.

Translate on Weblate, not in a pull request. Weblate keeps its own copy of the catalogs, so a hand-edited fr.json merged here puts the two out of sync and the next batch of real translations arrives as a merge conflict. Weblate also shows you the English original beside each string, flags translations that went stale when the English changed, checks that placeholders like {count} survived, and opens the pull request for you. Anything untranslated falls back to English in the app, so partial work is safe to submit.

en.json is the exception: it changes by hand, in whichever pull request changes the UI. Switching a finished language on in the picker takes a small code change too, see CONTRIBUTING.md.


Building from Source

Fedora:

sudo dnf install mpv-libs mpv-libs-devel webkit2gtk4.1-devel \
  gcc gcc-c++ make openssl-devel librsvg2-devel
cd ui && pnpm install && cd ..
cargo tauri build

Windows and macOS instructions live in docs/BUILD-PLATFORMS.md.


How It Works, Briefly


Star History

Star History Chart

Support

Limusic is free and stays free. If it earned a coffee, ko-fi.com/simohypers is where to leave one.


Disclaimer

This project is not affiliated with, funded, authorized, endorsed by, or in any way associated with YouTube, Google LLC, or any of their affiliates and subsidiaries.

All trademarks, service marks, and intellectual property rights referenced in this project belong to their respective owners.


License

GPL-3.0

limusic (SimoHypers/limusic)

Searching Database…

1.7K ·GitHub
What is this?A native desktop client for YouTube Music, built with Rust and Tauri. It plays music ad-free, without Electron and without a backend server of its own.
Does it download the songs or just stream them?It streams audio straight from YouTube's internal API rather than offering a download feature. Playback goes through libmpv, which keeps an on-disk cache.
How do I get it running?Download the installer for your system from the releases: setup.exe on Windows, the AppImage on Linux, or the .dmg on Apple Silicon Macs. Arch, Fedora and openSUSE users can also install community-maintained packages.
Do I need a YouTube account or my own API keys?Signing in with your YouTube Music account gives you your library, history and write actions like liking songs. Building Last.fm support from source requires your own Last.fm API key.
Any catches I should know before installing?The AppImage needs glibc 2.39 or newer. The .deb and .rpm packages do not self-update, so you have to redownload each release.
Does it have synced word-by-word lyrics?Yes, where the source has timings: Boidu gives per-word timings and is tried first, then LRCLIB, YouTube Music, Netease, QQ Music and Kugou. Netease also supplies translations under each line.
Can I change the speed, pitch or add reverb?Yes: tempo and pitch can be adjusted, reverb has independent dry and wet controls, and custom presets can be saved on the device.
Can it play my own local music files?Yes, the Local Music feature plays your own files with their metadata still intact.
Why did the author build it?It began as a desktop rebuild of the playback engine behind Metrolist, an Android YouTube Music client, and grew from there.
Creator
SimoHypers
Size
9.9 MB
Stars
1.7K
Age
4mo
Commits · 90 Days