Kava is a Windows desktop app for analyzing media links, downloading audio or video, organizing a local media library, converting files, and playing audio directly inside the app.
The project is built with Tauri, React, TypeScript, and a local Rust backend. It uses yt-dlp for URL analysis and downloads, ffmpeg / ffprobe for conversion and media inspection, and mpv for integrated audio playback.
View the latest GitHub release
This README describes the repository as it is wired today. It should not be read as a roadmap.
The Downloads page lets users paste a URL, analyze it, choose standard or expert mode, and follow progress in a backend-managed download queue.
Expert mode exposes the available formats returned by yt-dlp. It lets users choose a specific video stream, a compatible audio stream, or a progressive format when the source provides one.
The Library brings together downloaded files and local folders added by the user. It supports search, filters, playlists, custom folders, and integrated audio playback.
- Analyze media URLs with
yt-dlp. - Download audio or video through a real backend queue.
- Pause, resume, cancel, or remove downloads.
- Download a full playlist or only selected playlist items.
- Choose a simple quality preset in standard mode or a precise format in expert mode.
- Organize media in a local library with search and filters.
- Create local playlists and associate files with custom folders.
- Load the library quickly from a SQLite snapshot, then resynchronize in the background.
- Convert files with
ffmpegto common audio and video formats. - Play audio inside the app with an
mpvbackend and an integrated playback bar. - Inspect runtime diagnostics for
yt-dlp,ffmpeg, andmpv. - Open the main window maximized and use a compact Windows-aware mini-player.
Implemented today:
- real URL analysis and downloads through
yt-dlp; - backend-normalized source support for YouTube, SoundCloud, TikTok, Twitch, Instagram, Twitter/X, RSS, and unknown sources;
- persistent download queue with progress updates;
- local library with SQLite cache, playlists, folders, and optimistic UI deletion;
- virtualized library list with
react-virtuoso; - media conversion through
ffmpeg; - audio playback through
mpv; - runtime diagnostics;
- Windows packaging through Tauri with
NSISandMSItargets.
Important limitations:
- the license system is local and mocked, using test key prefixes such as
LIFE-,MONTH-, andFREE-; - the free quota is calculated but not yet enforced as a download-time blocker;
cookiesProfileexists in some payloads but is not wired end to end into theyt-dlpcommands;- the app update check is still a stub that essentially returns
up_to_date; libVLCresources still exist in the repository, but the active player ismpv;- the Settings UI exposes only part of the stored preferences;
- the repository does not currently include a maintained automated test suite.
- Open Kava.
- Paste a media URL in the Downloads tab.
- Choose standard or expert mode.
- Select the output type: audio or video.
- Start the download.
- Find the file in the Library.
- Play audio in Kava, open video with the system media player, or convert the file if needed.
- React 18
- TypeScript
- Vite
- Tailwind CSS
- Radix UI
- Zustand
- Framer Motion
- i18next / react-i18next
- react-hook-form
- react-hotkeys-hook
- TanStack Table
- react-virtuoso
- sonner
- Tauri 1.x
- Rust
- Tokio
- Rusqlite with bundled SQLite
- Serde / serde_json
- Tracing
- Walkdir
- Windows-specific helpers to avoid visible consoles in release builds
yt-dlp: URL analysis, available formats, downloads, playlists.ffmpeg/ffprobe: inspection, post-processing, thumbnails, conversion.mpv: integrated audio playback.
Kava stores local state in SQLite, notably in kava.db under the application data directory.
Important tables:
downloadsdownload_metalibrary_cachelibrary_playlistslibrary_foldersconversionsprefslicensethumbnailsfeeds
The real mounted application entry points are:
src/main.tsxsrc/App.tsxsrc/pages/Downloads/DownloadsPage.tsxsrc/pages/Library/LibraryPage.tsxsrc/pages/Settings/SettingsPage.tsx
Core backend modules:
src-tauri/src/main.rssrc-tauri/src/commands/mod.rssrc-tauri/src/worker.rssrc-tauri/src/conversion.rssrc-tauri/src/player.rssrc-tauri/src/runtime.rssrc-tauri/src/db.rssrc-tauri/src/state.rssrc-tauri/src/diagnostics.rs
The src/features/* directory still contains older or partially reused components. It should not be treated as the source of truth for the UI currently shown by the app.
Install dependencies:
npm installRun the frontend only:
npm run devRun the full native Tauri app on Windows:
Set-Location <path-to-repo>
npm install
npx tauri devWhen working from WSL, use a Windows checkout of the repository to validate the native app. A Linux node_modules directory does not contain the native Windows binaries required by Tauri and Rollup.
Useful WSL command:
cmd.exe /C "cd /d <windows-repo-path> && npx tauri dev"npm run dev: start Vite.npm run build: compile TypeScript and build the frontend.npm run preview: preview the frontend build.npm run lint: run ESLint onsrc.npm run format: formatsrc/**/*.{ts,tsx,css}with Prettier.npm run tauri: proxy to the Tauri CLI.npm run setup:wsl: prepare WSL development helpers.npm run build:windows-installer: build the Windows installer through the dedicated script.
Standard Tauri build:
npm run build
npx tauri buildBuild through the repository script:
npm run build:windows-installerThe Tauri configuration currently targets NSIS and MSI, with productName set to Kava and identifier com.kava.desktop.
- Always check
src/App.tsxand the mounted pages before concluding that a feature is active. - Treat
mpvas the real player wired today. - Do not present licensing, payments, free quota enforcement, or auto-update as finalized systems.
- For UI changes, validate the rendering in the native Tauri app when possible.
- For mini-player or Windows windowing bugs, check both the frontend code and the native
window_set_mini_player_chromecommand.
AGENTS.md: detailed snapshot of the real project state.docs/architecture.md: technical application structure.docs/windows-packaging.md: Windows packaging notes.


