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.0
Or 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 project
We provide major language ecosystems and their essential companion tools and that is it.
node
,npm
,npx
npm
andnpx
are just stubs to installnpm
andnpx
vianode
.
bun
deno
python
,pip
- We also install versioned stubs (eg.
python3.9
) pip
is a proxy to installpip
via python
- We also install versioned stubs (eg.
uv
,uvx
uvx
is—in our mind—essential for modern Python development.
rustc
,cargo
,rustup
- We only operate via
rustup
thus bothrustc
andcargo
are in fact stubs that ensurerustup
has configured a toolchain before proxying to the rustup installed tool. Ifrustup
has not run we error.
- We only operate via
ruby
perl
php
go
lua
,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
,npm
etc. install to your home directory. - We ensure packages look in
XDG
places 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/pkgs
on *nix.
%LOCALAPPDATA%\pkgs
on Windows.