Aria is a desktop-first classical music player built for local libraries and classical-music metadata.
Today it focuses on:
- local file libraries rather than streaming
- configurable tag-to-database mapping
- classical-friendly catalog number extraction
- playlists and queue management
- high-quality desktop playback, including Windows WASAPI exclusive mode where supported
- Scans local music directories into a persistent SQLite library
- Preserves raw tags and also builds normalized database fields
- Lets the user configure database fields and tag priorities
- Lets the user configure composer-aware catalog parsing rules
- Extracts embedded FLAC cover art first and falls back to sidecar images
- Provides Library, Album, Tracks, Playlists, Queue, and Settings panes
- Persists settings, queue state, playlists, and library scan results between launches
Tauri 2React + TypeScript + ViteRust + TokioSQLite
The codebase is organized as a Rust workspace with UI code in /src, a thin Tauri shell in /src-tauri, and business logic in /crates.
src/: frontend UIsrc-tauri/: Tauri app shell and command registrationcrates/domain/: shared DTOs and defaultscrates/app-core/: orchestration layercrates/library/: library scan and tag normalizationcrates/playback/: playback service and queuecrates/playlists/: playlist servicecrates/storage/: SQLite persistence and migrationsdocs/LIBRARY.md: detailed library scan and metadata notesAGENTS.md: project customization for AI coding agents
Install these on your machine and make sure they are available on PATH:
- Node.js and npm
- Rust and Cargo
- Tauri OS prerequisites for your platform
Windows notes:
- Tauri desktop apps require WebView2
- In PowerShell,
npm.cmdmay be more reliable thannpmif PowerShell script execution is restricted
Install dependencies:
npm.cmd installRun the app in development mode:
npm.cmd run tauri -- devRun a frontend production build:
npm.cmd run buildRun a Rust compile check for the desktop app:
cargo check --manifest-path src-tauri/Cargo.tomlAria can be built in two release forms:
- a standalone optimized executable for local testing
- an installer package for sharing with other users
Build both with:
npm.cmd run tauri -- buildWhat this command does:
- runs the frontend production build
- compiles the Rust app in release mode
- creates installer bundle artifacts through Tauri
Typical Windows outputs:
- release executable:
target\release\aria.exe - installer bundles:
target\release\bundle\
The exact installer filenames depend on the host toolchain and Tauri bundler, but on Windows you should expect artifacts such as:
msi\Aria_0.1.0_x64_en-US.msinsis\Aria_0.1.0_x64-setup.exe
If you only want to test the optimized app locally, you can launch the release executable directly. If you want something to hand to another user, use the installer from the bundle directory.
On a Windows machine, the first installer build may download the WiX and NSIS tool bundles automatically. That is expected.
Before building an installer package, make sure:
npm.cmd installhas been run- Rust/Cargo are installed and working
- Tauri Windows prerequisites are installed
- WebView2 is available on the target machine
From a clean checkout:
npm.cmd install
npm.cmd run tauri -- buildAfter that:
- Check
target\release\bundle\ - Pick the installer format you want to distribute
- Test-install it on the same machine or a clean Windows machine
- Launch Aria and verify first-run flow, scanning, playback, and icon appearance
If you are running from a developer checkout:
npm.cmd run tauri -- devAfter building with npm.cmd run tauri -- build, launch:
target\release\aria.exe
After building with npm.cmd run tauri -- build, open:
target\release\bundle\
Then run the installer file generated for Windows, such as the .msi or setup .exe.
- Open
Settings - Click
Add directory - Choose a music folder
- Aria adds the root and starts scanning automatically
- Adjust
Database fieldsandCatalog rulesif needed - Choose the playback output device in
Settings
Aria stores its persistent state in SQLite.
On Windows, the default database path is:
%LOCALAPPDATA%\Aria\aria.sqlite3
Aria also caches extracted embedded FLAC cover art under the local app data area.
- Aria stores both
raw tagsandmapped fields - Field mappings are priority-based per database field
- Catalog extraction is only used when the
catalogfield was not resolved from dedicated tags - FLAC embedded cover art is preferred over sidecar cover files
For the detailed scan and mapping rules, see docs/LIBRARY.md.
- Embedded cover extraction is currently FLAC-first; other formats mainly rely on sidecar images
- The project is desktop-first; mobile is not an active primary target yet
Aria is licensed under the Apache License, Version 2.0. See LICENSE.
This app is vibe-coded using OpenAI's Codex with GPT-5.4 on Extra High reasoning. I've had the idea of a music player more suited for classical music (at least in my mind) for a while. I recently got my hands on Codex and decided to try vibe-coding as a learning experience. GPT came up with a few tech-stack options at the beginning. I made the choice because I don't know any of the technologies, perfect for a vibe-coding exercise.