v0.2.13 is out Release notes →

YouTube Music, without the browser.

ytm-rs is a native YouTube Music app for Windows, written in Rust. It comes as a 7 MB installer with word-by-word synced lyrics, romanization and 26 themes, and draws nothing at all when you aren't looking.

Free and open source · GPL-3.0 · No account needed to listen

ytm-rs now playing Blinding Lights by The Weeknd, with word-by-word synced lyrics and the lyric source, romanization, translation and timing controls over an animated album-art background
0MBinstaller
0MBmemory while playing
0fpsdrawn when idle
0community themes

Measured with v0.2.12 on Windows 11: private memory with a song playing (about 80 MB idle, 102 MB with lyrics open), and frames drawn with the window idle.

Better together

Bring your friends. Bring your Spotify.

Jams

Same song, same second, different rooms.

Start a jam and share the code or the link. Friends who open it land straight in ytm-rs and hear what you're playing at the same moment, each streaming it on their own.

  • Up to 16 people in one jam, kept within a tenth of a second of the host.
  • You set the rules. Let guests add songs, control playback, both or neither.
  • Guest picks play next, marked with who added them.
A guest's view of a jam in ytm-rs: the code TEST23, a note that the host controls playback, and three people listening together

Synced lyrics

Lyrics that keep up with you.

Words fill in as they're sung, the way the Better Lyrics extension draws them. Click a line to jump there. Japanese, Korean, Chinese and other non-Latin lyrics get romanization and a translation in their own rows underneath. Try it below. The styles use the same numbers as the app's theme presets.

Live demo
さくら さくら · Sakura Sakura Traditional Japanese folk song
0:00
0:30

The demo plays the lyrics of さくら さくら (Sakura Sakura), a traditional Japanese folk song in the public domain. In the app, lyrics come from every source Better Lyrics uses, with the next one taking over when a source has nothing. Translations come from the lyrics when included, otherwise from Unison or Google Translate. Source, romanization, translation and timing controls sit next to Lyrics in the now-playing view.

Everything you use YouTube Music for

The whole app, in one small app.

Your feed, your mixes

Listen again, Quick picks, My Supermix, Discover Mix and mood filters, straight from your YouTube Music home. Keep scrolling and more loads in. Your own playlists play too.

ytm-rs home page with mood filters, throwback mixes and trending community playlists

Read along in any language

Word-by-word lyrics from every Better Lyrics source, with romanization and a translation under Japanese, Korean and Chinese lines. Click a line to seek. Hide them to see just the art.

Upload your own files

Drop MP3, M4A, FLAC, OGG or WMA files on the window. They go to your YouTube Music library, tags and cover art included.

Even volume, quick skips

Loudness normalization from YouTube's own measurements. The next song downloads ahead of time, so skipping is instant. Queue, radio, shuffle, repeat and autoplay are all here.

Feels like part of Windows

Media keys, the Windows media flyout, play and skip buttons on the taskbar, close to tray, Discord Rich Presence, and controls named for screen readers.

Updates itself

New versions download in the background and install when you close the app. Each update shows its release notes, written by a person.

Premium and age-restricted songs

Songs YouTube keeps behind your account play through your signed-in session. With Premium they play natively, and everything plays at 256 kbps. Without it, age-restricted tracks fall back to yt-dlp, so they still play.

Themes

26 themes, rebuilt natively.

The Better Lyrics community made these as CSS for the browser. ytm-rs translates each one into native rendering: its lyrics, warped backdrop, cover, player bar, fonts and the rest of the app. Every theme credits its creators.

  • Apple Musictposejank
  • Apple Music Refineankit008-mishra
  • AppleTifya-dogann
  • Better-YTMWolftheE
  • Burnsemicolonhope
  • ClarityAl Farrizi
  • Colorful Vocalsadaliea
  • Darkyankit008-mishra
  • Dynamic Backgroundchengggit
  • EqualTweaksthejosuep
  • Even Better Lyrics Plusboidushya, noah
  • Expressivedecipher3114
  • Glassy Blurankit008-mishra
  • Luciddrago-oo
  • Lyric GlowMatiuxXcd
  • Minimalsemicolonhope
  • Minimalism Musicnotacoderlols
  • ModernPlayersnw-mint
  • Opacity Based Karaokesemicolonhope
  • reCovermukeenanyafiq
  • Spicy for YouTube Musicolafix52
  • Spinning RecordXtremerspro
  • Spotifontmukeenanyafiq
  • Spotlightboidushya
  • Sustainboidushya
  • YouTube TVmukeenanyafiq
