waypoint is an interactive shell wrapper that routes commands to different working directories based on a YAML config.
It is useful when you work across multiple repos/packages and want commands like bun, cargo, etc. to run from the right directory automatically.
When you type a command in the waypoint shell:
- waypoint parses the command (
cmd) and its arguments. - It loads
waypoint.yaml. - It finds config entries for that command.
- It picks the first entry whose configured
argsall match your typed args. - If matched, it runs the command from that entry's
dir. - If no entry matches, it runs from the current directory.
It also provides built-in cd behavior and a couple of helper commands.
curl -fsSL https://raw.githubusercontent.com/hazyio/waypoint/master/install.sh | shUpdate existing install:
curl -fsSL https://raw.githubusercontent.com/hazyio/waypoint/master/install.sh | sh -s -- updateOptional environment variables:
INSTALL_DIR(default:~/.local/bin)WAYPOINT_REPOSITORY(default:hazyio/waypoint)
iwr https://raw.githubusercontent.com/hazyio/waypoint/master/install.ps1 -OutFile install.ps1
./install.ps1Update existing install:
iwr https://raw.githubusercontent.com/hazyio/waypoint/master/install.ps1 -OutFile install.ps1
./install.ps1 updateOptional environment variables:
INSTALL_DIRWAYPOINT_REPOSITORY(default:hazyio/waypoint)
Download a prebuilt archive from:
Supported prebuilt targets:
x86_64-unknown-linux-gnux86_64-pc-windows-msvcaarch64-apple-darwin
Start waypoint:
waypointInside the shell:
exit→ leave waypointwaypoint→ prints environment confirmationwaypoint-update-config→ set config path to<current dir>/waypoint.yamlcd,cd -,cd ~→ built-in directory changes
All other lines are executed by the platform shell (sh -c on Unix, cmd /C on Windows).
-c, --config <PATH> Path to config file (default: ./waypoint.yaml)
--continue-on-error If config loading fails, skip executing that command line and continue the shell loop
Examples:
waypoint --config /path/to/waypoint.yaml
waypoint --continue-on-errorConfig is a top-level map of named settings:
bun:
cmd: bun
dir: .
bun-add:
cmd: bun
dir: .
args:
- addEach entry supports:
cmd(string, required): command name to match (bun,cargo, etc.)dir(path, required): directory where command should run- relative paths are resolved from the config file directory
- must exist and must be a directory
args(list of strings, optional): argument tokens required for this rule
- Rules are first filtered by
cmd. - For
args:- If config
argsis empty, it matches only when command args are empty. - If config
argsis non-empty, all configured args must be present in the typed args. - Extra typed args are allowed.
- If config
Example:
cargo:
cmd: cargo
dir: ../rust
cargo-build:
cmd: cargo
dir: ../rust
args: [build]cargo→ matchescargorule (empty args)cargo build→ matchescargo-buildcargo build --release→ matchescargo-build
waypoint blocks command lines containing:
rm -rf /
waypoint logs to a daily rotating file in the platform cache directory under waypoint/waypoint.log.
You can override log level with RUST_LOG, for example:
RUST_LOG=debug waypointRun checks locally:
cargo fmt --all -- --check
cargo clippy --all-targets --all-features -- -D warnings
cargo test --all-targets --all-features