Contributing to yojimbo
July 8, 2026 · View on GitHub
Thanks for your interest in improving yojimbo. This document covers how to build, test, and submit changes.
Reporting bugs and requesting features
Open a GitHub issue with enough detail to reproduce: what you did, what you expected, and what happened. For build problems, include your OS, compiler, and the CMake and command output.
Security vulnerabilities are different — please do not open a public issue. Follow the private reporting process in SECURITY.md.
Building and testing
yojimbo builds with CMake. See BUILDING.md for the full details; the short version:
cmake -B build # bundled libsodium by default
cmake --build build -j
./bin/test # must end with "ALL TESTS PASS"
Please make sure ./bin/test passes in both a Debug and a Release build
(-DCMAKE_BUILD_TYPE=Debug / Release) before opening a pull request, and add or update
tests when you change behavior.
What CI checks
Every pull request runs the GitHub Actions workflow in .github/workflows/ci.yml. It must be
green before a change is merged. The jobs are:
- build & test on Linux (x86-64) and macOS (Apple Silicon), in debug and release;
- build & test on Windows (MSVC x64), debug and release;
- build & test on Linux against the system libsodium (
--sodium=system); - sanitizers: a Linux ASan + UBSan + LSan build of the test suite;
- fuzz: short libFuzzer runs of the parser targets in
fuzz/, seeded fromfuzz/corpus/; - soak: a time-boxed, sanitized run of the soak test.
If you touch an untrusted-input parser, consider extending the relevant target in fuzz/
(see fuzz/README.md); a crashing corpus input makes a great bug report.
Coding style
The repository ships a .clang-format that encodes the existing style (Allman braces,
four-space indent, spaces inside parentheses, Type * name pointers). Match the surrounding
code; new or edited code should follow the config, but please do not mass-reformat
existing files in a feature PR — it buries the real change.
The vendored third-party code under sodium/ and tlsf/ is kept byte-for-byte as upstream
(sodium/ is verified identical to libsodium) and has its own DisableFormat .clang-format
— do not reformat or hand-edit it; re-sync from upstream instead.
New source files should carry the same BSD 3-Clause license header as the existing sources.
Pull requests
- Keep each pull request focused on one change; small, self-contained PRs are easier to review and to revert.
- Write a clear description of what the change does and why.
- Make sure the full CI matrix is green.
License
yojimbo is released under the BSD 3-Clause license. By contributing, you agree that your contributions are licensed under the same terms.