Spinning Record theme: the album cover turns slowly as a vinyl disc beside Japanese lyrics reCover theme: the cover fills the left side and fades into the lyrics Apple Music Refine theme with large lyrics over a vivid warped backdrop Burn theme: white lyrics over a full-bleed darkened cover, with sung words burning out Expressive theme with a centred cover and lyrics Spotlight theme: past lines blur away while the current lines stay sharp Colorful Vocals theme: lyrics tinted in the song's colour

Under the hood

No Chromium anywhere in the player.

The interface is egui on OpenGL. Audio is rodio and Symphonia. Browsing goes straight to YouTube Music's own internal API. It all compiles into one 17 MB executable.

YouTube Musicinnertube API
Better Lyricsevery lyrics source
Unison + Googleromaji + translation
ytm-rs Rust · tokio
egui + OpenGLevery pixel
rodio + SymphoniaAAC decoding
Windows media controlsSMTC · Discord
streams

An unusual client

Playback asks YouTube's player endpoint as the visionOS client. It hands back plain stream URLs that allow any byte range, so there's no signature puzzle to solve first. If YouTube returns a 403 halfway through a song, the stream gets a fresh URL and keeps going.

quickjs

16 minutes down to 5 seconds

Signed-in Premium streams need YouTube's player JavaScript solved. ytm-rs runs yt-dlp's EJS solver in an embedded QuickJS. The older engine took 16 minutes to prepare one player. rquickjs 0.14 takes about 5 seconds, once per player version.

audio

Plays before it finishes downloading

Opening an MP4 for seeking normally means reading every fragment first. ytm-rs starts on a streaming decoder right away, then swaps in a seekable one built over the same buffer the moment you seek.

frames

Frames on a budget

egui lays out the whole window on every frame, so frames cost CPU. Browsing runs at 15 fps and now playing at 30, except while a lyric line fills, which gets every frame so the sweep stays smooth. When nothing moves, nothing gets drawn.

shader

Kawarp, ported

The warped album-art background is a native shader port of Kawarp from Better Lyrics, and it reacts to the music. The backgrounds on this page run a WebGL version of the same idea.

lyrics

Real blur, real glow

The lyrics renderer is a port of Better Lyrics. The glow is a real blur of the lit letters, never a box behind them, and theme blur is rendered properly instead of stacked fake copies. CJK lines render bold, shifted onto the same baseline as Latin text.

Get ytm-rs

v0.2.13 · 7.4 MB · Windows · October 2026

Installs for your user only, no administrator needed. It adds a Start menu shortcut, and you can uninstall it from Windows Settings.

Build from source
> git clone https://github.com/grapedjuice/ytm-rs.git
> cd ytm-rs
> cargo build --release

Needs the Rust toolchain and the MSVC C++ build tools. The app lands in target\release\ytm-rs.exe.

FAQ

Questions, answered.

Is ytm-rs free?

Yes. ytm-rs is free and open source under the GPL-3.0 license. The app has no ads, accounts or paid tiers of its own.

Is it an official YouTube Music app?

No. ytm-rs is an unofficial client built by an independent developer. It talks to the same services music.youtube.com uses, so changes on YouTube's side can occasionally affect playback, sign-in or lyrics.

Do I need YouTube Premium?

No. You can browse, search and play without signing in. Signing in unlocks your home feed, library, likes and history. If your account has Premium, Premium-only songs play natively and everything plays at 256 kbps.

Does it run on macOS or Linux?

Releases are built and tested for Windows. The app is written with cross-platform Rust libraries, but macOS and Linux builds aren't published or tested yet.

How does signing in work?

Open Settings → Sign in with Google. Google's own sign-in page opens in a temporary system WebView2 window, and the session stays on your computer. The player itself never runs in a webview.

Where do the lyrics come from?

Synced lyrics come from every source the Better Lyrics extension uses: Better Lyrics, Unison, Musixmatch, LRCLib and others. If one has nothing for a song, the next takes over. Romanization and translations come from the lyrics when they include them, otherwise from Unison or Google Translate. Machine translations can have rough spots.

How does it update?

The installed app checks GitHub for new releases, downloads them in the background and installs when you close it. Choose Restart to update to install right away, or turn updates off in Settings → Updates.