TAP(1)

NAME

tapA terminal-based music player written in Rust, with fuzzy search (fzf-style) to browse and play your audio library.

SYNOPSIS

$brew install timdubbins/tap/tap

INFO

61 stars
4 forks
0 views

DESCRIPTION

A terminal-based music player written in Rust, with fuzzy search (fzf-style) to browse and play your audio library.

README

tap – Terminal Audio Player

A fast, Rust-powered CLI music player for the terminal, with a built-in fuzzy finder (fzf-style) to quickly browse and play your audio library.

Cross-platform (macOS, Linux, Windows), fully configurable, and lightweight, tap delivers powerful playback and search features in a minimal, distraction-free TUI.

Quick links: Usage, Controls, Options, Configuration, Installation.

🎧 Usage

> tap [options] [path]

By default, tap starts in the Finder view, where you can search your music library.

  • Selecting an album switches to the Player view and begins playback.

  • You can reopen or cancel a search at any time without interrupting current playback.

🔍 Example

> cd ~/path/to/my_music
> tap

If no path is specified, tap defaults to the current working directory.

▶️ Direct Playback

To skip the Finder and start playback immediately, launch tap with a file or album path:

> tap ~/path/to/my_album

⌨ Controls

Keyboard
GlobalBinding
previous album-
random album=
fuzzy searchTab
artist searchCtrl + a
artist search (a-z)A-Z
album searchCtrl + d
depth search (1-4)F1-F4
parent search`
open file managerCtrl + o
quitCtrl + q

Note:

  • Results are shuffled by default.
  • Use Ctrl + s to sort.
  • Use any search shortcut (such as Tab or Ctrl + a) to shuffle again.
PlayerBinding
play or pauseh or or Space
nextj or n or
previousk or p or
stopl or or Ctrl + j or Enter
randomize* or r (next track is random from library)
shuffle~ or s (current playlist order is shuffled)
seek backward / forward, / .
seek to second0-9, "
seek to minute0-9, '
volume down / up[ / ]
toggle volume displayv
toggle mutem
go to first trackgg
go to last trackCtrl + g
go to track number0-9, g
show keybindings?
quitq
FinderBinding
selectCtrl + j or Enter
cancel searchEsc
nextCtrl + n or
previousCtrl + p or
sort resultsCtrl + s
cursor rightCtrl + f or
cursor leftCtrl + b or
cursor homeHome
cursor endEnd
clear queryCtrl + u
page upPageUp
page downPageDown
Mouse
GlobalBinding
fuzzy searchMiddle Button
PlayerBinding
play or pauseLeft Click (in window)
select trackLeft Click (on track)
seekLeft Hold (on slider)
volumeScroll (in window)
next / previousScroll (over tracks)
stopRight Click (anywhere)
FinderBinding
cancel searchRight Click
scrollScroll
selectLeft Click

> Command-line Options

OptionDescription
--sequentialTraverse files sequentially (instead of in parallel). Can improve startup time on older systems, virtual machines, network drives, or HDDs.
-d, --defaultRun from the default directory, if set.
-p, --printPrint the path of the default directory, if set.
-s, --setSet a default directory. Requires a tap.yml config file.
-b, --term-bgUse the terminal background color.
-t, --term-colorRestrict colors to the terminal’s background and foreground only.
-c, --default-colorIgnore any user-defined colors and use defaults.
--color <COLOR>Apply a custom color scheme. See Colors for available values.
--cliRun in CLI mode (disable the TUI; audio only).

⚙️ Configuration

tap doesn't create the config file for you, but it looks for one in the following locations:

  • $XDG_CONFIG_HOME/tap/tap.yml
  • $XDG_CONFIG_HOME/tap.yml
  • $HOME/.config/tap/tap.yml
  • $HOME/.tap.yml

A example config file can be found here.

Keybindings

Keybindings for the player can be set in the config file. You can bind multiple keys to an event.

🎨 Colors

Colors can be set in the config file or using the --color command.

The following example will set a Solarized theme:

--color fg=268bd2,bg=002b36,hl=fdf6e3,prompt=586e75,header_1=859900,header_2=cb4b16,progress=6c71c4,info=2aa198,err=dc322f

/ Default Path

The default path can be set in the config file. This allows you to load the default directory with the -d --default command and also provides faster load times by caching.

When setting a default path tap will write a small amount of encoded data to ~/.cache/tap. This is guaranteed to be at least as small as the in-memory data and will be updated everytime the default path is accessed. Using the -s --set command will update the path field in the tap.yml config file.

Without setting a default path tap is read-only.

📦 Installation

macOS

You can install with Homebrew

> brew install timdubbins/tap/tap
> tap --version
0.5.3
Debian (or a Debian derivative, such as Ubuntu)

You can install with a binary .deb file provided in each tap release.

> curl -LO https://github.com/timdubbins/tap/releases/download/v0.5.3/tap_0.5.3.deb
> sudo dpkg -i tap_0.5.3.deb
> tap --version
0.5.3
Windows

You can install with Scoop

> scoop bucket add tap https://github.com/timdubbins/scoop-tap
> scoop install tap
> tap --version
0.5.3
Arch Linux

You can install with an AUR helper, such as yay

The Arch package is not currently maintained. Please install with Rust.

> yay -S tap
> tap --version
0.4.11

The AUR package is available here.

Rust

To compile from source, first you need a Rust installation (if you don't have one) and then you can use cargo:

> git clone https://github.com/timdubbins/tap
> cd tap
> cargo install --path .
> tap --version
0.5.3

The binaries for each release are also available here.

👋 Contributing

Suggestions / bug reports are welcome!

🚀 Inspired by

  • cmus - popular console music player with many features
  • fzf - command line fuzzy finder

🙏 Made possible by

  • cursive - TUI library for Rust with great documentation
  • rodio - audio playback library for Rust

SEE ALSO

clihub5/7/2026TAP(1)