dapctl

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

see it in action

dapctl scan, diff, and sync demo
dapctl home screendapctl diff viewdapctl player view

how it works

  1. 1.eject microSD from your DAP
  2. 2.connect via card reader
  3. 3.dapctl scandetect and identify
  4. 4.dapctl diffpreview changes before touching anything
  5. 5.dapctl syncsafe copy via temp+rename

why dapctl?

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.

features

install

# 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).

what dapctl is not

status

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)