VIBY: Viby is beyond your player
A modern, high-performance, local-first music player built with Tauri 2, React, and Rust. Focused on speed, clean aesthetics, and offline privacy. Let's vibe!
Download Releases »
Getting Started
·
Report Bug
·
Request Feature
Table of Contents
Viby is a lightweight local audio player that combines a responsive React frontend with a robust, multi-threaded Rust audio engine. It provides gapless playback, quick library indexing, and a modern aesthetic layout featuring a customizable interface.
- Local-First & Private: Viby operates entirely on your machine. There are no tracking scripts, telemetry, or remote dependencies—except for optional Google Font loading.
- Low Memory Footprint: By leveraging Tauri 2 instead of Electron, the application frontend runs on the native webview, keeping memory usage minimal.
- Performance-Driven Audio Pipeline: Decodes and mixes audio natively in Rust using Symphonia and Rodio, ensuring smooth playback and low latency.
- Frictionless Search: Uses an embedded SQLite database with FTS5 (Full-Text Search) to index large libraries (20,000+ tracks) and provide instant search results.
Viby is built using modern, fast technologies across the stack:
- Framework: Tauri 2 — Cross-platform desktop shell
- Frontend: React 19 + TypeScript — UI components & state
- Styling: Vanilla CSS — Custom design system & CSS variables
- State Management: Zustand — Persistent client-side state
- Audio Engine: Rodio + Symphonia (Rust) — Audio decoding & playback
- Metadata Parser: Lofty (Rust) — Metadata tag extraction
- Database: SQLite + rusqlite (Rust) — Local library index with FTS5 search
- Gapless Playback: Seamless transitions between sequential tracks.
- Format Support: Native decoding for MP3, FLAC, WAV, OGG, AAC, M4A, AIFF, and ALAC.
- Queue Control: Interactive playback queue with support for shuffle, repeat configurations (off, single track, entire queue), and drag-and-drop reordering.
- Built-in Equalizers: 10-band Graphic Equalizer and 8-band Parametric Equalizer with custom presets support.
- AutoEQ Optimization: Integrated AutoEQ algorithm implemented natively in Rust to generate optimized filter bands for specific headphone models and target response curves.
- Titlebar Music Visualizer: Real-time visualizer EQ indicator embedded in the application titlebar, responsive to play/pause states.
- Automatic Directory Scanning: Monitors and indexes folders containing audio files.
- Metadata Indexing: Extracts and displays comprehensive ID3/metadata tags.
- Playlist Management: Create, rename, delete, and reorder custom playlists.
- Quick Search: Global search launcher (
Ctrl+K/Cmd+K) and dedicated database-backed full-text search across titles, artists, albums, and file attributes. - Discord Rich Presence: Integrates Discord RPC to show your currently playing song status directly on your profile.
- Adaptive Theme Picker: A curated palette of theme colors designed to match modern dark-mode layouts.
- Custom Window Frames: Custom native window controls tailored specifically to look integrated on macOS, Windows, and Linux.
- Toggleable Titlebar Components: Custom toggles to show/hide the app name and visualizer to achieve a completely minimal look.
- Typography: Built-in typography supporting multi-script displays (Latin and Thai).
To get a local copy up and running, follow these steps.
Ensure you have the following installed on your system:
- Node.js (v18.0 or newer)
- Rust compiler (latest stable release)
- Platform-specific dependencies (such as C compilers and system toolchains). See the Tauri Prerequisites Guide for your operating system.
Developing the Rust backend on Linux requires specific system development libraries:
sudo apt update
sudo apt install -y build-essential curl wget file pkg-config libssl-dev libglib2.0-dev libgtk-3-dev libwebkit2gtk-4.1-dev libayatana-appindicator3-dev librsvg2-dev libasound2-dev libdbus-1-dev libsoup-3.0-dev libudev-dev libcairo2-dev libpango1.0-dev libatk1.0-dev libgdk-pixbuf-2.0-devsudo pacman -Syu --needed base-devel curl wget file openssl glib2 webkit2gtk-4.1 gtk3 libayatana-appindicator librsvg alsa-lib dbus libsoup3 cairo pango atk gdk-pixbuf2sudo dnf5 group install -y development-tools
sudo dnf5 install -y curl wget file pkgconf-pkg-config openssl-devel glib2-devel gtk3-devel webkit2gtk4.1-devel libayatana-appindicator-gtk3-devel librsvg2-devel alsa-lib-devel dbus-devel libsoup3-devel libappstream-glib libudev-devel cairo-devel pango-devel atk-devel gdk-pixbuf2-devel-
Clone the repository:
git clone https://github.com/psrisuphan/viby.git cd viby -
Install the frontend dependencies:
npm install
-
Launch the application in development mode (starts Vite server and the Tauri wrapper):
npm run tauri dev
To compile and pack the application for production, run:
npm run tauri buildThis compiles both the React frontend and the Rust backend, bundling them into native installers depending on your platform:
- macOS:
.appbundle,.dmginstaller - Windows:
.msiinstaller, standalone.exeexecutable - Linux:
.debpackage, standaloneAppImage
The generated installers will be located in: src-tauri/target/release/bundle/.
To run the unit test suites:
# Execute frontend unit tests via Vitest
npm test
# Execute Rust unit and integration tests
cd src-tauri && cargo testviby/
├── assets/ # Public asset resources (branding/logos)
├── src/ # React frontend UI
│ ├── components/ # Layout, player, library, and settings modular components
│ ├── stores/ # Zustand stores for state management
│ ├── styles/ # Global CSS declarations and design tokens
│ ├── utils/ # Audio helper utilities and Tauri API communication layers
│ └── types.ts # Global TypeScript type definitions
├── src-tauri/ # Native Rust application core
│ ├── src/
│ │ ├── audio/ # Rodio stream output and queue processing
│ │ ├── library/ # SQLite schema, migrations, and metadata scanners
│ │ ├── commands/ # Tauri command bindings exposed to the frontend
│ │ ├── error.rs # Error propagation implementation
│ │ └── lib.rs # Tauri lifecycle hooks and setup execution
│ └── Cargo.toml # Rust dependency definitions
├── package.json # Frontend package configurations and scripts
├── vite.config.ts # Bundler options
└── tsconfig.json # TypeScript compiler configuration
Viby stores application databases, configuration files, and playback logs locally. Depending on your operating system, these files can be found in the following directories:
- macOS:
~/Library/Application Support/com.viby.app/ - Windows:
%APPDATA%\com.viby.app\(resolves toC:\Users\<Username>\AppData\Roaming\com.viby.app\) - Linux:
~/.local/share/com.viby.app/or$XDG_DATA_HOME/com.viby.app/
Inside these directories, you will find:
viby.db— SQLite database holding track metadata, playlists, and settings.gpu_settings.json— Hardware rendering configuration file.discord_artwork_cache.json— Cached lookup file for Discord RPC rich presence artwork.logs/— Directory containing runtime debug logs.
This project is licensed under the GPL-3.0 License. See the LICENSE file for the full license text.
- Made with ❤️ by psrisuphan, Bukutsu, and other contributors.
- Vinyl icons created by Those Icons - Flaticon.
- AutoEQ optimization logic referenced from the autoeq-c library.
- Special thanks to the developers of Tauri, Symphonia, and Rodio.