A modern, native desktop music player built with Tauri 2, Rust, and React.
Inspired by Apple Music — sortable library, sources (local + WebDAV), albums & artists views, synced lyrics with a blurred-cover overlay, shuffle / repeat, light/dark/system themes, and English/中文 UI.
- Multi-folder local library; recursive scan that ignores file changes that haven't actually changed (modification-time check) for fast re-scans
- File-system watching (
notify): folders rescan automatically when files are added / changed / deleted; missing tracks are removed - Multiple WebDAV remote sources alongside local folders. Each source can have its own credentials; lyrics + cover art are extracted and cached during sync
- Library, Albums (grid + detail), and Artists (left list + right detail) views
- Sortable Library columns: Title / Artist / Album / Format / Size / Time / Plays — click headers to sort, click again to reverse
- Cross-format playback (FLAC, MP3, AAC/M4A, OGG, Opus, WAV, ALAC, AIFF …) via
rodiowith thesymphonia-allbackend - Remote playback authenticates and streams from WebDAV servers
- Persistent Up Next queue + Recently Played history; combined side panel (history on top, queue below)
- Shuffle + 3-state repeat (off / list / one) with persisted preference
- Apple Music-style floating glass player bar; track title, artist and album on one line with a thin inline scrubber
- Lyrics extracted from tag metadata (ID3
USLT, VorbisLYRICS/UNSYNCEDLYRICS, MP4©lyr) and cached to the database - Full-window slide-up overlay with a blurred album cover background
- Synced LRC support (
[mm:ss.xx]): active line auto-scrolls and scales up; unsynced lyrics fall back to plain rendering - Smooth GPU-accelerated transform-based scroll (no native
scrollTopjitter) - Drag from anywhere on the lyrics page to move the window
- Light / dark / system theme with no flash-of-wrong-colors at startup
- English / 中文 language switch with a small built-in dictionary — switches instantly
- Per-source confirmation dialogs for any destructive action (remove folder, remove server, clear queue, clear history)
- Frameless window on macOS (overlay title bar) — drag the window from any non-interactive area at the top
- Cover art cached as data URLs; embedded covers extracted from tags
- Rust ≥ 1.77 (latest stable recommended) — install via rustup
- Node.js ≥ 20 (we test on 21.x) and npm ≥ 10
- Tauri 2 platform dependencies — see the Tauri prerequisites guide for your OS
- macOS: Xcode Command Line Tools (
xcode-select --install) - Linux:
webkit2gtk-4.1,librsvg2-dev,libssl-dev,gcc,pkg-config, … (full list in the Tauri docs) - Windows: Microsoft Edge WebView2 + MSVC build tools
- macOS: Xcode Command Line Tools (
# 1. install JS deps
npm install
# 2. run dev (spawns Vite + cargo run; opens the native window)
npm run tauri devThe first cargo build will be slow (compiling Tauri + rodio + symphonia from source). Subsequent rebuilds are incremental and quick.
Vite serves the UI on http://localhost:1420 and hot-reloads frontend changes. Rust changes trigger an automatic cargo build + relaunch via the Tauri CLI's file watcher.
npm run tauri buildThis produces a notarisation-ready bundle under src-tauri/target/release/bundle/ (.dmg on macOS, .msi / .exe on Windows, .deb / .AppImage on Linux). Replace the placeholder icons under src-tauri/icons/ before shipping.
mp3, flac, m4a, m4b, aac, ogg, oga, opus, wav, wma, alac, ape, aiff.
If the format isn't decoded by symphonia (or your build doesn't include the feature), playback will fail gracefully with an error toast.
Issues and PRs are welcome for noncommercial use. Please:
- Run
npm run buildandcargo buildbefore opening a PR to make sure the project builds cleanly - Match the existing code style; the project deliberately uses no comments unless the why is non-obvious
- For any new strings, add entries to both
enandzhdictionaries insrc/lib/i18n.ts
Beatify is licensed under the PolyForm Noncommercial License 1.0.0. You may use, copy, modify, and redistribute it freely for any noncommercial purpose — personal use, hobby projects, research, education and noncommercial organisations.
Commercial use is not permitted under this license. If you need a commercial licence, please open an issue to start a conversation.
The license does not affect any "fair use" rights you have under applicable law.




