New releasev0.5.5

A desktop music player written in pure Rust and rendered on the GPU. NetEase Cloud Music and your local library, in one place.

Free & open sourceWindows · macOS · Linux

Rustle lyrics view: album art and playback controls on the left, word-by-word lyrics on the right
lyric formats
11
streaming quality tiers
9
band equalizer
10
point FFT spectrum
4096
Electron or WebView
0

Cinematic lyrics

Every word, breathing.

A custom wgpu lyrics engine: SDF glyphs light up word by word, every line rides its own spring, and layered Gaussian blur adds depth of field. Duets, background vocals, interlude breaths, translations and romanization — all there.

Word by word
Syllable-timed highlighting, with glow and lift on held notes.
Spring physics
Every line on its own spring, cascading as it scrolls.
Duets & harmonies
Duet lines align right; background vocals shrink and fade.
Best source wins
AMLL TTML, QQ Music QRC and NetEase YRC, picked automatically.

Leaves in Motion

Rustle Ensemble

0:000:36
Web re-creation · rendered live on the GPU in the app

No Electron. No WebView. Just Rust, the GPU, and the song you are listening to.

Crafted

Every detail, considered.

Backgrounds that follow the cover

Dominant OKLCH colors from the album art drive a living Bicubic Hermite mesh gradient that glides into the next palette on every track change.

Pick a cover to watch it flow

Native, and light

Pure Rust with iced and wgpu. No browser engine — it starts fast and stays lean.

VulkanMetalDirectX 12

At home on your OS

Native tray and system media controls, so media keys and lock-screen widgets just work.

  • WindowsSMTC media controls
  • macOSNow Playing · Control Center
  • LinuxMPRIS2 · D-Bus

Discord presence

Share what you are playing via Rich Presence.

Global hotkeys

Media keys work out of the box; every binding is yours to change.

rustle:// deep links

Play or search from anywhere; a second launch hands off to the running instance.

No more mojibake

Legacy tags in GBK, Big5, Shift-JIS, EUC-JP and EUC-KR are detected automatically.

Any network

HTTP / HTTPS / SOCKS5 / system proxy, plus an overseas compatibility mode.

Power saver

Switch to plain-text lyrics in one click — smooth on old GPUs and VMs.

Bilingual

Simplified Chinese and English, switch any time.

Audio engine

Care you can hear.

A 10-band equalizer with preamp, a 4096-point real-time FFT, ReplayGain / R128 loudness normalization, and Automix transitions aligned to the beat.

Rustle Audio Engine

Spectrum · 4096 FFT

Level

L
R

-∞ dB

Equalizer · Pop

+12+60-6-1231621252505001k2k4k8k16k0.0 dB

Drag a node to change its gain

Automix

Reads BPM, beats, loudness and energy to blend into the next track on the beat.

Loudness normalization

ReplayGain / R128, analyzed and cached in the background when tags are missing.

Seamless transitions

Next track pre-decoded; a 5-second crossfade on natural endings.

Stream as it downloads

Progressive playback, with smooth fades on play and pause.

Hot-plug aware

Choose any output device; playback recovers when it reconnects.

Right where you left off

Queue and position restored on the next launch.

Your music

Cloud and local, together.

NetEase Cloud Music

QR-code sign-in. Daily picks, Private Radar, Personal FM and podcasts; saved playlists, likes, and cloud playlist editing.

Nine quality tiers

  1. 128 kbpsStandard
  2. 192 kbpsHigher
  3. 320 kbpsExhigh
  4. SQLossless
  5. ≈ 1.9 MbpsHi-Res
  6. HDHD Enhanced
  7. SurroundImmersive
  8. AtmosDolby Atmos
  9. MasterMaster

Local library

Import a folder and it becomes a playlist, kept in sync by an optional folder watcher. Edit titles, artists, albums and cover art.

.mp3.flac.m4a.aac.ogg.opus.wav.wma.aiff

Downloads

A separate download quality, with tags, cover art and lyrics written in; the queue shows live speed and progress.

11 lyric formats

Same-name lyric files, .tlrc / .rlrc translations and romanization, and embedded lyric tags are found automatically.

LRCLQEYRCQRCKRCESLrcLYSTTMLASSSSASRT

A closer look

Quiet, and precise.

A background tinted by the cover, with lyrics that light up word by word.
A background tinted by the cover, with lyrics that light up word by word.
Virtualized lists keep thousands of tracks perfectly smooth.
Virtualized lists keep thousands of tracks perfectly smooth.
Quality, network, storage and shortcuts, all in one place.
Quality, network, storage and shortcuts, all in one place.

Shortcuts

At your fingertips.

On macOS, Ctrl maps to ⌘. Global hotkeys default to Ctrl + Alt + the same key, and every binding can be changed in Settings → Shortcuts.

  • Play / PauseSpace
  • Next / PreviousCtrl+N/Ctrl+P
  • Seek forward / backCtrl+→/Ctrl+←
  • Volume up / downCtrl+↑/Ctrl+↓
  • MuteCtrl+M
  • SearchCtrl+K
  • HomeCtrl+H
  • Play queueQ
  • Full screenF11
  • Close dialogEsc

Download

Start listening.

Free and open source, for Windows, macOS and Linux.

Latest v0.5.5· Released Oct 1, 2026

Or use a package manager

  • Windows · winget

    $ winget install FeiXiangShi.Rustle
  • Arch Linux · prebuilt

    $ yay -S rustle-bin
  • Arch Linux · from source

    $ yay -S rustle

The lyrics engine and animated backgrounds need a GPU (Vulkan / Metal / DirectX 12). On older graphics or virtual machines, turn on Power Saver in Settings → Interface.

Open source

Open, and staying that way.

Licensed under AGPL-3.0-or-later. Cleanly separated crates, from audio to interface — every line is there to read, review and improve.

Rust 1.98+
$ git clone https://github.com/Fei-xiangShi/Rustle$ cd Rustle$ cargo run --release

Rustle/

  • ├─ rustle-desktopDesktop app: pages, state and the message loop
  • ├─ rustle-uiWidgets, theming, animation and GPU background effects
  • ├─ rustle-audioPlayer, equalizer, spectrum analysis, Automix, devices
  • ├─ rustle-mediaMetadata, lyric parsing, library scanning and folder watching
  • ├─ rustle-ncmNetEase Cloud Music client
  • ├─ rustle-storageSQLite persistence
  • ├─ rustle-platformTray, media controls, global hotkeys, deep links, Discord
  • ├─ rustle-applicationApplication services
  • └─ rustle-domainDomain model