ez

Project-Scoped Command Aliases

Stop memorizing project-specific commands or digging READMEs.
Share aliases easily with the whole team.

ez CLI demo showing adding and running project-scoped command aliases

Why ez?

Project-Scoped

Aliases are stored per-directory in .ez_cli.json. Commands stay with the project they belong to.

Context-Safe

No global aliases means no accidental damage in a different directory. Commands only exist where they're defined.

Shareable

Commit aliases .ez_cli.json to your repo with a single file. New team members run the same commands on day one.

Native

Built with Swift for macOS. Instant startup, zero third-party dependencies.

Privacy first, open-source

Zero telemetry. No data sent to the cloud. Open-source under the MIT license.

Interactive Support

Full TTY passthrough for interactive tools. Run vim, ssh, or any command that needs user input.

Tab Completion

Shell completions for zsh. Type ez and tab to see all available aliases.

Automatic Timing

Runtime logging built-in. See exactly how long your builds, tests, and deploys take.

Install

brew tap urtti/ez && brew install ez

Usage

ez add deploy "./scripts/deploy.sh --env prod"🐘 ez deploy now stores ./scripts/deploy.sh --env prod
ez deployDeploying to production...
🐘⏱️ 4.231 s
ez listdeploy → ./scripts/deploy.sh --env prod
test → npm test -- --coverage
ez remove deploy🐘 ez deploy removed.

Chain Multiple Commands

Run entire workflows with a single alias, either sequentially or in parallel.

ez add check npm run lint && npm run typecheck && npm audit

ez add -p check-parallel "npm run lint" "npm run typecheck" "npm audit"

Requires macOS 15.0 or newer.

Open source under MIT license.

🐻‍❄️Urtti Apps OyBusiness ID: 3349285-7