pj
A fast, terminal-based project launcher with fuzzy matching. Quickly navigate between projects, organize them with tags, and launch your editor with a single command.
Features
- Fuzzy Matching: Interactive TUI with real-time filtering powered by skim
- Frecency Ranking: Smart ordering based on frequency and recency of access
- Hierarchical Tags: Organize projects with nested tags (e.g.,
work/backend) - Shell Integration: Automatic directory changing for bash, zsh, fish, and sh
- Editor Integration: Launch your preferred editor when selecting a project
- Git Integration: Auto-initialize git repositories when adding projects
- GitHub Integration: Optionally create GitHub remotes via the gh CLI
Installation
Homebrew
Cargo
From Source
Quick Start
Run the interactive setup wizard:
This will configure your shell, editor, and preferences. The wizard detects your shell automatically and installs the necessary shell function for directory changing.
Add your first project:
Select and open a project:
Commands
| Command | Description |
|---|---|
pj |
Open interactive project selector |
pj init |
Run the setup wizard |
pj -a |
Add current directory as a project |
pj list |
Display all tracked projects |
pj tag |
Manage project tags |
pj rm |
Remove projects from tracking |
Options
| Option | Description |
|---|---|
-t, --tags <TAGS> |
Filter by tags or add tags when using -a |
-e, --editor <EDITOR> |
Override the configured editor |
--cd / --no-cd |
Override directory change behavior |
Examples
# Add project with multiple tags
# Filter projects by tag
# List projects with a specific tag
# Open project with a different editor
# Remove all projects with missing paths
Configuration
Configuration is stored in ~/.pj/config.toml:
= "code" # Editor command to launch
= true # Change directory when selecting a project
= true # Initialize git when adding a project
= false # Create GitHub remote when adding (requires gh CLI)
Project data is stored in ~/.pj/projects.json.
Shell Integration
When cd_on_select is enabled, pj installs a shell function that wraps the
binary to enable directory changing. The setup wizard handles this
automatically for:
- Bash: Added to
~/.bashrc - Zsh: Added to
~/.zshrc - Fish: Added to
~/.config/fish/config.fish - POSIX sh: Added to
~/.profile
Tag Hierarchy
Tags support hierarchical organization using / as a separator:
# Add with hierarchical tags
# Filter matches parent and all children
License
This project is licensed under the MIT License. See the LICENSE.txt file for details.