# apple-music-discord-rpc reads Apple Music over JXA and posts to Discord

> This is a Deno script for macOS that asks the Apple Music app what is playing through JavaScript for Automation and mirrors it into Discord Rich Presence, and it is a small, readable automation project rather than a service.

**NextFire/apple-music-discord-rpc** — 🎵 Discord Rich Presence Client (profile status) for the macOS Apple Music app

- Repository: https://github.com/NextFire/apple-music-discord-rpc
- Stars: 843 · Forks: 57
- Language: TypeScript
- License: MIT
- Published: 2026-10-20 · Updated: 2026-10-20 · Language: en
- Canonical page: https://hysenlabs.com/projects/nextfire-apple-music-discord-rpc

## The mechanism is JXA asking the app, then Discord RPC

The repository is described as a Discord Rich Presence client for the macOS Apple Music app, and the stack is stated plainly at the top: Deno and JavaScript for Automation. The file layout shows the split. There is jxa.ts for the AppleScript side, discord.ts for the Rich Presence side, and music-rpc.ts as the entry point, plus a scripts/ directory holding the install and uninstall shell scripts and the launch agent plist. So the mechanism is a two part conversation: JXA is used to query the running application for the current track, and the result is handed to a Discord Rich Presence client to be shown as a profile status. The README notes that it works with local tracks and with the Apple Music streaming service, and that the target is Catalina and later plus legacy iTunes.

## Presence appears only when music is actually playing

The feature list is short, and each line is a decision rather than a boast. It can start in the background at login, and it deliberately avoids status bar icon clutter. The script is small and described as relatively easy to understand. Presence is enabled only when music is actually playing, which is the detail that separates this from the many presence clients that leave a stale track title on your profile. There is Apple Music matching, so the script tries to find the right metadata for what the app reports. And there is a fallback for local artwork, uploaded temporarily to litterbox.catbox.moe, which is the one behaviour in the list that deserves a second look before you install it, since it means bytes from your disk can end up on a public host whenever the matcher cannot find the cover locally.

## The Homebrew route installs the runtime with the formula

Two installation paths are documented, and the Homebrew one is recommended. After installing Homebrew, the commands are short.

```bash
brew install nextfire/tap/apple-music-discord-rpc
brew services restart apple-music-discord-rpc
```

The README explains what those commands do: they add the tap to Homebrew, install the formula along with Deno, and enable the launch agent, which starts it immediately. You may need to approve the installation of this third-party formula, and the README points at the tap trust documentation for that. The fact that Deno comes with the formula is the convenient part, since the alternative path asks you to install Deno yourself. The executable is also placed in your PATH under the name music-rpc.ts, so it can be run by hand for a foreground test before you trust the launch agent.

## The shell path needs Deno 2 or newer and a manual launch agent

The second path is for people who want to see exactly what is on their machine. It requires Deno v2 or later, then a clone and the install script.

```bash
git clone https://github.com/NextFire/apple-music-discord-rpc.git
cd apple-music-discord-rpc/
./scripts/install.sh
```

The install script copies the launch agent into ~/Library/LaunchAgents/ and edits it accordingly, which is the standard way a macOS program registers itself to start at login. Upgrading is a reset to origin/main followed by another run of the script.

```bash
cd apple-music-discord-rpc/
git fetch && git reset --hard origin/main
./scripts/install.sh
```

Uninstalling stops the service, removes the formula and untaps in the Homebrew case, and in the shell case runs the uninstall script and deletes the directory. The whole footprint is one directory and one launch agent, which is easy to reason about and easy to reverse.

## Where this stops working

The constraints are obvious from the stack, but worth stating. The script is macOS only, because JXA and the launch agent mechanism are macOS facilities, so there is nothing here for a Windows or Linux user. It is also bound to one player, the Apple Music app and legacy iTunes, so if you use a different music client this is the wrong project. The macOS version floor is Catalina and later. The Discord side is a Rich Presence client, which means the user needs Discord, and the script talks to a Discord application whose identity is not described in the README, so anyone worried about which application is posting on their behalf should check that before installing. The artwork upload fallback is the sharpest edge: when the matcher cannot find cover art for a local track, the image goes to litterbox.catbox.moe, a public temporary host, and on a work machine that is a disclosure you did not intend.

## A small project with a small maintenance surface

The repository is three TypeScript files, a scripts directory and a licence, with a renovate.json for dependency updates and a .github directory for workflows. There are no releases beyond the version tags, and the recent ones are 0.18.0 from 2026-09-08, 0.17.1 from 2026-04-15 and 0.17.0 from 2026-01-28. The last push was on 2026-09-13, so the project is being changed, though the pace is that of a personal utility rather than a library with a support burden. The licence is MIT, which is the permissive one and means you can read the three source files, adapt them to your own player, and redistribute that without asking. Given the size of the codebase, forking it to point at a different media player or to remove the artwork upload is a realistic option for anyone who needs to change its behaviour, and it is probably less work than waiting for the upstream project to add the feature.

## Conclusion

apple-music-discord-rpc suits a macOS user who wants Discord to show what the Apple Music app is playing, local tracks or streaming, and it suits anyone interested in a short, readable example of JXA talking to a macOS application with Deno as the runtime. It is the wrong tool for Windows or Linux, for a user of a different player, and for a shared machine where the upload of local artwork to a public temporary file host is not acceptable. Before installing it, read the install script before running it, decide whether the local artwork upload fallback is acceptable for your setup, and check that the Discord application the script talks to is one you control. The last push was on 2026-09-13 and the current release is 0.18.0 from 2026-09-08.

## FAQ

### How do I install apple-music-discord-rpc on macOS?

The recommended route is Homebrew: run brew install nextfire/tap/apple-music-discord-rpc followed by brew services restart apple-music-discord-rpc, which installs the formula with Deno and enables the launch agent. The alternative is to install Deno v2 or newer, clone the repository and run ./scripts/install.sh.

### What does the apple-music-discord-rpc script read from the system?

It uses JavaScript for Automation, listed in the repository as jxa.ts, to talk to the macOS Apple Music app, with legacy iTunes also supported, and it works with local tracks as well as the streaming service. The Rich Presence side is discord.ts.

### Does the Discord presence show when nothing is playing?

No. The README lists as a feature that presence is enabled only when music is actually playing, so the profile status does not linger with a stale track title.

### Where is local album artwork uploaded?

As a fallback, local artwork is temporarily uploaded to litterbox.catbox.moe, and that is listed among the features of the project alongside Apple Music matching.

## Sources

- [Issues](https://github.com/NextFire/apple-music-discord-rpc/issues)
- [License: MIT](https://github.com/NextFire/apple-music-discord-rpc/blob/main/LICENSE)
- [NextFire/apple-music-discord-rpc on GitHub](https://github.com/NextFire/apple-music-discord-rpc)
- [README](https://github.com/NextFire/apple-music-discord-rpc/blob/main/README.md)
- [Releases](https://github.com/NextFire/apple-music-discord-rpc/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/nextfire-apple-music-discord-rpc
