ezcli
ezcli is an extensible Windows shell helper for developer workflows.
It currently focuses on tasks such as loading the MSVC cl environment and switching into configured project directories, while making those changes apply to the current PowerShell or cmd session. The long-term direction is still developer workflow tooling, with a strong preference for behavior that is explicit, predictable, and shell-friendly.
Install
From crates.io
cargo install ezcli-win
The package name on crates.io is ezcli-win, but the installed command is still:
ezcli
From the local repository
cargo install --path .
If you prefer, you can also build it manually:
cargo build --release
If you want to run ezcli directly, make sure the executable directory is available in PATH, or run it from the build output directory.
Quick start
1. Configure vcvarsall.bat
Run:
ezcli --find-cl
This step will:
- open a file picker so you can select
vcvarsall.bat - update
%USERPROFILE%\.ezcli\ezcli.toml - install the
cmdwrappers - generate the PowerShell wrapper
- ask whether the PowerShell wrapper should be added to the current user's profile
2. Add a project
Run:
ezcli --add-project handmade
After choosing the project directory, you can enter it quickly with:
ep handmade
3. Daily usage
Recommended daily commands:
PowerShell:
ecl
ep handmade
cmd:
ecl
ep handmade
Where:
eclloads the MSVCclenvironment into the current shell sessionep <name>enters a configured project directory and prepends it to the current sessionPATH
What it does today
- Load the MSVC
clenvironment into the current shell session - Enter a configured project directory
- Prepend that project path to the current session
PATH - Support both PowerShell and
cmd - Provide both short commands and long command names
Why wrappers are needed
A normal CLI runs as a child process of the shell. It can modify its own environment variables and working directory, but those changes do not flow back into the parent shell automatically.
Because of that, ezcli uses a two-layer design:
emit: generates shell script text and writes it to standard outputwrapper: makes the current shell execute that script so the current session is actually updated
That is why ecl and ep can affect the current PowerShell or cmd session instead of only taking effect inside a short-lived child process.
Positioning
- Built for Windows shell workflows instead of being just a one-shot CLI
- Focused on developer productivity without being tied to a single language or a single project type
- Suitable for environment loading, project switching, and future workflow-related commands
- Designed around explicit invocation so new features do not pollute existing daily commands
If the tool grows over time, new commands should still be organized around developer workflows instead of mixing in unrelated concerns.
Common commands
Wrapper entry points
eclep <name>ezcli-load-clezcli-enter-project <name>
CLI entry points
ezcli --find-clezcli --show-clezcli --add-project <name>ezcli --show-projectezcli --del-project
Advanced commands
These are mainly useful for debugging, understanding the lower-level behavior, or integrating wrappers manually:
ezcli emit --shell powershell load-clezcli emit --shell powershell enter-project <name>ezcli emit --shell cmd load-clezcli emit --shell cmd enter-project <name>ezcli emit --shell powershell initezcli emit --shell powershell show-profileezcli emit --shell powershell install-profileezcli emit --shell cmd install-wrapper
Configuration
Default config file path:
%USERPROFILE%\.ezcli\ezcli.toml
The current config structure looks roughly like this:
= "C:\\Program Files\\Microsoft Visual Studio\\...\\vcvarsall.bat"
= "x64"
[[]]
= "handmade"
= "D:\\code\\handmade"
Where:
vc_pathis the path tovcvarsall.batdefault_archis the default architecture argumentprojectsstores project names and project paths
Current limitations
- The tool currently targets Windows
- Wrappers currently exist only for PowerShell and
cmd - Repeatedly running
ep <name>may introduce duplicate entries into the current sessionPATH - This README focuses on stable usage; more detailed implementation notes are better kept in separate documents
Current status
ezcli has already completed the core transition from a direct-action CLI into a shell-wrapper-driven tool.
Both the PowerShell and cmd paths are working, and ecl plus ep <name> are already usable as daily commands.
Next directions
Reasonable next steps include:
- adding more usage examples
- organizing commands more clearly as the tool grows
- adding
PATHdeduplication - writing separate documents under
docs/ - extending the tool with more developer workflow features without breaking the main mental model
License
Licensed under either MIT or Apache-2.0.