Your whole library. One native app.

Spotify, YouTube Music, Subsonic and your local files in a single window. Written in Rust on GPU-accelerated GPUI — not a browser in a costume.

$ brew install --cask nolight132/tap/sonora

Free and open source · macOS, Linux, Windows · No account required

Sonora playing an album with the lyrics panel open An artist page in Sonora with the play queue open
Adaptive theming, switchable in Appearance
One player, four sources
Spotify YouTube Music Subsonic Local files

This one you can actually use.

Everything below is a working rebuild of Sonora's album view, drawn from the theme tokens, metrics and icon set the app itself ships. Nothing here is a video.

Album

Fallen

Evanescence • Mar 4, 2003 • 12 songs • 48:39

# Title Artist Plays Length
1 Going Under Evanescence 610,859,143 3:34
Bring Me To Life Evanescence 2,135,409,376 3:55
3 Everybody's Fool Evanescence 223,967,877 3:15
4 My Immortal Evanescence 678,696,675 4:22
5 Haunted Evanescence 73,642,394 3:05
6 Tourniquet Evanescence 106,232,441 4:38
7 Imaginary Evanescence 56,008,294 4:16
8 Taking Over Me Evanescence 60,541,808 3:48
9 Hello Evanescence 76,626,189 3:40
10 My Last Breath Evanescence 50,559,031 4:07
11 Whisper Evanescence 44,318,902 5:26
12 My Immortal (Band Version) Evanescence 31,204,558 4:33
Bring Me To Life Evanescence
1:32
3:55

The accent is picked from the cover by the app's own colour extraction, so every screen re-tints itself around whatever is playing. Lyrics need the app: this preview has no lyrics service to reach.

Install in one line.

Prebuilt binaries for every platform, plus a Nix flake and a Home Manager module.

Install with Homebrew
brew install --cask nolight132/tap/sonora
Clear the quarantine flag
xattr -dr com.apple.quarantine /Applications/Sonora.app

Apple quarantines unsigned apps, so the second command is required after a first install.

Built like a desktop app,
because it is one.

GPUI renders the whole interface on the GPU. Playback, library and lyrics all run in the same Rust process.

Gapless playback

Tracks run into each other the way the record intended, across every provider.

Audio normalization

Levels stay even when a playlist jumps between a 2003 master and a 2024 one.

Synced and karaoke lyrics

Line-by-line and word-by-word timing, with romanization for non-Latin scripts.

One library, many sources

Follow, like and organise inside each provider without leaving the app.

Custom themes

Eight built-in looks plus system, adaptive tinting, and every token overridable.

Cross-platform, natively

One Rust binary on macOS, Linux and Windows. No Electron, no bundled browser.

Eight looks, plus your own.

Dark, light, midnight, forest, ocean, rose, lavender, amber — or follow the system. Adaptive tinting takes its colour from the artwork, and every token underneath is overridable.

Sonora in its light theme showing full-screen synced lyrics
Light, tinted by the record Full-screen lyrics, synced line by line, with word timing when the track carries it.
An artist page in Sonora with the play queue open
Artists, releases, queue Top tracks and every release, with the queue beside them and the page tinted by what is playing.

Speaks 11 languages

545 strings, translated by the community and tracked in the repo. 1 is complete — the rest are a pull request away.

  • English en-US
  • Polski pl
  • Deutsch de
  • Español es
  • Bahasa Indonesia id
  • Português (Brasil) pt-BR
  • Русский ru
  • Українська uk
  • 日本語 ja
  • Français fr
  • Italiano it
Add a language

Come hang out

Discord is where most of it happens, bridged to Matrix.