Find your next open-source project

Search by name, purpose, or keyword — or paste a GitHub repository URL

egoist/mygo-music

Media & Design

A native Go desktop music player for local files, with JavaScript plugins adding streaming catalogs and accounts.

241
50
Go
AGPL-3.0
2 days old

What it is

MyGo Music is a desktop music player built in Go on the MyGo native UI toolkit, with no WebView. It plays local files out of the box and relies on plugins for anything beyond that: accounts, online catalogs, podcasts, stations, comments and extra pages.

Built-in playback covers tagged local files with covers and .lrc lyrics, playlists, liked songs, search, albums and artists. The Now Playing view offers lyric-stage styles, a cover wall, queue, shuffle and repeat. It also handles audio cache, fades on pause/seek, loudness normalization, session restore, macOS notch player, tray and media keys, plus English and Simplified Chinese UI (feature list).

Podcast captions are transcribed on-device as episodes play, using sherpa-onnx and Qwen3-ASR; the app downloads these components when the listener asks for them.

Quick start

Building from source requires Go and the MyGo toolchain:

go tool mygo dev     # run in development
go tool mygo build   # package into build/
go test ./internal/...

The README does not cover obtaining a prebuilt release, so the source build above is the documented path (build commands).

To try a plugin, copy examples/demo-plugin into the app's plugins folder (Settings > Plugins > + > Show Plugins Folder). Alternatively, install from a GitHub repository or a zip via the + button in Settings > Plugins. A plugin is a folder with plugin.json and one JavaScript or TypeScript file; nothing needs to be compiled, and the same plugin runs on every platform.

Writing and publishing plugins

A plugin exports functions for the capabilities it offers, such as search, stream, home, lyrics or the remote* playback family. The full export table and the JSON shapes live in internal/music/music.go. navigation defines the plugin's sidebar, and minAppVersion sets the oldest compatible app version.

Access outside JavaScript's standard library is gated by permissions in plugin.json: network lists reachable hosts for fetch, and process lists programs host.spawn may launch. The host object also provides persistent storage, settings, translations, sign-in helpers, and crypto utilities (permissions and host API).

To publish, put plugin.json at the top of a public GitHub repository, optionally attach a platform zip to a release, and tag the repository with mygo-music-plugin to appear on the plugins page. An install link like mygo-music://install-plugin?repo=owner/repo opens the app and asks before installing.

Constraints

  • Plugin permissions are enforced at install/update time; a new version requesting more permissions prompts the listener again. process permissions are especially sensitive because a launched program runs with the listener's privileges.
  • Native program access must ship one binary per platform, selected through host.platform and host.arch.
  • Plugin translations go in locales/<language>.json; built-in languages are English and Simplified Chinese.
  • The project is licensed AGPL-3.0 (license).

HotRepo's take

MyGo Music first appears in HotRepo's new-project snapshot for 2026-11-06: 147 stars and 28 forks at the observation point, with a reported gain of 42 stars and 8 forks over a roughly one-hour window. There is no best all-language daily rank recorded, so this is a single early snapshot rather than an established trend. The design choice worth watching is the plugin surface: a native Go/MyGo shell plus JavaScript plugins with explicit permissions is an unusual split, and the README documents that boundary in more detail than the player UI itself.

Written by AI from the project's README, updated . The project's own docs are the source of truth.