English | 中文
A desktop audio player built with Wails, powered by a Go backend and a Vue 3 frontend. It features a vinyl-record-inspired interface, a built-in equalizer, spectrum visualization, and synchronized lyrics — just point it at your local music and press play.
- 🎵 Multi-format support: MP3, FLAC, WAV, M4A, OGG (decoded natively by WebView2)
- 🏷️ Automatic metadata: reads embedded title, artist, album, and cover art
- 🎚️ 6-band equalizer: built-in presets (Flat, Pop, Rock, Jazz, Classical, Bass, Vocal) plus custom gains
- 📊 Real-time spectrum visualization: dynamic audio spectrum powered by the Web Audio API
- 📜 Synchronized lyrics: auto-loads
.lrcfiles matching the audio file name and highlights lines during playback - 🎨 Multiple themes: Retro, Dark, Light, and Minimal
- 🔀 Playback controls: shuffle, repeat one/all, volume, and seek
- 📁 Local media library: import folders or individual files; the library is persisted and restored on restart
- 🖼️ Frameless window: custom title bar and window controls
![]() Retro (Dark) |
![]() Immersive (Dark) |
![]() Modern (Light) |
![]() Simple (Light) |
| Layer | Technology |
|---|---|
| Desktop framework | Wails v2 |
| Backend | Go 1.25 |
| Frontend | Vue 3 + Vite |
| Metadata parsing | dhowden/tag |
| Audio processing | Web Audio API (equalizer + spectrum) |
Backend modules:
main.go— application entry point; configures the Wails window and starts the media serverapp.go— app logic bound to the frontend (library loading, file pickers, window controls)library.go— music library management: scans files, extracts metadata, builds Tracksmediaserver.go— a dedicated loopback HTTP server that streams audio, cover art, and lyrics via Range requestsstore.go— library persistence (saved to%AppData%/VinylPlayer/library.json)
Note: media assets run on a separate loopback port (rather than the Wails asset server) so that streaming and seeking work correctly in both
wails devand production builds.
- Go 1.25+
- Node.js (with npm)
- Wails CLI:
go install github.com/wailsapp/wails/v2/cmd/wails@latest - On Windows, the WebView2 runtime is required (usually pre-installed on Win10/11)
Run in the project root for live frontend reload:
wails devTo debug in a browser and call Go methods, open http://localhost:34115.
Produce a redistributable, production build:
wails buildThe output is VinylPlayer.exe.
- On first launch, the bundled
audios/sample tracks are loaded automatically. - Import a local music folder or one/multiple audio files from the UI; the library is saved automatically.
- Place a
.lrclyric file in the same directory with the same name as the audio file to enable synchronized lyrics. - Choose an equalizer preset or manually adjust the 6 bands in the equalizer panel.
- Switch the interface style anytime via the theme switcher.
VinylPlayer/
├── app.go # App logic bound to the frontend
├── main.go # Application entry point
├── library.go # Music library & metadata parsing
├── mediaserver.go # Local media streaming server
├── store.go # Library persistence
├── audios/ # Sample audio
└── frontend/ # Vue 3 frontend
└── src/
├── components/ # UI components (player, lyrics, equalizer, etc.)
└── composables/ # Playback logic & theming (usePlayer / useTheme)
You can configure the project by editing wails.json. See the Wails project configuration docs for details.



