mixmusic

command module
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 18, 2026 License: MIT Imports: 7 Imported by: 0

README

MixMusic

Spotify and YouTube Music in one player, shaped the way you like it.

MixMusic is an open-source desktop music player for macOS, Windows and Linux. One search looks through YouTube Music and Spotify at once, one queue mixes tracks of both, and one library keeps liked songs and playlists that hold tracks of either service. Its whole look is a theme, and the community adds themes and plugins to it from a shared registry.

It is a single small Go program built on MyGo: the interface is a web page in the system's own webview, so there is no bundled browser to download or keep in memory.

Features

  • One search, two services. Results of YouTube Music and Spotify side by side, every track marked with where it comes from.
  • One queue. Play a Spotify track after a YouTube Music one, shuffle and repeat across both, and let a radio carry on when the queue runs out.
  • Your mixes. Playlists that hold tracks of every service, liked songs across both, import of a service's playlist into a mix, history and listening stats.
  • Spotify your way. Spotify tracks play on Spotify Connect (your own Spotify app, at Spotify's quality), or here, from their recording on YouTube Music, with no Premium needed.
  • A real player. Crossfade, volume levelling, a 10-band equalizer with presets, a visualizer, synced lyrics that follow the song, and an offline cache of tracks you played.
  • At home on the desktop. Media keys, tray controls, notifications of new tracks, a mini player that stays on top, start at login, mixmusic:// links.
  • Keyboard first. Shortcuts for everything common, and a command palette (Ctrl K) for the rest.
  • Themes. Six built in, options per theme, an accent taken from the artwork playing, your own CSS, and community themes one click away.
  • Plugins. Small ES modules that add pages, commands, track actions and widgets through a typed API.

Install

Download the latest release for your system from Releases:

System Download
macOS 12 and later (Apple silicon and Intel) mixmusic-<version>-macos-universal.dmg
Windows 10 and 11 (x64, Arm) mixmusic-<version>-windows-<arch>-setup.exe
Debian, Ubuntu and derivatives mixmusic-<version>-linux-<arch>.deb
Any Linux (x64, Arm64) mixmusic-<version>-linux-<arch>.tar.gz, with install.sh

<arch> is amd64 for x64 and arm64 for Arm. Each release lists SHA256SUMS to verify the downloads with.

What it needs

  • macOS: nothing more. The app is not notarized by Apple yet, so the first time you open it macOS says it cannot check it. Open it anyway from System Settings › Privacy & Security, with Open Anyway, or clear the download mark once in Terminal:

    xattr -dr com.apple.quarantine /Applications/MixMusic.app
    
  • Windows: the WebView2 Runtime, which Windows 11 includes. The installer is not signed yet, so SmartScreen may warn about it: choose More info, then Run anyway.

  • Linux: GTK 3, WebKitGTK 4.1 and the GStreamer plugins that play Opus and AAC audio. On Debian and Ubuntu:

    sudo apt install libwebkit2gtk-4.1-0 gstreamer1.0-plugins-good gstreamer1.0-libav libayatana-appindicator3-1 libsecret-1-0
    

    The tray icon needs libayatana-appindicator3, and keeping your Spotify sign-in in the system's keyring needs libsecret; MixMusic works without either.

  • To play YouTube Music: yt-dlp, which MixMusic installs for you from Settings › Playback, and a JavaScript runtime yt-dlp uses for YouTube: Deno, Node.js, Bun or QuickJS, on your PATH.

Spotify

Spotify lets each app serve a few users of its owner's choosing, so you sign in with an app of your own: create one in the Spotify developer dashboard, add the redirect URI http://127.0.0.1:47823/callback, and paste its Client ID in Settings › Accounts. docs/spotify.md walks through it, and through what Spotify allows apps to do.

Make it yours

  • Themes: the tokens, options and hooks themes style, and how to make one.
  • Plugins: the plugin API, with the types for your editor.
  • Share them: add yours to the community registry, and everyone can install it from the marketplace.

Develop

You need Go 1.27 or later and Bun 1.2 or later.

bun install
bun run dev        # the app, rebuilt as you edit Go, the frontend live
go test ./...                  # the Go side
bun run typecheck              # the frontend
bun run build                  # the packaged app of this system, in build/
bun run build -- -platform windows/amd64,linux/amd64,linux/arm64
go run ./tools/registry -check # the community registry

MyGo needs no C toolchain, so any machine builds MixMusic for every system. docs/architecture.md tells how the parts fit, and CONTRIBUTING.md how to send a change.

Layout

main.go              the app: windows, the tray, media keys, deep links
internal/app         the services the interface calls, and the desktop integration
internal/youtube     YouTube Music's catalog
internal/spotify     the Spotify Web API, its sign-in and Spotify Connect
internal/stream      audio streams, found by yt-dlp and served to the player
internal/match       Spotify tracks matched to their YouTube Music recordings
internal/lyrics      synced lyrics
internal/library     liked songs, mixes, history and stats
internal/addons      themes and plugins, and the community registry
builtin/themes       the themes MixMusic ships with
src/                 the interface: Preact, TypeScript and CSS
sdk/                 the types of the plugin API
community/           community themes and plugins, and their registry

Good to know

MixMusic is not affiliated with, endorsed by or sponsored by Spotify or Google. It plays what these services offer to their users, through the services' own interfaces; use it as their terms allow. Spotify and YouTube Music are trademarks of their owners.

License

MIT. The Selawik typeface in src/assets/fonts is under the SIL Open Font License.

Documentation

Overview

Command mixmusic is a desktop music player that brings Spotify and YouTube Music together in one customizable interface.

Directories

Path Synopsis
Package builtin holds the add-ons MixMusic ships with, laid out as the add-ons folder of the user: themes/<id>/theme.json and its files.
Package builtin holds the add-ons MixMusic ships with, laid out as the add-ons folder of the user: themes/<id>/theme.json and its files.
internal
addons
Package addons manages themes and plugins: those MixMusic ships with, those the user installs from the community registry, and those they put in the add-ons folder themselves.
Package addons manages themes and plugins: those MixMusic ships with, those the user installs from the community registry, and those they put in the add-ons folder themselves.
app
Package app wires MixMusic together: the services its pages call, the events it sends them, and its place on the desktop: windows, the tray, media keys and notifications.
Package app wires MixMusic together: the services its pages call, the events it sends them, and its place on the desktop: windows, the tray, media keys and notifications.
artwork
Package artwork picks the color of a piece of artwork, which themes use as the accent of what plays.
Package artwork picks the color of a piece of artwork, which themes use as the accent of what plays.
library
Package library keeps what the user collects in MixMusic itself, across services: liked tracks, playlists that mix tracks of every service, the history of what they played and their recent searches.
Package library keeps what the user collects in MixMusic itself, across services: liked tracks, playlists that mix tracks of every service, the history of what they played and their recent searches.
lyrics
Package lyrics finds the lyrics of tracks on LRCLIB, an open database of lyrics synchronized to the music, and reads the LRC format they come in.
Package lyrics finds the lyrics of tracks on LRCLIB, an open database of lyrics synchronized to the music, and reads the LRC format they come in.
match
Package match finds a Spotify track's recording on YouTube Music, so that Spotify tracks play through MixMusic's own player, with its equalizer, crossfade and visualizer, and without Spotify Premium.
Package match finds a Spotify track's recording on YouTube Music, so that Spotify tracks play through MixMusic's own player, with its equalizer, crossfade and visualizer, and without Spotify Premium.
media
Package media defines the catalog that every music source shares: tracks, albums, artists and playlists, whichever service they come from.
Package media defines the catalog that every music source shares: tracks, albums, artists and playlists, whichever service they come from.
proc
Package proc starts helper programs, such as yt-dlp, without showing a console window for them on Windows.
Package proc starts helper programs, such as yt-dlp, without showing a console window for them on Windows.
settings
Package settings defines the user's preferences and their defaults.
Package settings defines the user's preferences and their defaults.
spotify
Package spotify reads the Spotify catalog and the user's library through the Spotify Web API, and plays tracks on Spotify Connect devices.
Package spotify reads the Spotify catalog and the user's library through the Spotify Web API, and plays tracks on Spotify Connect devices.
store
Package store keeps values in JSON files.
Package store keeps values in JSON files.
stream
Package stream finds the audio streams of YouTube videos with yt-dlp, and serves them to the player's audio element through a local scheme, with range requests, so it can seek.
Package stream finds the audio streams of YouTube videos with yt-dlp, and serves them to the player's audio element through a local scheme, with range requests, so it can seek.
tools
Package tools finds and installs the programs MixMusic runs: yt-dlp, which finds the audio streams of YouTube, and a JavaScript runtime, which yt-dlp needs to solve the challenges YouTube sends.
Package tools finds and installs the programs MixMusic runs: yt-dlp, which finds the audio streams of YouTube, and a JavaScript runtime, which yt-dlp needs to solve the challenges YouTube sends.
youtube
Package youtube reads YouTube Music's catalog through InnerTube, the API the YouTube Music website itself uses: search, the home feed, albums, artists, playlists and radios.
Package youtube reads YouTube Music's catalog through InnerTube, the API the YouTube Music website itself uses: search, the home feed, albums, artists, playlists and radios.
tools
genicon command
Command genicon draws the MixMusic icons: the app icon and the tray icon.
Command genicon draws the MixMusic icons: the app icon and the tray icon.
registry command
Command registry builds community/registry.json, the index of the community's themes and plugins that MixMusic's marketplace reads, and checks every add-on on the way.
Command registry builds community/registry.json, the index of the community's themes and plugins that MixMusic's marketplace reads, and checks every add-on on the way.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL