CLI tool
kmikiy/SpotMenu avatar
kmikiy/SpotMenu

SpotMenu: now playing in the macOS menu bar

Spotify & Apple Music in your macOS menu bar

3,141 stars190 forksSwiftMIT

At a glance

What is it?
A Swift and SwiftUI menu bar utility for Spotify and Apple Music with hover playback controls, global hotkeys, and track liking over the Spotify Web API.
Who is it for?
SpotMenu is a good example of a small macOS utility done properly: signed, notarized, updated through Sparkle, installable with a Homebrew cask, and configurable without touching a config file. The Spotify Web API dependency is the one thing that constrains it, since track liking needs your own developer app credentials while everything else works without any.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 148 days ago.
What is it written in?
Mainly Swift, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 10, 2026, and from our analysis. They are not legal advice.

Editorial analysis

Three ways to install it

The README offers a direct download, Homebrew and a source build, in that order, and the middle one is a single line.

sh
brew install --cask spotmenu

The cask route is the one to prefer, because a cask is how Homebrew distributes signed application bundles rather than formula source. If you would rather not use a package manager, the download path points at GitHub Releases for the latest `SpotMenu.app.zip`, and the README states that the app is signed and notarized and includes automatic updates via Sparkle. Notarization matters more than it used to: it is what lets Gatekeeper let the app run without the user having to clear a quarantine flag, which is exactly the friction the mitan project documented as a support issue.

Building from source has its own requirements, stated as macOS 13 or later, which is Ventura, and Xcode 15 or later:

bash
git clone https://github.com/kmikiy/SpotMenu.git
cd SpotMenu
open SpotMenu.xcodeproj

The repository tree gives you a sense of the shape of a native Mac project: a `SpotMenu/` source directory, the `SpotMenu.xcodeproj/` project file, `SpotMenuTests/` and `SpotMenuUITests/`, a `Sparkle/` directory for the update framework, an `appcast.xml` that Sparkle polls, and a `website/` directory that backs the project page.

What the menu bar item actually does

The interaction model is three gestures, which is the kind of restraint that makes a menu bar app pleasant.

Left-clicking the icon shows or hides the playback panel. Right-clicking opens a context menu. Hovering over the panel reveals the playback controls, which is where the album art, the play and pause button and the skip controls live.

The menu bar text itself is configurable in more detail than you would expect. You can show or hide the artist and the song title independently, and independently toggle a playing icon, a liked icon and the app icon. Compact view switches the display between the full artist and title treatment and a shorter form, and maximum width is adjustable in points across a stated range of 40 to 300, which is how you stop a long track name from pushing every other menu bar item across your screen.

Playback state updates on its own, so there is no polling button to press. Global hotkeys cover play and pause, next and previous track, and like, unlike and toggle like, with the Spotify-only note on the last three.

Player selection has three modes: automatic, which uses whichever player is active, or an explicit choice of Spotify or Apple Music. Automatic is the sensible default, and pinning one is what you want if both are installed and you only care about one.

Track liking needs your own Spotify developer app

Everything else in the app works without credentials. Track liking does not, because it goes through the Spotify Web API rather than reading local player state, and that requires an application registered under your own Spotify developer account.

The README's setup sequence is eight steps. Create an app in the Spotify developer dashboard with any name and description, open its settings, add a redirect URI, save, copy the client ID, then in SpotMenu open Preferences, go to the Music Player section, enable Track Liking, paste the client ID and complete the login flow.

The redirect URI is a custom scheme pointing back at the app rather than an https URL:

code
com.github.kmikiy.spotmenu://callback

This is standard practice for native OAuth clients, since the callback never leaves your machine, but it does mean the app is registering an identity that a Spotify developer app must be told about. The feature is also explicitly marked Spotify only, because Apple Music has no equivalent public liking API available here.

Worth being clear about what this does and does not need: you are not running a server or hosting a callback. The flow is entirely local, and the only thing you supply is a client ID.

Preferences, from the left-click on the menu bar icon

Preferences are reached by right-clicking the menu bar icon, and they are organised into four groups.

Music Player holds the automatic, Spotify or Apple Music choice, along with the Track Liking toggle and the client ID field. Playback Appearance controls the hover overlay's visual treatment: hover tint colour, foreground colour, blur intensity and hover tint opacity. Separating tint colour from opacity is a small decision that lets you keep one hue and vary how strongly it washes over the panel.

Menu Bar holds the display toggles described earlier, the compact view mode, the maximum width setting, and, as of version 2.3.0, a Long-form Content section. That section exists because audiobooks and podcasts do not have a single artist and title pair. The three options are title only, chapter or episode only, and both combined, which is the difference between seeing the book and seeing where you are in it.

Shortcuts assigns global hotkeys to play and pause, next and previous track, and the three like actions.

Version 2.2.0 redesigned this window and added live preview sections, so changes to colours and fonts are visible while you make them rather than after you close the window. That release also added font weight selection for the menu bar text.

A signed, notarized app with Sparkle updates

The release history documents a project that has been fixing its distribution story. Version 2.1.2, from 2025-09-09, lists as a known issue that the app is not signed with an Apple Developer ID, and tells users they must allow it through System Preferences and Security and Privacy. That release is otherwise about responsiveness: instant UI feedback when play, pause or skip is triggered, immediate status bar updates including the like status, and the elimination of jitter where the status bar text would briefly truncate and then expand.

Version 2.2.0, from 2025-11-10, brought macOS 26 Tahoe compatibility along with the preferences overhaul and font weights.

Version 2.3.0, from 2026-01-29, is the release that changed the distribution model. Automatic update checking through Sparkle arrived, with a notification when a new version is available and a single-click install, plus a Software Updates section in the About preferences with toggles for checking and downloading, a view of the last check date, and a manual check button. The same release added audiobook and podcast support, including detection of audiobooks by a `spotify:chapter:` URI prefix, and lowered the minimum macOS version to 13.0, which the notes describe as going back three major versions.

The README's claim that the app is signed and notarized with Sparkle updates reflects that 2.3.0 state, so the earlier unsigned caveat in 2.1.2 no longer applies to current builds. At 3,140 stars and 187 forks with 27 open issues, this is a well-used utility, and the last push was on 2026-05-15.

Where it sits against the other menu bar options

Mac users who want the current track visible have a handful of established options, and SpotMenu's related searches turn up names like Tuneful and PlayStatus as the usual comparison points. What separates a menu bar utility is rarely the display, since all of them show an artist and a title. It is the details.

The compact view and the adjustable maximum width matter on a busy menu bar, and a native SwiftUI app with a signed and notarized bundle avoids the Gatekeeper friction that web-based or unsigned alternatives run into. Global hotkeys with per-action assignment are more configurable than most. Spotify track liking over the Web API is the feature that makes it useful rather than decorative, and doing it locally without a server is the right way round.

The multi-player support is also more than a checkbox. An app that reads whichever player is active means you can keep Spotify for desktop listening and Apple Music for something else without reconfiguring anything.

For a utility like this, the honest test is whether it survives in your menu bar for a month. The things that would push it out are the compact view not being narrow enough, no way to hide the title, or update prompts interrupting something. All three are configurable, which is the main reason to expect it to stay.

Editorial conclusion

SpotMenu is a good example of a small macOS utility done properly: signed, notarized, updated through Sparkle, installable with a Homebrew cask, and configurable without touching a config file. The Spotify Web API dependency is the one thing that constrains it, since track liking needs your own developer app credentials while everything else works without any. For a user who already runs several menu bar utilities, the compact view, the configurable maximum width and the per-action global hotkeys are the details that decide whether it stays installed. Start with the Homebrew cask, leave automatic player detection on, and add Spotify credentials only if you want the like button.

Frequently asked questions

How do I install SpotMenu on my Mac?

The shortest route is the Homebrew cask, `brew install --cask spotmenu`. You can also download `SpotMenu.app.zip` from GitHub Releases, where the app is signed and notarized, or clone the repository and open `SpotMenu.xcodeproj` in Xcode 15 or later on macOS 13 or newer.

Does track liking work without setting up my own Spotify app?

No. Liking and unliking goes through the Spotify Web API, so you need to create an app in the Spotify developer dashboard, add the redirect URI `com.github.kmikiy.spotmenu://callback`, copy the client ID, and paste it into Preferences under Music Player with Track Liking enabled. Everything else in SpotMenu works without credentials, and liking is Spotify only.

How do I stop the now playing text from taking over my menu bar?

Use the Menu Bar preferences. You can hide the artist or the song title independently, turn off the playing, liked and app icons, switch on compact view, and set the maximum width between 40 and 300 points. Preferences are reached by right-clicking the menu bar icon.

Does SpotMenu support Apple Music?

Yes, for display and playback control. The Music Player preference offers Automatic, which follows whichever player is active, or an explicit choice of Spotify or Apple Music. The Spotify Web API integration for liking tracks is the exception and is marked Spotify only.

What changed in the most recent SpotMenu release?

Version 2.3.0, published 2026-01-29, added automatic update checking through Sparkle with a Software Updates section in preferences, audiobook and podcast display options under Menu Bar and Long-form Content, and lowered the minimum macOS version to 13.0. Version 2.2.0 before it added macOS 26 Tahoe compatibility and a redesigned preferences window.

Official sources

  1. kmikiy/SpotMenu on GitHub
  2. License: MIT
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/kmikiy-spotmenu.svg)](https://hysenlabs.com/projects/kmikiy-spotmenu)