Motivation#
The problem#
Command-line tools often need their own dependencies. Installing them
into a shared environment (like base) leads to conflicts: upgrading
one tool can break another.
The solution is isolation — each tool in its own environment. But then you need activation, PATH management, and a way to remember what you installed. That overhead is why tools like pipx exist.
Prior art#
pipx#
pipx pioneered the “isolated tool environments” pattern for Python. It creates a virtualenv per tool and places wrapper scripts on PATH. It works well, but:
Only installs from PyPI — you can’t install non-Python tools like
gh,bat, orfdUses Python wrapper scripts that add interpreter startup time
No manifest file for syncing across machines
pixi global#
pixi global is an excellent implementation of this pattern for the conda ecosystem. It installs tools from conda channels into isolated environments, uses compiled Rust trampolines for fast execution, and provides a manifest for reproducible setups. It is the direct inspiration for conda-global’s design.
conda-global exists for users who already rely on conda as their package manager and want tool management integrated into the conda CLI, using conda’s solver, channel configuration, and authentication.
How conda-global fits in#
conda-global brings isolated tool management into conda itself:
pipx |
pixi global |
conda-global |
|
|---|---|---|---|
Package source |
PyPI |
conda channels |
conda channels |
Isolation |
virtualenvs |
pixi envs |
conda envs |
Launcher |
Python scripts |
Rust trampolines |
Rust trampolines |
Startup overhead |
interpreter startup |
negligible |
negligible |
Manifest |
none |
|
|
CLI integration |
standalone |
pixi CLI |
|
Non-Python tools |
no |
yes |
yes |
Cross-machine sync |
no |
yes |
yes |
Design choices#
- Rust trampolines over wrapper scripts
Python wrapper scripts add interpreter startup latency. A compiled trampoline that calls
execvpadds negligible overhead and replaces the process entirely on Unix.- Hardlinks over copies
All trampolines are hardlinks to a single master binary. This keeps disk usage flat regardless of how many tools are exposed.
- Manifest-first approach
The
global.tomlmanifest is the source of truth. You can edit it by hand, check it into version control, and runconda global syncon any machine to reproduce your setup.- conda’s solver
conda-global uses conda’s own solver and channel infrastructure. Your
.condarcsettings, channel priorities, and authentication tokens all work as expected.
Acknowledgements#
conda-global stands on the shoulders of pixi global, which pioneered isolated tool management with compiled trampolines for the conda ecosystem. It also draws from pipx, which established the pattern for Python, and conda-express, an earlier experiment in this space. The trampoline design closely follows pixi’s proven approach, adapted for conda’s environment layout.