The base setup every (macOS) developer needs.
Workbench is kinda a package manager. We install simple stubs that install
on-demand the tools you need. eg. usr/local/bin/node is just a shell script
that installs node to your home directory† and then invokes it.
Workbench can run any version of the tools we support. You can control this via env:
$ WORKBENCH_NODE=^20 node --version
20.1.0Or you can activate project directories and then we read the keyfiles in that project to automatically determine versions:
$ cd my-project
$ cat package.json | jq -r '.engines.node'
20.1.0
$ node --version
22.10.0 # by default we run the latest version
$ workbench .
$ node --version
20.1.0 # now we run the version from the projectWe provide major language ecosystems and their essential companion tools and that is it.
node,npm,npxnpmandnpxare just stubs to installnpmandnpxvianode.
bundenopython,pip- We also install versioned stubs (eg.
python3.9) pipis a proxy to installpipvia python
- We also install versioned stubs (eg.
uv,uvxuvxis—in our mind—essential for modern Python development.
rustc,cargo,rustup- We only operate via
rustupthus bothrustcandcargoare in fact stubs that ensurerustuphas configured a toolchain before proxying to the rustup installed tool. Ifrustuphas not run we error.
- We only operate via
rubyperlphpgolua,luarocks
For everything else use another package manager.
We only package a few things so we package them extremely well.
- Well configured out the box.
- We use sane defaults like making
pip,npmetc. install to your home directory. - We ensure packages look in
XDGplaces for configuration files.
- We use sane defaults like making
- Well optimized out the box.
- We pour over the packages looking for every optimization we can apply.
- We build separate package for all the CPU architectures we support to ensure the versions of key tools you are using are as fast as humanly possible.
- Max’d out
- All features enabled
- Aware of macOS provided deps and not duping them
- But also aware which ones are now too old and providing them as necessary.
†
~/.local/pkgson *nix.
%LOCALAPPDATA%\pkgson Windows.