A terminal-first toolkit to sync, audit, and manage music libraries on HiFi Digital Audio Players — with a safe preview of every change before a single file is copied.
v1.0.1 · released · validated: 2,108 FLAC / 75 GB / HiBy R4



Generic tools don't know anything about your DAP. rsync knows nothing about FAT32 filename limits, your device's supported codecs, or the cache folders its firmware leaves behind. Library managers like beets are excellent, but require adopting an entire library-management workflow just to move files onto a microSD card.
dapctl diff shows exactly what would change before anything is written--yes / --dry-rundapctl export m3u generates a DAP-ready playlist from the same filters as sync/ incremental search, source toggle library ↔ DAP, synced lyrics (.lrc), play history + resume--jsonfolder.jpg via MusicBrainz → Cover Art Archive → iTunes fallback; 30-day cache; opt-in --online flagfolder.jpgsource = "ssh://user@host/path" in sync profiles; uses your existing ~/.ssh config, keys, and agent; zero extra dependencies# pre-built binaries — Linux · macOS · Windows $ github.com/marturojt/dapctl/releases/latest # from source (requires Rust 1.80+) $ cargo install --git https://github.com/marturojt/dapctl --tag v1.0.1 # Homebrew (macOS / Linux) $ brew tap marturojt/tap $ brew install dapctl # AUR / Scoop — coming soon # yay -S dapctl-bin (AUR) # scoop install dapctl (Scoop)
Pre-built static binaries for Linux (x86_64 + aarch64), macOS (universal), and Windows are available on the releases page. Source install requires Rust 1.80+ (rustup.rs).
--online (cover fetch / audit)v1.0.1 released — fixes a crash on any filename containing multibyte Unicode characters (e.g. Mitternachtslöwe.flac); five string-truncation helpers replaced with char-boundary-safe code; dependency security updates (crossbeam-epoch, anyhow).
v1.0.0 — SSH source (ssh://user@host/path),dapctl cover embed (write cover art into track tags), dapctl profile delete(CLI + TUI with two-press confirm), 5 new builtin DAP profiles (7 total, all CI-validated), path-limit warnings from DAP firmware spec, typed error taxonomy with structured exit codes,NO_COLOR support, selective mode write-back, 54 tests.
v0.4.0 — synced lyrics (.lrc auto-scroll), play history + resume position, sleep timer, equalizer animation, library normalisation (case + diacritics), dapctl audit (offline library health: missing tags · absent covers · format mix · track gaps),dapctl cover fetch (MusicBrainz → Cover Art Archive → iTunes, opt-in--online, 30-day cache), TUI UX improvements across player · diff · wizard · profiles.
v0.3.0 — TUI audio player with SQLite-backed library browser (artist → album → track, tag-grouped), gapless playback, HiFi metadata display (sample rate · bit depth · bitrate · channels), / incremental search, source toggle library ↔ DAP destination, home landing screen.
v0.2.0 — blake3 checksum verification, tag-based filters (artist · genre · sample rate · bit depth), ffmpeg transcode pipeline with blake3-keyed cache, dapctl export m3u, 39 tests.
v0.1.0 — sync engine, TUI (profiles · diff · progress · log · wizard), real-world validated: 2,108 FLAC · 75 GB · HiBy R4 microSD.
→ v1.0.1 release notes → v1.0.0 release notes → v0.4.0 release notes → v0.3.0 release notes → v0.2.0 release notes → v0.1.0 release notes → roadmap (BACKLOG.md)