A local music player built with Tauri 2 + React 19, focused on a clean and efficient local music management experience.
![]() |
![]() |
![]() |
| 🎵 Local Music | ❤️ Liked Songs | 📋 Play History |
![]() |
![]() |
![]() |
| 🎤 Lyrics View | ⏸️ Paused | |
![]() |
![]() |
![]() |
| 🎨 Album Cover Background | 🌈 Different Album Colors | ⚙️ Settings |
![]() |
![]() |
|
| 📁 Local Playlist | 🙈 Hidden Songs |
- 🚀 Lightweight & Fast - Built with Tauri 2, small bundle size, quick startup
- 🎵 Wide Format Support - MP3, FLAC, WAV, DSF, DFF, OGG, AAC, M4A and more
- 🎤 Lyrics Support - LRC lyrics files and embedded lyrics with auto-scroll
- 🎨 Theme System - 5 themes (Blue, Orange, Khaki, Gray Blue, Olive Green, Neon Green), dynamic background colors
- 🔒 Privacy First - All data stored locally
- 📁 Smart Management - Multi-folder support, auto-cleanup deleted songs
▶️ Independent Play Queues - Each view (Local/Liked/Hidden/History) has its own play queue
- 🖱️ Scroll to Seek - Hover over the progress bar and scroll the mouse wheel to fast-forward/rewind
- 🔊 Scroll to Adjust Volume - Hover near the volume bar and scroll the mouse wheel to adjust volume
- 🎤 Click Album to Play/Pause - Click the album cover in the lyrics view to toggle play/pause
- 🔄 Mini Icon for Lyrics - Click the small album icon in the bottom-left to enter or exit the lyrics view
- 👁️ Hover to Reveal Lyrics - Hover the mouse over the lyrics view to display all lyrics clearly
- ✋ Drag Lyrics to Seek - Drag the lyrics to a specific line to start playing from that position
💡 Currently developed and tested on macOS Apple Silicon. Windows/Linux support coming soon.
| Format | Extensions | Status |
|---|---|---|
| MP3 | .mp3 | ✅ Full Support |
| FLAC | .flac | ✅ Full Support |
| WAV | .wav | ✅ Full Support |
| DSF/DSD | .dsf, .dff, .dsd | ✅ Full Support |
| OGG Vorbis | .ogg, .oga | ✅ Full Support |
| AAC/M4A | .aac, .m4a | ✅ Full Support |
| NCM | .ncm | |
| QMC | .qmc, .qmc0, .qmc3 |
- Tauri 2 - Cross-platform desktop framework
- SQLite + sqlx - Lightweight database
- rodio + Symphonia - Audio playback and decoding
- lofty - Audio metadata extraction
- tokio - Async runtime
- React 19 - UI library
- TypeScript - Type safety
- Tailwind CSS - Utility-first CSS
- Zustand - Lightweight state management
- Lucide React - Icon library
- sonner - Toast notifications
- colorthief - Album cover color extraction
- react-hotkeys-hook - Keyboard shortcuts
- es-toolkit - Debounce/throttle utilities
Jlocal/
├── src/ # Frontend code
│ ├── api/ # API wrappers
│ ├── components/ # Reusable components
│ ├── stores/ # State management (Zustand)
│ ├── views/ # Page views
│ └── hooks/ # Custom hooks
├── src-tauri/ # Backend code (Rust)
│ ├── src/
│ │ ├── commands/ # Tauri commands
│ │ ├── database.rs # Database operations
│ │ ├── player.rs # Audio player
│ │ ├── scanner.rs # Folder scanning
│ │ └── metadata.rs # Metadata extraction
│ └── icons/ # App icons
├── public/ # Static assets
└── docs/ # Documentation
- Node.js 18+
- Rust 1.70+
- macOS (Apple Silicon)
# Clone repository
git clone https://github.com/your-username/jlocal.git
cd jlocal
# Install dependencies
npm install
# Development mode
npm run tauri:dev
# Build
npm run tauri:buildnpm run dev # Frontend development
npm run typecheck # Type checking
npm test # Run tests
npm run lint # LintingThis project uses the following open source libraries:
- React - UI Framework (MIT)
- TypeScript - Programming Language (Apache 2.0)
- Tailwind CSS - CSS Framework (MIT)
- Zustand - State Management (MIT)
- Lucide React - Icons (ISC)
- sonner - Toast Notifications (MIT)
- colorthief - Color Extraction (MIT)
- react-hotkeys-hook - Keyboard Shortcuts (MIT)
- es-toolkit - Utilities (MIT)
- Vite - Build Tool (MIT)
- Vitest - Testing Framework (MIT)
- Tauri - Desktop Framework (MIT/APACHE-2.0)
- Rust - Programming Language (MIT/APACHE-2.0)
- rodio - Audio Playback (MIT)
- Symphonia - Audio Decoding (MPL 2.0)
- lofty - Audio Metadata (MIT)
- sqlx - Database (MIT/APACHE-2.0)
- tokio - Async Runtime (MIT)
- chardetng - Encoding Detection (MIT/APACHE-2.0)
Issues and Pull Requests are welcome!
See CONTRIBUTING.md for details.
Made with ❤️ using Tauri + React










