Contributing to chrlauncher
Contributions, bug reports, and feature requests for chrlauncher are highly encouraged. Because the project interfaces closely with the Windows API and relies on specific build toolchains, setting up your environment correctly is essential.
Development Environment Setup
chrlauncher is built using standard Microsoft Windows build tools and is managed as a Visual Studio solution.
-
Clone the Repository Properly chrlauncher relies on external submodules for its core utility routines and build scripts. You must clone the repository recursively:
Troubleshooting: If you already cloned it normally and are missing files in thegit clone --recursive https://github.com/henrypp/chrlauncher.gitroutinefolder, rungit submodule update --initfrom your repository root to fetch them. -
Prerequisites Ensure you have a recent version of Visual Studio installed (the project files currently target MSVC v145 / Visual Studio 2026). During installation, you must check the "Desktop development with C++" workload to ensure the Windows SDK and MSVC compilers are installed.
Building from Source
You can compile the project using either the IDE or the command line. Both methods output the final executables into the bin/64/ (for x64) or bin/arm64/ directories.
Method 1: Using the Visual Studio IDE
- Open
chrlauncher.slnin Visual Studio. - At the top of the interface, select your target Architecture (
x64orARM64) and your target Configuration (Debugfor development,Releasefor final binaries). - Right-click the solution in the Solution Explorer and select Build Solution (or press
Ctrl+Shift+B).
Method 2: Using the Command Line (Automated)
If you prefer headless building or are setting up a CI/CD pipeline, use the provided batch scripts:
- Open a standard Windows Command Prompt (you do not strictly need the Developer Command Prompt).
- Navigate to your cloned repository.
- Run
build_vc.bat. This script utilizes thebuildersubmodule to automatically locate the installed MSBuild environment and cleanly compile both thex64andARM64Release targets in sequence.
Understanding the Submodules
When exploring the codebase, you will encounter two critical submodules maintained as separate repositories by the author:
routine: A highly optimized C library of common utility functions shared across Henry++ projects. It contains custom implementations for memory management, string manipulation, file I/O, and Win32 API wrappers, replacing heavier Standard C Library (libc) calls to keep the binary size tiny.builder: A set of helper batch scripts used primarily by the maintainer to automate packaging.zipreleases, compressing binaries, and applying GPG/Authenticode signatures.
Reporting Issues & Feature Requests
If you encounter a bug or have an idea for a feature, please use the GitHub Issue Tracker.
Best Practices for Bug Reports:
- Use the provided issue templates located in
.github/ISSUE_TEMPLATE/. - Always include your exact Windows OS version (e.g., Windows 10 22H2).
- Include the version of chrlauncher you are using.
- If experiencing a crash or update failure, run chrlauncher from the command line, reproduce the error, and include the generated debug output.
- Attach a copy of your
chrlauncher.ini(with any personal proxy credentials redacted).
Code Style Guidelines
If you are submitting a Pull Request, please ensure your C code adheres to the existing project style. The project uses standard C (not modern C++ paradigms). Prefer direct Win32 API calls over heavy abstractions, and utilize the routine submodule functions for memory and string manipulation where appropriate to maintain the small binary footprint.