kōan

kōan

It's a music player. Designed for both local and remote collections (subsonic/navidrome). Remote works with a fairly aggressive local cache. It is super fast and handles 1TB+ libraries with ease and has all the things you'd want like gapless, queue management, "bit-perfect" (so much as the audio stack allows), combined search...etc. Built from 25 years of experience messing about with music and being annoyed with pretty much everything and wanting my dream application. There are some organisational features such as file renaming, which is compatible with fb2k syntax, and I plan to add a decent well thought out tagger once I have pondered the UX more.

Originally built as a Rust TUI and core, I've now added a beautiful macOS SwiftUI app (no Electron) that uses FFI to bridge to the rust. It's fast, it's pretty, it has these lush transitions, and the point is to do all the basics properly and well before adding features, I'm really proud of it. The UX is somewhat inspired by taking the things I like about Apple Music and fb2k, but also fixing things I thought were dumb.

Full disclaimer: AI assisted coding was used. I have been building somewhat high quality software for a long time (decades) before AI existed, and I'd like to think the decisions I've been making reflect this as opposed to just vibing slop. I probably could have written it myself, but I kind of wanted to take a step back and be more of an architect/technical lead/product owner rather than a coder for this.

Install Latest release macOS 26+ app · macOS and Linux terminal UI · MIT

The queue in the macOS app, grouped by album, with the now-playing bar at the foot

Install

macOS app

brew install --cask radiosilence/koan/koan-app

You may have to update Homebrew's trust settings to trust the tap. Alternatively, download Koan.dmg from the releases page.

The app is signed but not notarised, because notarisation needs a paid Apple developer account. macOS therefore refuses the first open and offers only “Move to Trash”. Drag the app to Applications and run this once; the cask does it for you:

xattr -dr com.apple.quarantine /Applications/kōan.app

Requires macOS 26 or later.

Command line and terminal UI

# mise (recommended)
mise use -g github:radiosilence/koan@latest

# homebrew
brew install radiosilence/koan/koan

# or via cargo
cargo install koan-cli

# or build from source
git clone https://github.com/radiosilence/koan.git && cd koan
cargo install --path crates/koan-cli

A single binary. macOS works out of the box with CoreAudio. Linux needs the ALSA and D-Bus development headers:

# Debian/Ubuntu
sudo apt install libasound2-dev libdbus-1-dev

# Fedora
sudo dnf install alsa-lib-devel dbus-devel

# Arch
sudo pacman -S alsa-lib dbus

Getting started

In the app, everything is in Settings. Library points kōan at your music and scans it, Server signs in to Navidrome or Subsonic, and playback, output device and radio have their own panes. No terminal is needed.

From the command line:

koan config init   # create the config dir and a commented template
# edit ~/.config/koan/config.local.toml:
#   [library]
#   folders = ["/path/to/your/music"]
koan scan          # index your library
koan               # launch the TUI

space pauses, < and > skip, p picks tracks, a picks albums, q quits.

With a Navidrome or Subsonic server:

koan remote login https://music.example.com admin
koan remote sync
koan

Local and remote tracks merge into one library. Local files take priority for playback; remote tracks stream while they download and stay in the cache.

What it does

Playback

Library

Automation

Not there yet: tag editing, and DSP or EQ.

The macOS app

A SwiftUI app built for macOS 26. Browse and search the library (⌘K), build and reorder the queue, keep playlists, favourite tracks, albums and artists, read synced lyrics, look through play history and reorganise files on disk. First-run setup covers library folders and remote sign-in.

It links the Rust core in-process through FFI rather than talking to a server, so there is no daemon, port or auth surface between the interface and the audio engine, and CoreAudio output never leaves Rust. It shares one library and one config with the terminal UI: a queue saved in one shows up in the other.

Two things it leaves to the terminal: visualisers, and running the server (koan serve).

Search in the macOS app, with matching artists, albums and tracks

The terminal UI

A full-screen Ratatui interface that runs on macOS and Linux: a transport bar with album art, an album-grouped queue, a fuzzy picker, a library browser, a lyrics panel, mouse support and 22 visualiser modes.

Documentation

Architecture, contributing and how kōan compares with other players are in the repository.