# Ponymusic: an Android music player that needs you to run the NetEase API yourself

> Ponymusic is a Kotlin Android player built on Media3 and ExoPlayer that plays local files and pulls NetEase Cloud Music content through a self-hosted API server. The self-hosting requirement is the whole story: it is what makes the project usable and what makes it fail for most people.

**wangchenyan/ponymusic** — An Android online music player like NetEase Cloud Music, based on Media3 and ExoPlayer

- Repository: https://github.com/wangchenyan/ponymusic
- Website: https://juejin.cn/post/7294072229003952143
- Stars: 2,849 · Forks: 506
- Language: Kotlin
- License: not declared
- Published: 2026-09-28 · Updated: 2026-09-28 · Language: en
- Canonical page: https://hysenlabs.com/projects/wangchenyan-ponymusic

## What Ponymusic actually solves, and for whom

NetEase Cloud Music has no official public API, and its Android client is not open source. Ponymusic sits in the gap between those two facts. It is an Android app, written in Kotlin, that plays local audio files and also browses and plays NetEase Cloud Music content: daily recommendations, playlists, charts, search, likes and downloads. The README lists these as separate local and online feature sets, which is an honest split. The local side works on its own. The online side does not.

The audience is narrow but real. It is for Android users who want a NetEase client they can read the source of, and who are comfortable running a Node.js service. The README's own installation steps assume you have a computer on the same LAN as the phone, and it offers a Termux path for people who do not. That second path is telling: the maintainer knows the backend requirement is the biggest obstacle, and worked around it rather than removing it.

It is not for someone who wants to install from a store and start listening to online music in two minutes. Nothing in the repository suggests that is possible.

## Media3, ExoPlayer and the self-hosted NetEase API

Playback is built on Media3 and ExoPlayer, which the README names as the player core, upgraded in the 2.3.0 release. That choice matters because Media3 brings notification controls and system media integration along with the decoder, so the app does not hand-roll a playback service. The README also notes that 2.3.0 fixed a failure loading playlists with more than 1000 songs, which points at how the app pages through large lists.

The online half is a client to a separate server. Ponymusic does not talk to NetEase directly; it talks to NeteaseCloudMusicApi, a Node.js project by Binaryify, or to the NeteaseCloudMusicApiBackup fork. The app stores a base URL, entered through a domain setting in the navigation drawer, and sends requests there. The README describes the API as unofficial and says the server must be set up by the user.

The rest of the stack is conventional modern Android: MVVM for screens, Retrofit for HTTP, Room for the database, Hilt for dependency injection, Glide for images, and Firebase for analytics and crash collection. Routing uses the author's own crouter library, and the lyric view is the author's lrcview library. None of this is unusual, and that is the point: the interesting decision is the backend, not the app architecture.

## Installing Ponymusic and pointing it at an API server

The README gives two installation routes. The first assumes a computer on the same network as the phone. You install and run NeteaseCloudMusicApi following that project's own instructions, confirm the computer and phone share a LAN, then download the latest APK from the Ponymusic releases page.

The Termux route removes the computer. The README walks through installing Termux, then Node.js:

```bash
pkg install nodejs
```

It suggests confirming the install with node -v. Then you start the API service from the same terminal:

```bash
npx NeteaseCloudMusicApi@latest
```

The README says success looks like the console printing server running @ http://localhost:3000. That port number is the one the server reports, and it is the one you enter in the app.

With the server running, open Ponymusic, tap the hamburger button in the top left, open the drawer, and choose the domain setting. Enter the address of the server including the port. On the Termux path the README gives the exact value http://localhost:3000/ and says to restart the app afterwards. Once the domain is saved, the online features become reachable. The app requires Android 6.0 or later.

## Where Ponymusic breaks: the unofficial API is the failure mode

The single largest limitation is stated plainly in the README: the app uses an unofficial API, so you must run the API server yourself. Every online feature depends on a service the Ponymusic project does not control and does not ship. If NeteaseCloudMusicApi stops working, or NetEase changes something the library relies on, Ponymusic's online half degrades and there is nothing in the app that can fix it. The README's release history shows this has happened before: version 1.2.0 lists a fix for online music failing to load.

