RePortal
Jump between repos. Open in your editor. Stay in sync across machines.
RePortal is a single-binary CLI that keeps a registry of your dev repos and lets you fuzzy-jump between them, open them in your editor, and clone missing repos on a new machine.
Install
All methods install both reportal and rep (short alias) binaries.
Cargo (all platforms)
Homebrew (macOS / Linux)
Scoop (Windows)
scoop install reportal
Winget (Windows)
winget install CheckPickerUpper.RePortal
Shell installer (macOS / Linux)
|
PowerShell installer (Windows)
powershell -ExecutionPolicy Bypass -c "irm https://github.com/CheckPickerUpper/reportal/releases/latest/download/reportal-installer.ps1 | iex"
From source
Quick start
# Set up config + shell shortcuts (rj, ro)
# Register a local repo
# Clone and register from a URL
# List all registered repos
# Jump to a repo (cd)
# Open a repo in your editor
Commands
| Command | Alias | What it does |
|---|---|---|
rep init |
Creates config and installs shell integration (first-time setup) | |
rep upgrade |
Updates shell integration to the latest version (run after updating RePortal) | |
rep list |
rep l |
Shows all repos with path, description, tags, and whether it exists on disk |
rep list --tag work |
Filters repos by tag | |
rep jump |
rep j |
Fuzzy-select a repo, prints the path (used by rj shell function) |
rep jump my-api |
rep j my-api |
Jump directly to a repo by alias (also matches aliases field) |
rep jump --title "Debug" |
Override the terminal tab title for this session | |
rep open |
rep o |
Fuzzy-select a repo, opens it in your editor |
rep open my-api |
rep o my-api |
Opens a repo directly by alias |
rep open --editor code |
Override the default editor | |
rep open --title "Debug" |
Override the terminal tab title for this session | |
rep color |
Emit tab title + background color for current directory (for shell hooks) | |
rep color --repo my-api |
Emit tab title + background color for a specific repo | |
rep status |
rep s |
Show git status (branch, dirty, upstream, last commit) across all repos |
rep status --tag work |
Filter status by tag | |
rep sync |
Pull latest changes across all repos (skips dirty repos) | |
rep sync --tag work |
Pull only repos with this tag | |
rep edit my-api |
rep e my-api |
Interactively edit a repo's description, tags, title, and color |
rep add ~/dev/foo |
rep a ~/dev/foo |
Register a local repo (auto-detects git remote, suggests alias) |
rep add https://github.com/org/repo.git |
Clone a repo and register it (asks where to place it) | |
rep remove my-api |
rep rm my-api |
Unregister a repo (does not delete files) |
Shell integration
rep init automatically installs these shortcuts into your shell profile:
| Shortcut | What it does |
|---|---|
rj |
Fuzzy-select a repo and cd into it |
rj my-api |
Jump directly to a repo by alias |
ro |
Fuzzy-select a repo and open it in your editor |
ro my-api |
Open a repo directly by alias |
Supports PowerShell, Bash, Zsh. Detected and installed during rep init.
You can also set them up manually:
PowerShell:
function rj { Set-Location (rep jump @args) }
function ro { rep open @args }
Bash / Zsh:
Config
Lives at ~/.reportal/config.toml:
[]
= "cursor"
= "~/dev"
= "show" # "show" or "hide" — print path after jump/open
= "absolute" # "absolute" or "relative"
[]
= "~/dev/my-project/api"
= "Backend API"
= ["work", "backend"]
= "git@github.com:org/api.git"
= "API" # custom terminal tab title (defaults to alias)
= "#1a1a2e" # terminal background color on jump (hex)
[]
= "~/dev/personal/site"
= "Personal website"
= ["personal", "frontend"]
| Setting | Values | Default | What it controls |
|---|---|---|---|
default_editor |
Any command | cursor |
Editor for rep open |
default_clone_root |
Any path | ~/dev |
Where rep add <url> clones to |
path_on_select |
show, hide |
show |
Print path after picking a repo in jump/open |
path_display_format |
absolute, relative |
absolute |
Full path or relative to current directory |
Per-repo fields
| Field | Required | Default | What it controls |
|---|---|---|---|
path |
yes | — | Filesystem path to the repo (supports ~) |
description |
no | "" |
Shown in fuzzy finder and rep list |
tags |
no | [] |
Filter repos with --tag |
remote |
no | "" |
Git remote URL for cloning on other machines |
aliases |
no | [] |
Alternative names for direct jump (e.g. rj ninja instead of rj nro) |
title |
no | repo alias | Terminal tab title set via OSC 2 on jump/open |
color |
no | reset to default | Terminal background color (#RRGGBB) set via OSC 11 on jump/open |
Terminal personalization
When you jump to or open a repo, RePortal automatically sets:
- Tab title (OSC 2) — uses the
titleconfig field, falling back to the repo alias - Background color (OSC 11) — uses the
colorconfig field; repos without a color reset the terminal to its default
Both sequences go to stderr so they don't interfere with the path output that rj captures. Terminals that don't support these sequences silently ignore them.
The --title flag on jump/open lets you override the tab title for a single session without changing config.
Shell hook for new terminals
Terminals opened directly into a repo (e.g. VS Code integrated terminal) won't go through rj, so they won't get the color/title automatically. Add rep color to your prompt to fix that:
PowerShell:
function prompt { rep color 2>$null; "PS> " }
Bash / Zsh:
PROMPT_COMMAND='rep color 2>/dev/null'
rep color matches your current directory against registered repos (longest prefix wins) and emits the right sequences.
Roadmap
- Config parsing
-
init,list,jump,open,add,remove - Shell integration auto-install (
rj,ro) - Clone from URL with sibling/child placement
- Auto-detect git remote on
add - Colored output with themed fuzzy finder
-
repshort alias - Configurable path display (absolute/relative, show/hide)
- Per-repo terminal tab title and background color (OSC 2 / OSC 11)
-
colorcommand for shell prompt hooks -
status— git status across all repos -
sync— pull latest across repos -
dashboard— rich overview with branches, dirty state, last commit -
clone --all— clone missing repos from config (machine sync) - Shell completions
- Publish to crates.io
Contributing
PRs welcome. Open an issue first for anything bigger than a typo fix.