Every C++ tool has strengths. Here's where cmod fits in — and where it doesn't.
Choosing a build tool for C++ is a high-stakes decision. Migrating later is painful. So we want to be upfront about what cmod does well, what the alternatives do well, and where each falls short.
The Comparison Matrix
| Feature | cmod | CMake | Conan | vcpkg | Bazel |
|---|---|---|---|---|---|
| C++20 modules | Native | Experimental | None | Partial | Partial |
| Package management | Built-in (Git) | None | Registry | Registry | Rules |
| Lockfile | Mandatory | None | Optional | Partial | Implicit |
| Config format | TOML | CMake DSL | Python | JSON | Starlark |
| Registry model | Decentralized (Git) | N/A | Centralized | Centralized | Custom |
| Security | Built-in | None | Partial | SHA | Hermetic |
| IDE extensions | VS Code + CLion | CMake Tools | None | None | Plugin |
| Setup complexity | Low | Medium | Medium-High | Medium | High |
cmod vs CMake
CMake is the de facto standard for C++ build generation, supported by virtually every IDE and CI system.
Where CMake excels
- Universal platform support. CMake generates build files for Make, Ninja, Visual Studio, Xcode, and more.
- Mature ecosystem. Thousands of
FindXxx.cmakemodules and decades of community knowledge. - IDE integration. Every major C++ IDE supports CMake projects natively.
Where cmod improves on CMake
- Dependency management. CMake has no built-in package manager. cmod resolves, fetches, and pins dependencies automatically.
- Lockfiles. CMake has no concept of a lockfile.
- C++20 modules. CMake's module support is experimental. cmod discovers module dependencies automatically via
clang-scan-deps. - Simplicity. A
cmod.tomlis 15 lines. An equivalent CMakeLists.txt is often 50–100+ lines.
cmod vs Conan
Conan is the most established C++ package manager with a large central repository.
Where Conan excels
- Large package ecosystem with pre-built binaries
- Flexible Python-based recipe system
Where cmod improves on Conan
- No central registry required. cmod uses Git URLs directly.
- Module-native. Conan is header-first.
- No Python dependency. cmod is a single Rust binary.
cmod vs vcpkg
vcpkg is Microsoft's C++ package manager, deeply integrated with Visual Studio.
Where cmod improves on vcpkg
- Decentralized. No centralized port registry.
- Module-native. vcpkg's module support is limited.
- Stronger reproducibility. Mandatory lockfiles with exact commit hashes.
cmod vs Bazel
Bazel is Google's build system designed for massive monorepos.
Where cmod improves on Bazel
- C++-native. cmod understands modules, BMIs, and Clang natively.
- Simpler setup. TOML vs Starlark rules.
- Lower barrier to entry. No need to learn Bazel's execution model.
What cmod Doesn't Do (Yet)
- Compiler support is LLVM/Clang-first. GCC and MSVC support is planned.
- Smaller ecosystem. cmod is new and doesn't have Conan's package catalog.
What cmod now does that it didn't before
- Remote caching — HTTP-based protocol for sharing build artifacts across teams
- IDE extensions — VS Code extension and CLion plugin with LSP integration and module graph visualization
- Distributed builds — Work-stealing distributed build workers
The cmod Sweet Spot
cmod is the right choice when you're starting a new C++20+ project, you care about modules, you prefer decentralized dependencies, you value simplicity, and reproducibility is non-negotiable.
Try It Yourself
git clone https://github.com/satishbabariya/cmod.git
cd cmod && cargo build --release
cmod init my_project
cd my_project
cmod add github.com/fmtlib/fmt@10.0
cmod build
cmod run
cmod is open source under Apache-2.0. We welcome feedback — join the conversation on GitHub.