There is a second, quieter problem. The README says the 2.1.0 release's phone verification code login requires the newest version of the server-side code. That couples app versions to server versions. Running an older NeteaseCloudMusicApi checkout can leave a login method in the app non-functional, and nothing in the app tells you which server version it expects.

The local features are unaffected by any of this. If you only want to play files already on your phone, with lyrics, a notification control, a home screen widget and a sleep timer, the backend is irrelevant. That is the case where Ponymusic is the right tool. The case where it is wrong is online listening without a server, and there is no configuration that changes that.

## How Ponymusic differs from a plain local player

The obvious alternative is a local-only Android player, and the difference is not cosmetic. A local player reads MediaStore, plays files, and stops there. Ponymusic adds a network layer, an account layer (login by verification code or QR scan), and a server dependency, then builds daily recommendations, playlist sync, charts, search and download quality settings on top of it. You cannot get those features by adding a plugin to a local player, because the features are the server's responses.

A second comparison is more useful: against building your own client. The README links a series of Chinese-language articles on Juejin covering the player's construction, including the vinyl record UI, auto-scrolling lyrics and incremental loading of online lists. If you are writing an Android music app, Ponymusic is readable as a reference implementation of those pieces, and the lyric view is extracted as its own library, lrcview. What you would not be copying is the backend, which belongs to another project entirely.

Neither comparison is about which app is better. It is about where the boundary sits. Ponymusic's boundary is the HTTP call to a server you host.

## Maintenance, releases and the Apache 2.0 licence

The repository is not archived, and the last push was on 2026-09-16, which is recent. That does not mean fast releases. The release list shows 2.3.0-beta01 in March 2024 and 2.4.0-beta01 in October 2025, so more than a year separates those two beta tags. The README's update notes for 2.4.0 mention a home screen widget built with Glance, a landscape mode, and Android 16 support. The 2.3.0 notes cover the Media3 upgrade and the 1000-song playlist fix.

Upgrade cost is mostly on the server side. Because app versions can require newer server code, as the 2.1.0 notes say for verification code login, upgrading the APK without updating NeteaseCloudMusicApi can leave features broken. Budget for maintaining both.

The README carries an Apache License, Version 2.0 notice with a 2024 copyright to wangchenyan. Apache 2.0 permits commercial and private use and modification, and requires that the licence and notices be preserved. The repository metadata does not identify a licence, but the README text does. That discrepancy is worth resolving before you rely on it, and it is not something to settle without a lawyer if the stakes are high.

## Conclusion

Adopt Ponymusic if you already run NeteaseCloudMusicApi or are willing to run it in Termux on the same phone, and you want a Media3-based player with lyrics, notifications and a home screen widget. Do not adopt it if you expect a store-installable app that works without a backend, or if you need a supported API contract: the README says the API is unofficial, so breakage is a matter of when. Before committing, verify that the API server responds on the port you intend to enter in the domain setting, and check the release notes for the version you install.

## FAQ

### Does Ponymusic work without running a server?

The local features work on their own: playing files on the device, album art, lyrics, notification controls, the home screen widget, night mode and the sleep timer. The online features, including NetEase login, playlist sync, daily recommendations, charts and search, all go through the API server, which the README says you must set up yourself.

### How do I run the Ponymusic backend without a computer?

The README describes installing Termux on the Android phone, running pkg install nodejs, then running npx NeteaseCloudMusicApi@latest. When the console prints server running @ http://localhost:3000, you enter http://localhost:3000/ in the app's domain setting and restart the app.

### Which Android version does Ponymusic require?

The README lists Android 6.0 or later as the environment requirement. The 2.4.0 update notes also mention adaptation for Android 16.

### What is Ponymusic licensed under?

The README includes an Apache License, Version 2.0 notice with a 2024 copyright to wangchenyan. The repository metadata does not list a licence, so the README text is the only statement available.

## Sources

- [Issues](https://github.com/wangchenyan/ponymusic/issues)
- [Project website](https://juejin.cn/post/7294072229003952143)
- [README](https://github.com/wangchenyan/ponymusic/blob/master/README.md)
- [Releases](https://github.com/wangchenyan/ponymusic/releases)
- [wangchenyan/ponymusic on GitHub](https://github.com/wangchenyan/ponymusic)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/wangchenyan-ponymusic
