# netease-cloud-music-gtk: a GTK4 NetEase Cloud Music client for Linux

> A Rust and GTK4 desktop client for NetEase Cloud Music, packaged for openSUSE, Arch, Ubuntu, Debian, Flatpak, Nix and Gentoo. Here is what it does, how to install it, and where it stops being the right tool.

**gmg137/netease-cloud-music-gtk** — Linux 平台下基于 Rust + GTK 开发的网易云音乐播放器

- Repository: https://github.com/gmg137/netease-cloud-music-gtk
- Stars: 2,377 · Forks: 133
- Language: Rust
- License: GPL-3.0
- Published: 2026-09-28 · Updated: 2026-09-28 · Language: en
- Canonical page: https://hysenlabs.com/projects/gmg137-netease-cloud-music-gtk

## What netease-cloud-music-gtk replaces, and for whom

NetEase Cloud Music is a Chinese streaming service whose official Linux support has historically been thin. This project is a third-party desktop client that talks to the service's API rather than wrapping a web page. The README frames the goal as compatibility and stability on Linux compared with the official version, and lists a Rust plus GTK4 stack as the reason it starts and scrolls quickly relative to the Node and Python clients that came before it.

The audience is narrow and specific: Linux users who already have a NetEase Cloud Music account and want a native window, media-key integration and desktop lyrics rather than a browser tab. It is not a general music player. There is no local library scanner in the roadmap, and nothing in the README suggests it will index files on disk. If your library lives in FLAC folders rather than on NetEase's servers, this is the wrong program.

## How the GTK4 client talks to the NetEase API

The architecture is a single Rust binary linking GTK4 and libadwaita for the interface, GStreamer for playback, and a separate crate for the service API. Cargo.toml pins that API crate to a git tag, tag 2.2.0 of netease-cloud-music-api, which means the client's behaviour is tied to a specific revision of a companion repository rather than a crates.io release. That is a deliberate coupling: when NetEase changes an endpoint, the fix lands in the API crate and the client bumps the tag.

Playback does not go through GTK at all. GStreamer and gstreamer-play handle the audio pipeline, which is why the runtime dependency list is dominated by GStreamer plugin packages (base, good, bad and ugly). The ugly set is the one people forget, and without it some codecs simply fail to decode. Desktop integration is handled by mpris-server for the media player interface and ksni for a status notifier item, so media keys and tray extensions work outside the app window.

State is local and modest. The FAQ states that cached music lives in .cache/netease-cloud-music-gtk4 under the user's home directory. There is no server component and no account data leaves the machine except through the API calls themselves.

## Installing netease-cloud-music-gtk on Linux

The README documents distribution packages for most major families and treats source builds as a fallback. On openSUSE Tumbleweed the package is in the main repositories:

```bash
sudo zypper in netease-cloud-music-gtk
```

On Arch, the AUR package is named netease-cloud-music-gtk4, and the archlinuxcn repository carries the same name:

```bash
paru -S netease-cloud-music-gtk4
sudo pacman -Syu netease-cloud-music-gtk4
```

Ubuntu users add a PPA before installing, and the README targets 26.04:

```bash
sudo add-apt-repository ppa:gmg137/ncm
sudo apt update
sudo apt install netease-cloud-music-gtk
```

The Flatpak build is published on Flathub under the application ID com.github.gmg137.netease-cloud-music-gtk, and Nix users can install it from nixpkgs:

```bash
nix-env -iA nixpkgs.netease-cloud-music-gtk
```

After launch, the first real task is signing in. The roadmap lists both QR code login and verification-code login as complete, so a phone with the NetEase app can scan the code shown in the window instead of typing a password. Once signed in, the discover page, toplists, playlists, search and the personal page become available, and the play bar at the bottom controls playback.

## Packaging channels, nightly builds and what they cost you

The repository ships nightly builds rather than tagged stable releases: nightly-20260906, nightly-20260828 and nightly-20260822 are the most recent, dated 2026-09-06, 2026-08-28 and 2026-08-22. The last push to the default branch was on 2026-09-06. The README describes no stable release channel, no changelog and no deprecation policy, so anyone installing a nightly is choosing to track a moving target.

The practical consequence is that upgrading is not a single decision. Distribution packages, the PPA, the AUR package and the Flathub build each move on their own schedule, and the version in Cargo.toml (2.5.4) is not the same identifier as the nightly tags. If you install from a distro repository you get whatever that maintainer last built; if you install the Flatpak you get Flathub's cadence. Mixing channels on one machine is a reliable way to end up with two different API crate revisions in play.

