A TUI that lets you jump to recent Projects.
Download a prebuilt binary from the Releases
page. Archives are published as tar.gz for linux and darwin, each in
amd64 and arm64. Verify a download against the release's
checksums.txt:
sha256sum --check --ignore-missing checksums.txtThen extract the archive and put the cdd binary on your PATH.
go install github.com/kryft-dev/cdd/cmd/cdd@latestcdd needs a shell Wrapper so choosing a Project in the Picker can actually
Jump your shell there — a subprocess cannot change its parent shell's
working directory on its own.
fish — add to ~/.config/fish/config.fish:
cdd init fish | sourcebash — add to ~/.bashrc:
eval "$(cdd init bash)"zsh — add to ~/.zshrc:
eval "$(cdd init zsh)"Create a config.toml (see Config reference) with at
least a root, then seed History with a Scan of everything already under
Root:
cdd scancdd # open the Picker over History, ordered by recency
cdd <query> # open the Picker pre-filtered by queryDefault key map:
| Key | Action |
|---|---|
| type | filter the list |
↑ / ctrl+p |
move up |
↓ / ctrl+n |
move down |
enter |
Jump to the selected Project |
esc / ctrl+c |
cancel |
ctrl+u |
clear the filter |
Vim key map (keys.vim = true): the list is focused on open.
| Key | Action |
|---|---|
j |
move down |
k |
move up |
g / G |
jump to first / last row |
f / / |
focus the filter |
esc (filter) |
return to the list, keeping the query |
esc / q |
cancel |
enter |
Jump to the selected Project |
cdd reads config.toml from $XDG_CONFIG_HOME/cdd/config.toml, falling
back to ~/.config/cdd/config.toml when XDG_CONFIG_HOME is unset.
root = "~/Developer" # required, no default
exclude = [] # paths relative to Root, glob-matched
include_hidden = false
[history]
max_visits = 1000 # must be >= 1
[keys]
vim = falseroot(required): the top-level directory whose Kinds are searched for Projects. A leading~is expanded to the user's home directory;$VARis left as-is.exclude: paths relative to Root, matched withpath.Matchsemantics, that are skipped when discovering Kinds and Projects.include_hidden: whenfalse(the default), hidden directories are excluded at both Kind and Project level.[history].max_visits: the maximum number of Visits kept in History. Must be at least 1; defaults to1000.[keys].vim: whentrue, the Picker opens with the list focused and uses the vim key map described above. Defaults tofalse, the default key map.
History is stored at $XDG_DATA_HOME/cdd/history, falling back to
~/.local/share/cdd/history when XDG_DATA_HOME is unset.
A Scan sweeps Root once and seeds History with a Visit per discovered Project, dated from evidence found inside the Project itself. The Picker lists Projects drawn from History, most recently visited first, and lets you choose one; choosing a Project records a new Visit and hands its path to the Wrapper, which turns it into a Jump in your shell.
See CONTRIBUTING.md for development setup, the CONTEXT.md glossary, and the commit and pull request workflow.
