Library / SDK
pure-music/PureMusic avatar
pure-music/PureMusic

Cotton Music: one player for local files, cloud drives and self-hosted servers

Cotton Music(棉花音乐): Player for Local file, Drive, Navidrome, Subsonic, Emby, Jellyfin, Plex. Supports Android, iOS, and PC

602 stars25 forksKotlinLicense varies

At a glance

What is it?
Cotton Music is a Kotlin music player for Android, iOS, macOS, Windows and Linux that reads local storage, a long list of cloud drives and the usual self-hosted media servers. Two facts in its own README should shape your decision: the current version was rewritten and is no longer open source, and the desktop build is a hobby project.
Who is it for?
Adopt Cotton Music if you want one player that opens the same library whether it sits on your disk, in a Google Drive or OneDrive account, or behind a Navidrome, Subsonic, Plex, Emby or Jellyfin server, and you are comfortable with an application whose current version is closed source.
Can I use it commercially?
Not without permission. GitHub finds no licence file in the repository, and without a licence all rights are reserved by default: you may read the code but not reuse it. Check the README, or ask the authors, before using it.
Is it still maintained?
Yes. The repository received new commits within the last day.
What is it written in?
Mainly Kotlin, according to GitHub's language statistics.

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

Editorial analysis

One player over a wide range of backends

The scope is a player, not a library service. The app is written in Kotlin and the README says it supports Android, iOS, macOS, Windows and Linux today, with more platforms planned. The library side is where the breadth sits. Playback works from local storage, and from Baidu Drive, Alibaba Drive, WebDAV, Google Drive, OneDrive, Dropbox and other cloud storage services. On top of that it talks to media servers, with Plex, Emby, Jellyfin, Subsonic and Navidrome named explicitly. That combination is the reason to look at it. A self-hosted Navidrome library and a folder of files in a WebDAV-mounted NAS present very different problems to an app, and having one player handle both removes the need for a second application for each kind of source. The README also warns that some services may require a paid subscription, with details on the official site, which is a reminder that the client side of a cloud drive is not always free.

The current version is not open source

The Thanks section of the README carries the most important fact about the project, and it is easy to skim past. This project was originally based on RetroMusicPlayer, and the related code was open source. The latest version has since been rewritten as a cross-platform application and is no longer open source. So the repository you are looking at is not the source of the application most people install. The tree reflects that, with an app/ directory, an appthemehelper/ directory, a README in English and Chinese, a screenshot and the .github directory, which is a thin shell for what is now a closed cross-platform codebase. There is also no licence identifier listed for the repository, and the primary language is recorded as Kotlin, which suggests the open parts are limited rather than the whole engine. For an evaluation, that means you cannot audit what the player does with your cloud credentials, and you cannot fork it into your own product without asking.

The desktop build is a hobby project

One line in the README deserves to be quoted as a whole sentence, because it is the kind of statement that is easy to miss between the badges and the download links. The PC version is currently maintained as a hobby project and does not receive strong support. The mobile clients are the ones with a normal release cadence, and the evidence is in the tag list, which shows v5.0.0-beta7, v5.0.0-beta8 and v5.0.0-beta9 in the second half of October 2026. There is no stable 5.0.0 in the listed releases, so the current line is a beta series, which is consistent with a version that was rewritten as a cross-platform application and is still settling. If you are installing on Windows, macOS or Linux, the reasonable expectation is that you are running a hobby project build, and that issue reports and fixes move at a different speed than on Android or iOS.

Where the builds come from

Distribution is spread across the usual channels, and the README lists them without a single canonical download. There is an official website, a Google Play listing for the Android app under the package name com.caij.puremusic, an Apple store entry, and APK and PC downloads taken from the GitHub releases page of the repository. The GitHub releases page is therefore the place to find the desktop builds and the APK, which is also where you can pick a specific beta rather than the newest one. The README is written in two languages, with an English README.md and a Chinese README_ZH.md, and the project asks readers to follow the developer, Caij, if it helps them. The project page at music.caij.xyz is where the paid subscription details for some of the storage services are said to live, and it is also the only place in the README where those conditions are explained at all.

Two companion projects sit alongside it

The Music Tools section names two related repositories, and they are worth reading as a picture of the intended setup. music-tag-web is described as a music tag editor for editing metadata in local music files, supporting mainstream file formats and also providing backend support for the Subsonic service, so it is the tool for fixing the metadata your player displays. The second is navidrome, described as a music library hosting service, and linking it is a clear signal about the direction of travel. A self-hosted server plus an open source tag editor plus a client app covers the whole chain from files to playback, and the fact that the editor also speaks Subsonic means the metadata you correct reaches the server and therefore every client, not only the phone you typed it on. That is the arrangement the project is built around, and it is also the arrangement where the local file mode is most useful, as a source you can import from.

What the README does not tell you

There are notable silences, and for a decision about switching players they matter. The README does not document offline playback, gapless playback, lyrics handling, audio format support beyond the tag editor's mention of mainstream formats, or whether the app can sync playback state between a phone and a desktop. It does not say whether the WebDAV, Google Drive or OneDrive support is full file management or a read-only mount, and it does not list which versions of the media servers it has been tested against. It also does not describe a build you can make yourself, which follows from the earlier point that the current version is closed source, so there is no route to compile the app or to patch it. For a player, none of that is unusual, but if you are moving a serious library across from another client, the questions about sync and format coverage are the ones to answer through the app itself before you commit to it.

Editorial conclusion

Adopt Cotton Music if you want one player that opens the same library whether it sits on your disk, in a Google Drive or OneDrive account, or behind a Navidrome, Subsonic, Plex, Emby or Jellyfin server, and you are comfortable with an application whose current version is closed source. Do not adopt it if you need an auditable codebase, since the README says the latest cross-platform rewrite is no longer open source, and treat the desktop builds as a personal project, because the README says the PC version is maintained as a hobby project without strong support. Verify first which version you are installing, since the published tags are 5.0.0 betas, whether your drive or server needs a paid subscription, and which of the storage backends you actually use before you set it up as your only player.

Frequently asked questions

What is Cotton Music and what platforms does it run on?

Cotton Music is a Kotlin music player that supports Android, iOS, macOS, Windows and Linux, with more platforms planned. The player reads local files as well as cloud drives and self-hosted media servers.

Is Cotton Music open source?

The current version is not. The README says the project was originally based on RetroMusicPlayer, whose related code was open source, and that the latest version has since been rewritten as a cross-platform application and is no longer open source. No licence identifier is listed for the repository.

Which storage backends and media servers does Cotton Music support?

Playback works from local storage, Baidu Drive, Alibaba Drive, WebDAV, Google Drive, OneDrive, Dropbox and other cloud services, and it supports the Plex, Emby, Jellyfin, Subsonic and Navidrome media servers. Some services may require a paid subscription.

How well supported is the desktop version?

The README states that the PC version is currently maintained as a hobby project and does not receive strong support. The published tags are 5.0.0 betas from October 2026, with no stable 5.0.0 among the listed releases.

What related tools does the project recommend?

It links music-tag-web, a music tag editor for local music files that also provides backend support for Subsonic, and navidrome, described as a music library hosting service. The app itself is distributed through Google Play, the Apple store and the GitHub releases page for APK and PC builds.

Official sources

  1. Issues
  2. pure-music/PureMusic on GitHub
  3. README
  4. 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/pure-music-puremusic.svg)](https://hysenlabs.com/projects/pure-music-puremusic)

Was this useful?