Neargye/semver

Semantic Versioning for modern C++

★ 356Forks 48C++GitHub ↗Compare
c-plus-plusc-plus-plus-17cpluspluscplusplus-17cppcpp17header-onlyno-dependenciessemantic-versioningsemversingle-file

README

GitHub releases vcpkg package Conan package License

Header-only C++17 library for Semantic Versioning 2.0.0. Parse, validate, compare, format, and increment versions, or match them against version ranges. No dependencies.

#include <cassert>
#include <semver.hpp>

int main() {
  const auto version = semver::from_string("1.2.3");
  assert(version.major() == 1);

  const auto range = semver::try_parse_range("^1.2");
  if (!range)
    return 1;

  assert(range->contains(version));
}

Features

  • SemVer 2.0.0 parsing and validation with configurable input limits.
  • Configurable unsigned component types; version<> uses std::uint32_t.
  • Compare versions and match ranges across different component types.
  • Wildcard, partial, comparator, tilde (~), and caret (^) ranges. Combine constraints with spaces (AND) or || (OR).
  • Range matching, intersection checks, and minimum-version queries.
  • from_chars/to_chars, streams, std::hash, and optional std::format support.
  • Compile-time parsing where the compiler and standard library support it.

See the API reference and limitations.

Integration

Copy semver.hpp, or use a package manager:

  • vcpkg: neargye-semver

  • Conan: neargye-semver/x.y.z

  • CPM: CPMAddPackage(GITHUB_REPOSITORY Neargye/semver GIT_TAG x.y.z)

  • CMake package:

    find_package(semver CONFIG REQUIRED)
    target_link_libraries(your_target PRIVATE semver::semver)

More examples are available in example/.

Compiler compatibility

semver requires C++17 or newer and supports:

  • Clang/LLVM >= 6
  • Apple Clang >= 10
  • GCC >= 7
  • Visual Studio >= 2019