macOS 包未签名,首次启动需执行 xattr -dr com.apple.quarantine /Applications/limusic.app;Fedora/RHEL 的 rpm 不自动更新且需先装 mpv-libs;macOS Intel 无预编译包,只能从源码构建。

limusic
SimoHypersGPL-3.0活跃维护基于 Tauri 和 Rust 构建的原生桌面 YouTube Music 客户端,支持 Discord 状态同步和 Last.fm 记录播放,适合想要桌面端听歌体验的用户。
Feature rich, native desktop, YouTube Music client.
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 buildREADME 未说明显存或 GPU 要求;Linux AppImage 需 glibc 2.39+(Ubuntu 24.04+、Debian 13+、Fedora 40+),Fedora/RHEL 的 rpm 需自行安装 mpv-libs。
用 Rust + Tauri 写的原生 YouTube Music 桌面客户端,无广告、不套 Electron
基于 Tauri 和 Rust 构建的原生桌面 YouTube Music 客户端,支持 Discord 状态同步和 Last.fm 记录播放,适合想要桌面端听歌体验的用户。
核心能力
- 直连 YouTube InnerTube API 取流,音频无广告
- 用 libmpv 播放,支持无缝切歌与响度归一化
- 支持账号登录、资料库写入与播放历史
- 逐词同步歌词面板,支持翻译与点击跳转
- Last.fm、ListenBrainz 记录与 Discord 状态展示
容易踩的坑
- v1.4.0-rc.5pre-release最新正式版2026-11-08 · 2026-11-08 14:54 UTC
Fifth and last beta of 1.4.0. It brings device link, alongside the first release of Limusic for Android: control this computer from your phone and move the music between them. Listen Together and device link also move to a new server, so they work on networks that blocked the old one. Please try linking your phone, moving playback both ways, and a Listen Together room.
New features
- Device link: link Limusic for Android in Settings ▸ Devices with a six-letter code. The phone shows and controls what plays here, the player bar shows and controls the phone while it plays, and the device button in the player bar moves the music between them at the same spot in the song. Get the Android app at https://github.com/SimoHypers/limusic-android/releases/latest
- Live streams: live broadcasts play, with a Live badge in place of the seek bar. Built by @AdnanKhan-ak47. (#424)
- Live now on Home: a section of official music channels broadcasting right now.
- wallust and pywal colors: the wallpaper palette setting (the Matugen switch until now) also takes its colors from wallust and pywal. Templates and setup are in the docs, the wallust one based on @1ulisses's. (#631)
Bug fixes
- Listen Together couldn't connect on some networks, some UK ISPs among them, that block the old server's address. Thanks @Puengy for the logs. (#627)
- A video saved in a playlist can play as a video again: each song in a playlist is paired with the video that playlist holds. Thanks @Kee7702. (#542)
- Enhanced lyrics settings show once, in Settings ▸ Playback ▸ Lyrics, instead of twice.
New contributors
- @AdnanKhan-ak47: live stream playback.
- v1.4.0-rc.4pre-release2026-11-03 · 2026-11-03 12:20 UTC
查看更新说明
Fourth beta of 1.4.0. It adds a Material You theme, animated word-by-word lyrics and the Unison lyrics source, and share links can now start at a set time. Please try the new lyrics settings, and the Material theme in the player bar, mini player and theater mode.
New features
- Material You theme: colors taken from your accent or the playing artwork, Material shapes, and a wavy seek bar in the player bar, mini player and theater mode. Pick it in Settings ▸ Appearance. Built by @noxygalaxy. (#590)
- Enhanced lyrics: sung words animate and glow, with a choice of animation, highlight style and intensity in Settings ▸ Playback ▸ Lyrics. It can also estimate word timing for lyrics that only have line timing. Built by @noxygalaxy. (#591)
- Unison lyrics: a new lyrics source with Better Lyrics' community lyrics, mostly word by word and timed to the exact video. Local files get them too, and you can rate a song's lyrics on Unison. If you had switched every lyrics source off, Unison stays off. (#342)
- Prefer word-by-word lyrics: a lyrics setting that picks word-by-word lyrics from any source over line-by-line ones from a source above it.
- Start time in share links: set a start time when you share a track, and the link opens at that time. Timecodes in comments are clickable and jump the track there. Built by @TeseySTD. (#602)
Improvements
- Search keeps what you typed when you switch category, Back and Forward bring earlier searches back, clicking the tab you're on focuses the search box, and the player artwork opens the track menu. Thanks @Voltikor. (#556)
- Updated Spanish, French, German, Indonesian, Polish, Portuguese (Brazil), Russian, Turkish, Ukrainian, Vietnamese and Chinese (Traditional) translations.
Bug fixes
- Pressing play sometimes did nothing at all when YouTube Music couldn't be reached. Playback now shows the error or skips the track. (#564)
- SimpMusic is gone from the lyrics sources: its server now refuses every app but its own. (#569)
- Linux: closed webviews no longer leave a web process running on WebKitGTK 2.54, about 90 MB each. (#572)
- Theater mode: the pointer stays hidden while the lyrics scroll. (#573)
- Clicking the seek bar or volume slider no longer stops Space from playing and pausing. (#574)
- With Hide videos on, a music video's radio is no longer empty. The setting is now called "Hide videos in search and radio", since it always covered radio, Home and artist pages too. (#586)
- A song removed while shuffle is on stays removed when you turn shuffle off.
New contributors
- @noxygalaxy: the Material You theme and Enhanced lyrics.
- v1.4.0-rc.3pre-release2026-10-27 · 2026-10-27 11:20 UTC
查看更新说明
Third beta of 1.4.0, with one fix: dragging tracks to reorder a playlist works again. rc.2 broke it, along with other drags that start on a track or a card.
- v1.4.0-rc.2pre-release2026-10-27 · 2026-10-27 10:30 UTC
查看更新说明
Second beta of 1.4.0. Worth a look: tempo, pitch and reverb, podcast speed and skips, and dragging tracks to reorder a playlist.
New features
- Tempo, pitch and reverb: slow a song down, speed it up, shift its pitch or put it in a room, from the new effects button in the player bar. Ready-made sounds like Slowed + reverb and Nightcore are one click, and you can save your own. The mini player button that used to sit there is still in the titlebar. Thanks @Voltikor. (#510)
- Podcast controls: while an episode plays, the player has a speed button (0.5x to 2x) and back 15 / forward 15 seconds on either side of play. Songs keep the controls they had. (#500)
- Reorder playlists: drag tracks to move them in your own playlists. Thanks @Tomjerri1. (#527)
- Click empty space to open or close the player: a new switch in Settings ▸ Appearance ▸ Player view. Turn it off if you keep opening Now Playing by missing the seek bar. On by default, so nothing changes unless you touch it.
Improvements
- Long playlists load up to four pages at a time, so Scroll to bottom, sorting, filtering and sorted play get through a big playlist much faster. (#536)
Bug fixes
- The Song / Video switch lands at the right moment when the video has a break in the middle of the song, and when switching from an album. (#535)
- Lyrics with no real timings show as plain text instead of a synced panel stuck on the last line, and a provider with real timings gets asked. (#539)
- After clicking a track, tab or switch, Space pauses again instead of restarting the track or doing nothing. (#551)
- The classic player layout has the fullscreen video button too. (#415)
Testers: with tempo or pitch changed, listen for a short dip where one song runs into the next.
- v1.4.0-rc.1pre-release2026-10-23 · 2026-10-23 12:51 UTC
查看更新说明
First beta of 1.4.0. Worth a look: fullscreen video, resuming playback when Limusic opens, the Now playing button on playlists, and radios that open on songs you haven't heard. On Linux with WebKitGTK 2.54, the blinking and flickering should be gone.
New features
- Fullscreen video: in theater mode the video can fill the whole screen, with the controls floating over it. Use the dock button or press F, or open it straight from Now Playing. Thanks @Tomjerri1. (#524)
- Resume playback on open: a new option in Settings ▸ General starts your last queue when Limusic opens. Off by default. Thanks @Nonlodico34. (#370)
- Now playing button on playlists: when the playing song is scrolled out of view in a playlist, a button takes you back to it, like the one in the queue. It can be turned off in Settings ▸ Appearance. (#366)
- Hide suggestions: hide the Suggestions shelf from its header, for every playlist at once. Nothing is fetched while it's hidden. (#508)
- Scroll to bottom: a button beside the sort jumps to the end of a long playlist. Thanks @Zcross091. (#462)
Improvements
- Radios and autoplay play songs you haven't heard in the last 30 days first, so the same song no longer opens on the same handful of tracks every time.
- The Song / Video switch shows up for every track YouTube has both versions of, not only ones from an album page or a radio, and switching keeps your place in the song. (#520)
- Going back to a playlist returns to where you had scrolled. (#366)
- Updated Spanish, Indonesian, Japanese, Portuguese (Brazil), Romanian, Russian, Turkish, Ukrainian, Vietnamese and Chinese (Traditional) translations.
Bug fixes
- Linux: on WebKitGTK 2.54, fades no longer blink and the window no longer flickers or turns see-through. (#433)
- On repeat-one, every loop counts as a play in your stats and scrobbles. (#518)
- With Adapt colors to artwork on, a cover with no colour falls back to your theme's accent instead of keeping the last track's. (#522)
- Scrolling to the end of a long playlist no longer bounces or stops a few rows short.
New contributors
- @Zcross091: added Scroll to bottom for playlists.
- @Nonlodico34: added Resume playback on open.
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
Limusic
A native desktop YouTube Music client. Rust + Tauri, ad-free, no Electron.
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
- Ad-free playback: streams come straight from YouTube's API, ads never do
- Search & browse: songs, albums, artists, playlists and the YTM home feed, with results previewing as you type
- Sign in with your YouTube Music account: in-app Google login or cookie-paste, several accounts at once with switching between them
- Your library: playlists, liked songs, saved albums and artists, your uploads, and write actions (like, add to playlist, create/edit/delete playlists including cover art, subscribe, save to library)
- History: everything you have played, in YouTube Music's own day buckets
- Gapless playback with loudness normalization, powered by libmpv
- Tempo, pitch and reverb: adjust playback speed and pitch, add reverb with independent dry/wet controls, and save custom presets on this device.
- Queue with radio/automix continuation, drag to reorder, restored across restarts
- Synced lyrics: side panel with auto-scroll and click-to-jump, word by word where the source has the timings, with translations under each line
- Music videos: optional, the video plays where the artwork sits, with the same gapless audio behind it
- Mini Player and theater mode: shrink to a strip that keeps playing, or go fullscreen with cover and lyrics side by side
- Local Music: play your own files, with all metadata still intact
- Last.fm scrobbling: connect once from the title bar, every play is scrobbled
- ListenBrainz scrobbling: paste a user token in the Scrobbling settings, same plays go there too
- Discord Rich Presence: artwork, live progress bar, one click to toggle
- OS media keys and now-playing integration (MPRIS on Linux, SMTC on Windows, plus playback buttons on the Windows taskbar preview)
- System tray: close the window, keep the music; play/pause and skip from the tray, optional start-on-login
- Listen Together: synced listening rooms over a small self-hosted relay
- Keyboard and mouse:
Ctrl+Ksearches from anywhere,Ctrl+Hlists every shortcut, right-click menus throughout,Ctrland the wheel zooms the interface - Eighteen languages: English, German, Spanish, French, Indonesian, Italian, Japanese, Korean, Polish, Brazilian Portuguese, Romanian, Russian, Tamil, Turkish, Ukrainian, Vietnamese, and Simplified and Traditional Chinese, with more in progress on Weblate
- Self-updating builds (AppImage on Linux, setup.exe on Windows, .app on macOS)
- Make it yours: accent palettes, custom colors, your own fonts, corner roundness, a custom app icon, and an adaptive theme that recolors the app from the playing cover
Screenshots
| 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).
- Last.fm: click the Last.fm mark, approve Limusic in the browser tab that opens, and you're connected for good. Tracks scrobble at the halfway point (or four minutes, whichever comes first), which is Last.fm's own rule. Click again to see the account or disconnect.
- ListenBrainz: open the Scrobbling settings, paste the user token from
listenbrainz.org/settings and connect.
Plays submit as
playing_nowon start and onesinglelisten at the same halfway-or-four-minutes point. A new MetaBrainz account has to verify its email first, or ListenBrainz turns every listen away (the Scrobbling tab says so). - Discord: click the Discord mark to toggle Rich Presence. Green dot means it's live. The card shows the track, artist, album art, and a progress bar, and it disappears when you pause.
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.
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
- A pure Rust crate speaks YouTube's InnerTube API, impersonating several official client identities and falling back between them when one fails.
- YouTube's stream URLs are protected by obfuscated JavaScript (the signature
cipher and the
nparameter) and by BotGuard attestation. Limusic runs that JavaScript where it expects to run, in a real webview, hidden, and never lets any of it touch the UI process. - Audio goes through libmpv: gapless transitions, an on-disk cache, and loudness normalization from YouTube's own metadata.
- The UI is a SvelteKit SPA that only ever talks to the Rust core. It never contacts YouTube itself.
Star History
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.