一个基于 Electron、React 和 TypeScript 构建的桌面端第三方网易云音乐播放器。基于 React 与 Electron 的第三方网易云音乐桌面客户端,支持以独立的多窗口(如评论、图片、歌单专辑、设置等)展示数据,支持动态取色、歌词展示、音乐频谱、桌面歌词、托盘和简单流体背景等功能。
第二个预览版本已发布,可前往 Releases 页面下载。
当前主要支持:
- Windows x64
- Linux amd64
AiraMusic 是一个 Yarn workspaces monorepo。桌面壳、渲染层、缓存服务和 WASM 能力分在不同 package 中,运行时由 Electron 主进程统一编排。
packages/ui ── 由 Vite 构建的多窗口渲染层
│
├── /api ──► 网易云 API 服务(@neteasecloudmusicapienhanced/api)
└── /cache ──► Go 缓存服务(Gin)
packages/app ── Electron 主进程
├── 注册 IPC handler 和自定义应用协议
├── 在 utility process 中启动网易云 API 服务
├── 在 utility process 中启动 Express 代理服务
└── 通过 @mahiru/store 启动 Go 缓存服务二进制
packages/wasm ── 渲染层使用的 Rust + wasm-bindgen 模块
| Package | 职责 | 主要依赖 |
|---|---|---|
packages/ui |
渲染层应用。Vite 构建 index、login、mini、lyric、tray、image、comments、display 等多个入口,全部使用 React。 |
React 19, Vite 8, Tailwind CSS 4, SCSS, React Router 7, Zustand, Jotai, Motion, Lucide, Heroicons, Axios, @applemusic-like-lyrics/lyric, @mahiru/wasm |
packages/app |
Electron 主进程。负责应用启动、窗口管理、托盘注册、IPC handler、自定义协议、服务生命周期和 Electron 打包入口。 | Electron 40, tsup, @neteasecloudmusicapienhanced/api, Express, express-http-proxy, electron-store, Zod, @mahiru/store, @mahiru/ipc |
packages/store |
本地缓存服务。它是一个 Go HTTP 服务,渲染层通过 /cache 访问;同时提供 TypeScript 启动器,供 Electron 应用启动和停止服务进程。 |
Go 1.25, Gin, gin-contrib/cors |
packages/wasm |
Rust WebAssembly 包,提供渲染层使用的原生性能工具。目前包含歌词解析、主题/图片颜色处理、频谱处理、搜索辅助和 WebGL renderer 支持。 | Rust 2024, wasm-bindgen, wasm-pack, serde, tsify, image, rustfft, regex, web-sys |
packages/ipc |
主进程和渲染层共享的 TypeScript IPC 类型定义,覆盖 invoke 和 message 契约。 | @mahiru/log |
packages/log |
app 和 renderer 共享的日志基础能力。 | TypeScript |
- 包管理:Yarn 4 workspaces。
- TypeScript 检查:基于 project references,使用
tsgo -b。 - 前端测试:Vitest + jsdom。
- 缓存服务检查:
go test、go fmt、go vet。 - WASM 检查:
cargo test、cargo fmt、cargo clippy。 - 应用打包:
electron-builder。
- Node.js
- Rust
- wasm-pack
- Go
安装 wasm-pack:
cargo install wasm-pack yarn install --frozen-lockfile yarn build:wasm && yarn build:store # 首次运行
yarn dev yarn build