The licence is GPL-3.0, stated in the README and present as COPYING in the repository root. For end users this changes nothing about running the program. For anyone redistributing a modified build, the copyleft terms apply to the source they ship, and because the client links a separately tagged API crate from another repository, that dependency's own licensing is worth checking rather than assuming. This is not legal advice; read COPYING and the API repository's terms yourself.

## Where netease-cloud-music-gtk breaks down

The README's own framing is the honest limitation: apart from network outages or NetEase API restrictions, the author claims there are no runtime problems. Those two exceptions are large. Because the client depends on an unofficial API crate pinned to a git tag, a server-side change at NetEase can break playback, search or login until the tag is bumped and a new build reaches your distribution. You have no control over that timeline.

Desktop lyrics are the second soft spot. The roadmap marks them complete only with a dependency on desktop-lyric or osdlyrics, and the FAQ admits that osdlyrics may not match lyrics correctly out of the box. The documented fix is to open osdlyrics preferences, go to lyric location, then filename, and add the matching rule %t-%p-%a. That is a manual configuration step in a third-party program, not something the player handles for you.

The tray icon is a third case. Under GNOME there is no tray by default, and the FAQ's answer is to install a shell extension or use an MPRIS-capable extension, or simply click the launcher icon again to raise the window. On a stock GNOME session, closing the window can look like quitting the app when it has not.

Finally, the client is single-service by design. It does not play local files, it does not aggregate other streaming providers, and it has no offline mode beyond whatever the cache directory happens to hold.

## How it differs from Electron-based NetEase clients and general players

The closest comparisons in the search data are YesPlayMusic, Vutronmusic, Feeluown and Resonance, and they split into two groups. YesPlayMusic and Vutronmusic are web-technology clients: they render the service through a browser engine and ship a much larger runtime. netease-cloud-music-gtk is a compiled Rust binary with GTK4 widgets, and the README claims an install size under 3 MB with a minimal runtime dependency set. That size difference is the whole argument for the GTK approach, and it comes with the GTK constraint: the interface follows GNOME conventions and expects libadwaita 1.6 and GTK 4, so it looks native on GNOME and somewhat foreign on desktops that do not follow those conventions.

Feeluown and Resonance sit on the other side. They are general-purpose players that support multiple backends, so they can play local files and several streaming sources through plugins. netease-cloud-music-gtk does one service and does it natively. If you want one window for your local library and your streaming account, a multi-backend player is the better fit; if you want the NetEase experience to feel like GNOME Music, this project is the narrower and more coherent choice.

## Conclusion

Adopt netease-cloud-music-gtk if you already hold a NetEase Cloud Music account, run a GTK4 desktop with GStreamer, and want a native player instead of a browser tab or an Electron wrapper. Do not adopt it if you need Spotify or local-file library management, because the project is scoped to one streaming service. Before installing, check which of the listed channels carries a package for your distribution and confirm the GStreamer plugin set is present; if you intend to build from source, note that the README marks that route as not recommended and requires meson, ninja, libgtk-4-dev, libadwaita-1-dev and the GStreamer development packages.

## FAQ

### Is NetEase Cloud Music available in the USA?

The README does not describe regional availability of the NetEase Cloud Music service itself. It only documents this GTK4 client, which talks to the service's API and is packaged for Linux distributions regardless of where the user is located.

### What is NetEase Cloud Music?

It is the streaming service this project is a client for. The README describes netease-cloud-music-gtk as a NetEase Cloud Music player built with GTK4 and Libadwaita for Linux, and the client depends on the netease-cloud-music-api crate to reach it.

### What is the best music streaming app for Linux?

The README makes no comparative claim about Linux music apps in general. It does state that this client is built specifically for Linux, tested on openSUSE Tumbleweed with GNOME, and packaged for openSUSE, Arch, Ubuntu, Debian, Flatpak, Nix and Gentoo.

### Is NetEase Cloud Music free?

The README does not state pricing or subscription terms for the NetEase Cloud Music service. It only covers the client, which is licensed GPL-3.0 and installable from the channels listed in the README.

## Sources

- [gmg137/netease-cloud-music-gtk on GitHub](https://github.com/gmg137/netease-cloud-music-gtk)
- [Issues](https://github.com/gmg137/netease-cloud-music-gtk/issues)
- [License: GPL-3.0](https://github.com/gmg137/netease-cloud-music-gtk/blob/master/LICENSE)
- [README](https://github.com/gmg137/netease-cloud-music-gtk/blob/master/README.md)
- [Releases](https://github.com/gmg137/netease-cloud-music-gtk/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/gmg137-netease-cloud-music-gtk
