The standard development environment is a Windows PC, with Windows Subsystem for Linux (WSL) used for Linux development. After following this guide, you will be able to execute all the local PC development tooling associated with this repository.
💡 Development on a Linux or Mac system is also possible, though the setup process is not documented here.
To run all repository tooling locally, you will need the following prerequisites:
- Latest version of LLVM
- Select: ☑️ Add LLVM to the system PATH for the current user
- Visual Studio Build Tools for C++ with components:
- Workload: Desktop development with C++
- Latest version of Visual Studio Code with extensions:
- C/C++ (ms-vscode.cpptools)
- rust-analyzer (rust-lang.rust-analyzer)
- WSL (ms-vscode-remote.remote-wsl)
💡 Using an IDE other than Visual Studio Code is possible, though the setup process is not documented here.
- Latest version of Git with components:
- Git LFS (Large File Storage)
- Latest version of PowerShell 7
For detailed configuration of the above, use your own judgement - the defaults should work but customization is also generally fine.
This guide assumes a clean Windows PC in other regards.
- If you had to install any of the above prerequisites, restart your PC to ensure a complete installation.
- Install Rust using Rustup, with all default settings.
- Execute
cargo install just --lockedto install the Just utility (unless already installed).
After installing the Rust toolchain, we setup repository-specific tooling:
- In a directory of your choosing, clone the
oxidizerrepo:git clone https://github.com/microsoft/oxidizer.git.
💡 Even though the Windows and Linux development environments are largely independent, they will both use the same working directory (created by the above
git clonecommand). This allows you to build and test your changes immediately on both operating systems.
- Switch to the
oxidizerdirectory:cd oxidizer. - Execute
git config --local include.path ./.gitconfigto attach the repo-specific Git configuration. - Execute
just install-toolsto install all necessary Rust toolchain versions and development tooling. - Open
.vscode/settings.template.jsoncand save a copy as.vscode/settings.jsonto apply repo-specific settings for Visual Studio Code. Part of this file should be the same for everyone but the rest you can customize - refer to inline comments.
- Execute
just buildto build the workspace. Verify that the build is successful. - Execute
just testto execute all tests in the workspace. Verify that all tests pass. - Validate that debugging works by opening
crates/tick/examples/basic.rsand pressing theDebuglink that appears abovemain(). This should successfully launch the example app under the debugger.
The Linux distribution we use for development is Ubuntu 24.04, running as a WSL virtual machine.
- Install Ubuntu 24.04.1 LTS from the Microsoft Store.
- Open an Ubuntu terminal (e.g. from the Microsoft Store page, from the Start menu or in Windows Terminal).
- If you get an error about a required feature not being installed, try first restarting the PC to complete the feature installation.
- You will be asked to create a user account the first time you run Ubuntu. This is a local account unique to the Linux VM and is not related to your account on the host machine.
All commands that follow are to be executed in the Ubuntu terminal.
Next, we upgrade, install and configure development prerequisites:
- Execute
sudo apt update && sudo apt dist-upgrade -yto upgrade everything that is already installed. - Execute
sudo apt install -y curl clang llvm libclang-dev gdb perl python3 python3-pip git git-lfs build-essential cmake pkg-config libssl-devto ensure that essential packages are installed. - Install PowerShell 7.
- Execute
git config --global credential.helper "/mnt/c/Program\ Files/Git/mingw64/bin/git-credential-manager.exe"to set the correct Git authentication flow. - Execute
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | shand install Rust with all default settings. - Reopen the terminal to apply changes.
- Execute
cargo install just --lockedto install the Just utility (unless already installed).
Next, we setup repository-specific tooling on Linux:
- Switch to the
oxidizerdirectory you previously cloned on Windows, using a/mnt/cstyle path to access the Windows filesystem:cd /mnt/c/Users/username/Desktop/oxidizer(adjusting the path to match your chosen location). - Execute
just install-toolsto install all necessary Rust toolchain versions and development tooling.
⚠️ This chapter may conflict with other repos in the same WSL instance. Skip or undo if you experience problems.
After installing the Rust toolchains, we setup the build target directory for fast build times:
- Execute
mkdir ~/targetto create a directory for Linux build outputs. While the repo directory itself is shared between Windows and Linux, we will use a dedicated directory for build outputs on Linux to improve Linux build performance. - Execute
nano ~/.bashrcto open a text editor on this file. - Add
export CARGO_TARGET_DIR=~/targetnear the end of the file. - Save & exit.
- Reopen the terminal to apply changes.
- Execute
just buildto build the workspace. Verify that the build is successful. - Execute
just testto execute all tests in the workspace. Verify that all tests pass.
Visual Studio Code is also our standard Linux IDE and requires some additional setup to work with the Linux workspace.
⚠️ While the IDE runs on the Windows desktop, all tooling runs in the Linux VM, including Visual Studio Code extensions. The below steps will instruct you to install the minimum set of required Visual Studio Code extensions for the Linux environment.
- In an Ubuntu terminal, in the
oxidizerdirectory, executecode .to open the project in Visual Studio Code. - Open the Extensions panel in Visual Studio Code.
- Install following extensions by selecting "Install in WSL" for each:
- C/C++ (ms-vscode.cpptools)
- rust-analyzer (rust-lang.rust-analyzer)
- Close Visual Studio Code and open it again via
code .to complete extension setup.
Validate the setup by executing the following tasks from the task palette (F1):
Tasks: Run Build TaskTasks: Run Test Task
Validate that debugging works by opening crates/tick/examples/basic.rs and pressing the Debug link that appears above main(). This should successfully launch the example app under the debugger.
Run all essential CI checks locally with a single command:
just check-changesThis runs build, tests, clippy, formatting, and other validations in sequence—inspect the justfile for the full list of checks. Some checks (e.g., mutation testing) take too long to run locally; review the GitHub pipeline results to address those.
PR titles must follow Conventional Commits format (e.g., feat: add validation method, fix: resolve memory leak).