Unofficial homebrew for Nintendo Wii U
Stream from any Spotify app directly to your console — album art, real-time controls, Miiverse posts and all.
Requires Spotify Premium · Runs under Aroma homebrew
Select "Wii U" as a playback device from any Spotify app. Control music from your phone, PC, or directly on the console.
Skip and auto-advance across entire playlists and albums — not just the visible window.
Toggle on the console or from any connected Spotify app. State syncs both ways.
Full-screen album art and track metadata fetched automatically for every track.
Harmonic-enhancement effect with adjustable strength for richer sound.
Real-time frequency visualizer displayed alongside the album art.
GamePad, Wii Remote, and Pro Controller all supported out of the box.
Tap album art to play/pause, swipe left or right to skip, drag the progress bar to seek.
Browse Miiverse-style posts for the current track via Roséverse (nn_olv).
Scan a QR code on screen with your phone to log in — no computer required. This is a session-only login by design and won't carry over to the next launch — use the Easy setup tool for a login that persists.
Recovers silently from network drops and AP blips. Playback resumes automatically from where it left off.
Optional Aroma plugin that cleans up stale audio cache at boot and on a configurable interval — keeps your SD card tidy automatically.
Grab the archive for your platform from the latest bundle release:
| Windows | spotify-wiiu-setup-windows-x64.zip |
| Linux | spotify-wiiu-setup-linux-x64.tar.gz |
| macOS (Apple Silicon) | spotify-wiiu-setup-macos-arm64.tar.gz |
Extract the archive and run:
# Linux / macOS
chmod +x librespot spotify-wiiu-setup
./spotify-wiiu-setup
# Windows
spotify-wiiu-setup.exe
The tool authenticates with Spotify, converts credentials, and asks whether to download the app and the cache-sweep plugin. All files are saved to an sd-files/ folder next to the setup tool — if your SD card is mounted and Aroma is installed on it, the tool copies everything automatically. If Aroma is not detected it skips the copy and prints the manual paths instead.
The setup tool handles this automatically. If you skipped it, copy from sd-files/ manually:
sd-files/spotify_saved_creds.bin | SD:/spotify_saved_creds.bin |
sd-files/spotify-wiiu.wuhb | SD:/wiiu/apps/spotify-wiiu/spotify-wiiu.wuhb |
sd-files/spotify-cache-sweep.wps | SD:/wiiu/environments/<env>/plugins/spotify-cache-sweep.wps |
The setup tool installs this automatically. To install manually, copy spotify-cache-sweep.wps to:
SD:/wiiu/environments/<aroma-env>/plugins/
Once installed, configure the sweep interval from the Aroma Config Menu (L + ↓ + SELECT).
Insert the SD card, power on the Wii U, open the Aroma Homebrew Launcher, and select Spotify Wii U. Since you set up credentials with the tool above, the app connects automatically — no QR code needed.
Download spotify-wiiu.wuhb from the latest release and copy it to:
SD:/wiiu/apps/spotify-wiiu/spotify-wiiu.wuhb
Skip this step if the app is already installed.
Insert the SD card, power on the Wii U, open the Aroma Homebrew Launcher, and select Spotify Wii U. A QR code appears on screen.
Scan the QR code with your phone's camera or Spotify app (Settings → Devices → Scan to connect), then approve the login on your phone.
The app connects and plays right away, but this login is session-only by design and doesn't write anything to the SD card — you'll re-scan the code every time you launch. For a login that persists across restarts, use the Easy (Recommended) setup tool instead.
Download a prebuilt binary from the librespot-tools release, or install it yourself:
# Arch Linux
sudo pacman -S librespot
# Debian / Ubuntu
sudo apt install librespot
# Any platform via Cargo
cargo install librespot
# Windows
librespot.exe --name "wii-u-setup" --cache %TEMP%\librespot-cache
# Linux / macOS
librespot --name "wii-u-setup" --cache /tmp/librespot-cache
Open any Spotify app, select "wii-u-setup" as your playback device. Wait for Authenticated as ... then press Ctrl+C.
# Windows
python tools\make_creds.py %TEMP%\librespot-cache\credentials.json
# Linux / macOS
python3 tools/make_creds.py /tmp/librespot-cache/credentials.json
This writes spotify_saved_creds.bin in the current directory.
Copy spotify_saved_creds.bin to the root of your Wii U SD card, then launch from the Aroma Homebrew Launcher.
Every run creates a fresh log at SD:/spotify_log.txt. The file is overwritten on each launch and flushed after every line, so it captures everything up to a crash.
To collect it: leave the SD card in the Wii U until the app exits or crashes, then copy spotify_log.txt from the root of the SD card to your PC and paste it into the bug report.
Open a GitHub issue — the bug report template will guide you through the rest.
| + / − | Volume +5 / −5 |
| R / L | Next / Previous track |
| ZR / ZL | Seek +5 s / −5 s |
| A | Play / Pause |
| X | Toggle shuffle |
| Y | Toggle repeat |
| ↑ / ↓ | Crystalizer on / off |
| ← / → | Crystalizer strength |
| B | Toggle controls overlay |
| Stick R | Open post in Roséverse |
| Stick L | Post to Roséverse |
| Tap album art | Play / Pause |
| Swipe left / right | Next / Previous track |
| Drag progress bar | Seek |
| + / − | Volume +5 / −5 |
| R / L | Next / Previous track |
| ZR / ZL | Seek +5 s / −5 s |
| A | Play / Pause |
| X | Toggle shuffle |
| Y | Toggle repeat |
| ↑ / ↓ | Crystalizer on / off |
| ← / → | Crystalizer strength |
| B | Toggle controls overlay |
| Stick R | Open post in Roséverse |
| Stick L | Post to Roséverse |
| + / − | Volume +5 / −5 |
| ↑ / ↓ | Next / Previous track |
| ← / → | Seek +5 s / −5 s |
| A | Play / Pause |
| 1 | Toggle shuffle |
| 2 | Toggle repeat |
| B | Toggle controls overlay |
Prerequisites:
dkp-pacman -S wiiu-devgit clone https://github.com/Happynico7504/spotify-wiiu
cd spotify-wiiu
make # spotify-wiiu.wuhb
make -C plugins/cache-sweep # spotify-cache-sweep.wps
src/
connect/ AP handshake, Spirc, audio, player
discovery/ Zeroconf / mDNS
ui/ SDL2 display, visualiser, font
spotify/ Shared utilities
olv/ Roséverse (nn_olv) integration
plugins/
cache-sweep/ Aroma WUPS cache GC plugin
vendor/ cJSON, stb_image
tools/
setup/ Native setup tool (Rust)
setup.py Python equivalent
make_creds.py Credential converter
meta/ Wii U app metadata
content/ Bundled assets (font)
.github/
Dockerfile Builder image (devkitPPC + WUPS + Rust)
workflows/ CI pipelines
A pre-baked builder image is published to GHCR and used by all Linux CI jobs:
ghcr.io/happynico7504/spotify-wiiu-builder:latest
Contains devkitPPC, WUT, all Wii U portlibs, and a native Rust toolchain with the x86_64-unknown-linux-musl target for static setup-tool builds.
Rebuild the image manually via Actions → Build builder image → Run workflow.
The binary format read by the homebrew:
[1 byte] username_len
[N bytes] username (UTF-8)
[1 byte] auth_type
0 = user/pass
1 = stored credentials ← normal
3 = Spotify token
[N bytes] raw auth blob (base64-decoded)
The username has to travel with the blob — Spotify's AP server rejects a stored-credentials login with an empty username field, even when the blob itself is valid.
Both the Rust setup tool and tools/make_creds.py handle old and new librespot JSON formats.
Uses Nintendo's nn_olv.rpl loaded via OSDynLoad. Posts are scoped to community ID 157 with a track-ID search key so each song shows its own posts.
Posts are always visible and auto-advance based on track timestamps (or every 5 s for untagged posts). Press Stick R to open the current post in the Roséverse overlay. Post with Stick L — pre-filled with the current track name and artist.
| latest (v*) | Wii U .wuhb package |
| bundle-latest | Setup tool + librespot bundles |
| librespot-tools | Standalone librespot binaries |