Skip to main content

kmpkg is a pragmatic C/C++ package and build ecosystem designed from long-term, production-level C++ engineering experience.

The project originated around 2018, driven by real-world, large-scale C++ development where build reproducibility, binary management, and deployment consistency matter far more than theoretical completeness. Over time, several existing package managers were evaluated in depth, including cget, Conan, Conda, and vcpkg. Each addressed part of the problem, but none formed a clean, production-friendly system suitable for long-term operation.

Before kmpkg, an earlier internal tool (carbin) was developed to explore binary-centric package workflows. The lessons learned from that work led to the creation of kmpkg, which draws inspiration from vcpkg’s overall model while deliberately reworking its core assumptions.

Unlike vcpkg, kmpkg treats mirror and distribution control as first-class concepts. Mirrors are elevated to the top level of the system, making kmpkg significantly easier to operate in restricted networks, private infrastructures, and enterprise production environments. This design prioritizes flexibility, determinism, and operational simplicity over centralized or opaque assumptions.

kmpkg is also influenced by the dependency and versioning philosophies of Go modules and Rust Cargo, while remaining firmly grounded in the realities of C++: heterogeneous build systems, long compile times, binary reuse, and complex toolchains.

Rather than being “just a package manager,” kmpkg is designed to integrate naturally with the surrounding toolchain—such as kmcmake and kmdo—to form a coherent workflow where project generation, dependency management, build configuration, binary publishing, and release are treated as a unified system instead of disconnected tools.

For more operational details, kmdo provides kmpkg-related commands to clone, merge, and publish packages and mirrors. See the kmdo documentation for more information.

For a deeper discussion of the design goals and trade-offs behind kmpkg, see Why kmpkg.

Get started

First, follow one of our quick start guides.

Whether you're using CMake, MSBuild, or any other build system, kmpkg has you covered:

You can also use any editor:

If a library you need is not present in the kmpkg registry, open an issue on the GitHub repository or contribute the package yourself.

After you've gotten kmpkg installed and working, you may wish to add tab completion to your terminal.

Use kmpkg

Create a manifest for your project's dependencies:

kmpkg new --application
kmpkg add port fmt

Or install packages throught the command line:

kmpkg install fmt

Then use one of our available integrations for CMake, MSBuild or other build systems.

For a short description of all available commands, run kmpkg help. Run kmpkg help [topic] for details on a specific topic.

Key features

kmpkg offers powerful features for your package management needs:

Contribute

kmpkg is an open source project, and is thus built with your contributions. Here are some ways you can contribute:

Please refer to our mantainer guide and packaging tutorial for more details.

This project has adopted the [Microsoft Open Source Code of Conduct][contributing:coc]. For more information see the [Code of Conduct FAQ][contributing:coc-faq] or email kumo.pub@outlook.com with any additional questions or comments.

Resources

License

The code in this repository is licensed under the MIT License. The libraries provided by ports are licensed under the terms of their original authors. Where available, kmpkg places the associated license(s) in the location installed/<triplet>/share/<port>/copyright.

Security

Most ports in kmpkg build the libraries in question using the original build system preferred by the original developers of those libraries, and download source code and build tools from their official distribution locations. For use behind a firewall, the specific access needed will depend on which ports are being installed. If you must install it in an "air gapped" environment, consider instaling once in a non-"air gapped" environment, populating an asset cache shared with the otherwise "air gapped" environment.

Telemetry

kmpkg collects usage data in order to help us improve your experience. The data collected by Microsoft is anonymous. You can opt-out of telemetry by:

  • running the bootstrap-kmpkg script with -disableMetrics
  • passing --disable-metrics to kmpkg on the command line
  • setting the KMPKG_DISABLE_METRICS environment variable

Read more about kmpkg telemetry at https://pub.kumose.cc/kmpkg/about/privacy.