WolfWave is a native macOS menu bar app that bridges Apple Music with Twitch chat, Discord Rich Presence, and OBS stream overlays. Built for streamers and creators on Apple Silicon, it surfaces what you're listening to everywhere your audience already is — automatically.
Keep your music in sync. Keep your stream alive.
- Now Playing in Twitch Chat — Viewers type
!song,!currentsong, or!nowplayingand instantly see the track you're spinning. - Song Requests — Viewers request songs with
!sr <track>. Requests play through Apple Music without taking focus from OBS. - Hold-Mode Queue — Mods can hold, resume, skip, and clear the request queue from chat or the menu bar.
- Live Queue View — See what's playing, what's next, and who requested each track right inside the app.
- Fallback Playlist — Configure an Apple Music playlist that takes over when the queue runs dry.
- Discord Rich Presence — Shows "Listening to Apple Music" on your Discord profile with album art and clickable open-in-Apple-Music + song.link buttons.
- OBS Stream Widget — Drop-in browser source overlay powered by a local WebSocket server.
- macOS 26 Liquid Glass Design — Refreshed onboarding, settings, and menu bar built for Tahoe.
- Secure by Default — Credentials live in the macOS Keychain, never plain text.
- Automatic Updates — Sparkle (DMG) or Homebrew (
brew upgrade --cask). - Bug Report Flow — One-click log export and pre-filled GitHub issue from Advanced settings.
Full docs at mrdemonwolf.github.io/wolfwave.
brew tap mrdemonwolf/den
brew install --cask wolfwave- Grab the latest
.dmgfrom GitHub Releases. - Open the DMG and drag WolfWave to Applications.
- Launch WolfWave and follow the onboarding wizard.
The app is signed and notarized by Apple — no Gatekeeper warnings.
| Command | What it does |
|---|---|
!song !currentsong !nowplaying |
Shows the current track |
!lastsong !last !prevsong |
Shows the previous track |
!sr <song> |
Requests a song for the queue |
!queue |
Shows the full request queue |
!myqueue |
Shows just your own requests |
| Command | What it does |
|---|---|
!skip !next |
Skips the current request |
!hold |
Pauses the queue so you can curate before releasing |
!resume !unhold |
Resumes a held queue |
!clearqueue |
Wipes the queue (with in-app confirmation) |
Enable in Settings > Discord to show what you're listening to on your Discord profile. Album artwork is fetched automatically.
Enable in Settings > Now-Playing Widget to start a local WebSocket server. Copy the widget URL and add it as a Browser Source (500 x 120) in OBS.
| Layer | Technology |
|---|---|
| Language | Swift 5.9+ |
| UI | SwiftUI, AppKit |
| Platform | macOS 26.0+ (Tahoe), Apple Silicon |
| Music | ScriptingBridge, MusicKit, AppleScript |
| Twitch | EventSub WebSocket, Helix API |
| Discord | Rich Presence via local IPC Unix domain socket |
| Networking | URLSession, Network framework, NWListener (WebSocket overlay) |
| Updates | Sparkle (EdDSA-signed appcast) |
| Security | macOS Keychain (Security framework) |
| Docs | Fumadocs (Next.js), bun, Turborepo |
| Marketing | Remotion |
- macOS 26.0+ (Tahoe)
- Apple Silicon (M1 or later)
- Xcode 16.0+
- Swift 5.9+
- bun for docs and marketing workspaces
- Command Line Tools:
xcode-select --install
git clone https://github.com/MrDemonWolf/WolfWave.git
cd WolfWavecp apps/native/wolfwave/Config.xcconfig.example apps/native/wolfwave/Config.xcconfigEdit Config.xcconfig with your Twitch Client ID and Discord
Application ID. Get a Twitch Client ID at
dev.twitch.tv/console/apps and a
Discord Application ID at
discord.com/developers/applications.
make open-xcodeThen build and run with Cmd+R in Xcode.
Monorepo (bun + Turborepo):
bun install— Install all workspace dependencies.bun dev— Start every dev server via Turbo.bun run dev --filter docs— Start the docs dev server only.bun run build --filter docs— Build the docs site.bun run dev --filter wolfwave-announcement— Open Remotion studio for the launch announcement video.
Native app (Make):
make build— Debug build viaxcodebuild.make clean— Clean build artifacts.make test— Run the unit test suite (879 tests across 26 files).make update-deps— Resolve SwiftPM dependencies.make open-xcode— Open the Xcode project.make ci— CI-friendly build.make prod-build— Release build + DMG inbuilds/.make prod-install— Release build + install to/Applications.make notarize— Notarize the DMG (requires Developer ID + env vars).
- Swift 5.9+ with async/await concurrency (no
DispatchQueuefor new async work). - MVVM with
@Observableview models. - MARK sections in every file; DocC-style
///comments on all public APIs. - No force unwrapping — optionals and
guardonly. - Credentials always via
KeychainService, neverUserDefaults. - Thread-safe service layer (NSLock, serial dispatch queues, MainActor isolation).
- 879 unit tests across 26 files, auto-discovered via Xcode synchronized groups.
wolfwave/
├── apps/
│ ├── native/ # Native macOS app (Swift, SwiftUI, AppKit)
│ │ ├── wolfwave/ # App source
│ │ ├── WolfWaveTests/ # Unit tests
│ │ └── wolfwave.xcodeproj # Xcode project
│ ├── docs/ # Fumadocs documentation site
│ └── marketing/ # Remotion-based promo videos
├── assets/ # Brand assets, logos
├── CHANGELOG.md # Release history
├── Makefile # Build, test, release targets
├── package.json # bun workspaces root
└── turbo.json # Turborepo pipeline config
Questions or feedback?
- Discord: Join my server
- Issues: GitHub Issues
- Docs: mrdemonwolf.github.io/wolfwave
Made with love by MrDemonWolf, Inc.
