| Crates.io | pado |
| lib.rs | pado |
| version | 0.1.0 |
| created_at | 2025-10-11 09:19:42.710143+00 |
| updated_at | 2025-10-11 09:19:42.710143+00 |
| description | A tidal flow through your projects |
| homepage | https://github.com/duckonomy/pado |
| repository | https://github.com/duckonomy/pado |
| max_upload_size | |
| id | 1878022 |
| size | 235,243 |
Pado is a fast project navigator inspired by Emacs Projectile, for people who work across a bunch of projects.
.pd.toml).eval "$(pd init)".cargo.cargo install --path .
Add the shell helpers to your profile (Bash example):
eval "$(pd init)"
The script shell functions to use along with pd.
The script defines conveniences such as pdcd, and pd_prompt
without mutating your shell if pd is absent.
Jump to the nearest project root:
pd # prints the detected project root
cd "$(pd)" # change into that root
Track and inspect projects:
pd add # add the current project to the tracked list
pd list # show tracked projects (table view)
pd list --starred # focus on favorites
pd switch --recent # choose a recent project via fzf
pd stats # see aggregate usage stats
Key commands:
pd add [PATH] – register a project (auto-stars if configured).pd star [PATH] / pd star --unstar – toggle favorites.pd list --format paths|json|table – list tracked repositories with
customizable output and sorting (--sort-by name|access|time).pd switch [--recent|--starred] – interactively jump to a tracked project.pd discover <PATH> --depth <n> – scan directories for repositories and add
them automatically.pd recent --limit <n> – show your latest visits
formatting.pd cleanup – purge entries that no longer exist on disk.Run these from within a project (or after eval "$(pd cd)"):
pd info – overview with detected project type, top languages (via tokei),
Git contributor summary, and repository health hints.pd type – print just the detected project type slug.pd health – highlight missing essentials like .gitignore, README, and
license files.pd deps – quick dependency summary (Cargo / Python requirements).pd outdated – delegate to the appropriate tool (cargo outdated, npm outdated, pip list --outdated, etc.).pd files [--pattern "*suffix"] – list files within the project,
respecting .gitignore.pd find <pattern> – feed matching files into fzf.pd search <query> – run ripgrep over the project.pd tree – display the directory tree from the root.Pado detects build systems and applies sensible defaults.
cargo)npm, yarn, pnpm, bun)uv, poetry, pip)maven, gradle)mix)sbt)swift)dotnet)stack, cabal)dune)cmake, make)Use the following commands to run the detected workflows:
pd buildpd testpd runpd exec <name> – execute a custom command defined in .pd.toml.pd exec-all <cmd...> [--tag <type>] – run a command across every tracked
project (optionally filtered by detected project type).Place a .pd.toml file in a project root to define custom commands:
[commands]
build = "npm run build"
test = "pnpm test -- --watch=false"
run = "npm start"
lint = "pnpm lint"
pd exec lint now works alongside pd build, pd test, and pd run.
Global settings live at ~/.config/pado/config.toml (Linux),
~/Library/Application Support/pado/config.toml (macOS), or the equivalent
dirs::config_dir location on your platform. Manage the file with:
pd config --path # show the resolved path
pd config --show # dump the current configuration
pd config --edit # open in $EDITOR (creates the file with defaults)
Defaults you can safely tweak today:
[markers]
additional = [".project-marker"] # extra files/folders that mark a project root
[defaults]
sort_order = "access" # name | access | time
output_format = "paths" # table | paths | json
recent_limit = 20
[prompt]
format = "[{type}] {name}"
show_full_path = true
[behavior]
auto_star_on_add = true
pd init initializes scripts for your current shell (Bash, Zsh, or Fish) to
provide:
pd_prompt for embedding project context in your $PS1.fzf, fd, rg) are missing.Embed the script with eval "$(pd init)" or save it into your shell startup
file manually.
We welcome issues and pull requests especially around expanding project
detectors, improving config ergonomics, or integrating additional CLIs. Check
the tests/ directory for examples that cover the core behavior.