System Tools
The system tools are expected to be installed and available globally on your system
(i.e. in PATH).
-
Operating System: Linux is preferred. Most projects also work with Windows. Most projects should also work with MacOS but they are not tested.
-
GNU Utils: Coreutils like
cp,rm,mkdirshould be available although they are not required for every project. For Windows users please use Microsoft fork of uutils/coreutilsWarning
The Microsoft version of coreutils is still an early product and has some rough edges. It also requires some complicated powershell integration. If you have to work on Windows, it’s recommended to test if the project already works without Coreutils, or use Windows Subsystem for Linux directly.
Some other utils like
find,xargs,sed,wget,grepmight be needed for some projects. -
Task Runner: Please install the latest version of
task. This is a great cross-platform script runnerNote
This is a great cross-platform script runner with an implementation of coreutils built-in, which is the reason why Windows don’t usually need Coreutils unless for compatibility reason). It’s also a great way to make the build system consistent across languages - instead of scripts in
package.jsonwhich would only work with the NPM ecosystem, every project has aTaskfile.ymlwhich works regardless of the language/ecosystem. -
Git submodule manager: For projects with submodules it’s recommended to use
magoo, which is a wrapper forgit submodule. If you are a veteran of git-submodule commands you can also runNote
If you are a veteran of git-submodule commands, you can also opt to run the git-submodule commands directly.
Magoo offers an interface more like a modern package manager (such as
npmorcargo); Most contributors just need to runmagoo installwhen theygit pullto checkout the submodules.
In addition to the general system tools, please setup the language-specific tool depending on the project you are working on. Some projects use multiple languages and you will need to have all of them installed.
Rust
For Rust projects:
- Install Rust (recommended through
rustup) - Windows users would need to install MSVC dependencies, please follow the guide on the Rustup download page.
- Projects may require additional tools that are written in Rust.
Run
task install-cargo-extra-toolsortask icetsfor short from the repo root. rust-analyzeris the official language server. Install therust-analyzerextension in VS Code, or if you use another editor, the corresponding extension/plugin for that editor for Rust Analyzer.
TypeScript/ECMAScript/JS
Tip
The steps below sets up PNPM and use it as the runtime/toolchain manager. If you already have another runtime/toolchain manager (such as
nvm), you can install the runtimes use your preferred method. If it also supports thedevEnginesfield, you will also get an error or warning if your currently installed engine version is not compatible.
For TypeScript/ECMAScript (aka JS) projects:
- Install PNPM which acts as a unified toolchain, engine, and package manager.
- Install NodeJS v26 with PNPM:
pnpm i -g node@26. - Some projects may also need Bun.
You can either install it standalone or through PNPM:
pnpm i -g bun - Install TypeScript and ESLint extension for VS Code, or if you use another editor, the corresponding TypeScript extension/plugin for that editor.
C/C++
For C or C++ projects:
- Install CMake
- Install Ninja. This is especially needed for Windows
to generate build commands for
clangd - Install a C compiler. For Windows this usually means you need MSVC (from Visual Studio Build Tools). Sometimes you need the GNU toolchain for Windows instead, one option is LLVM-MINGW
- Install
clang-formatandclang-tidyfrom the LLVM toolchain. For Windows you can download from theofficial LLVM release - Install the
clangdextension for VS Code (NOT the official C/C++ extension). For other editor please install the correspondingclangdextension/plugin for that editor.
Java
For Java projects:
- A decently modern JDK is expected to be installed on the system to run Gradle.
You don’t need to install the exact version the project uses because Gradle will handle that.
A JDK installed through a version manager like
jabbawill also work. - My version of gradlew which
does not require
jarfiles in the repo (Read more in the link for the security concerns of that). - I have a very custom LSP setup with JDTLS and Neovim but any editor that can work with a Gradle project should work.
Python
For Python projects or projects that contain python scripts:
- Install
uv