Semy: The Semantic Version Parser for C11
Posted on February 4th, 2026 #programming
Semy (rhymes with Remy) is a Semantic Version 2.0.0 (SemVer) parser and processor. It is both a C library and a command-line interface.
You can use Semy to validate semantic versions, extract version identifiers, check if two versions are equal, and check if a version is newer or older than another.
Why?#
I wrote Semy because I have multiple projects that require a semantic version parser. Semy was purpose built for those needs.
Technical Tidbits#
I developed Semy as a single header/source implementation so it’s easily vendored into my own (and your own) projects. It also includes CMake and Autotools build scripts for traditional compilation and installation.
According to the SemVer specification, there is no length limit on the number of pre-release and build identifiers a semantic version can have. I wrote Semy without dynamic memory allocation, so the implementation does assume a maximum size, however, that limit will never be realistically hit in practice.
Semy is extensively tested:
- Unit tests with 100% code coverage
- Fuzz tests (libFuzzer and AFL++)
- Code sanitizers (UBSAN, ASAN, and MSAN)
- Extensive run-time checks
The SemVer specification is published at https://semver.org/.
The Initial Release#
I released Semy at version 0.9.0 because it’s well tested and “stable,” but I’d like its API to bake in the wild before I commit (pun intended) to a 1.0.0 release.
Semy is available under the MIT License. Its code is published at https://github.com/hgs3/semy.