Skip to main content

Advocate & Deprecate

kmpkg continues to support certain features from traditional C++ package managers to facilitate migration for legacy vcpkg users. While these compatibility features exist, new projects are strongly encouraged to adopt the mirror-first workflow for better reproducibility, flexibility, and operational simplicity.

Advocate: Mirror-First Workflow

kmpkg emphasizes a mirror-first approach for C/C++ package management:

  • Clone & Merge: Instead of relying on a central registry, kmpkg enables users to clone packages and merge updates from mirrors.
  • Operational Predictability: Mirrors make dependency resolution deterministic across different environments, ensuring the same binary and feature set everywhere.
  • Private & Restricted Networks: Mirror-based workflow allows teams to maintain internal package copies without depending on external servers.
  • Binary Variants Support: Mirrors allow maintaining multiple binary variants for different architectures, compiler settings, or feature flags.
  • User as Super-Citizen: Developers control which mirrors, binaries, and features are active, rather than being constrained by a central system.

Deprecate: Registry-Centric & Overlay Approaches

Traditional C/C++ package managers often rely on centralized registries or overlays:

  • Registry-Centric Limitations: Version updates, breaking changes, or unsupported features in the central registry can break builds across machines.
  • Overlay Approach Limitations: Overlaying dependencies may lead to complex dependency trees, hidden overrides, and non-deterministic builds.
  • Binary-Only Constraints: Pure binary distribution schemes cannot adapt to varying feature requirements (e.g., RocksDB compression options, RTTI settings), leading to explosion of variants or compilation failures.
  • Operational Complexity: Centralized registry or overlay solutions increase maintenance overhead and reduce flexibility for enterprise production environments.

Conclusion

kmpkg advocates mirror-first, flexible, user-driven workflows while deprecating registry-centric and overlay-based designs. This ensures reproducible builds, operational simplicity, and maximal control for C++ developers.