đź”§ The Pain of Existing Build Systems
If you’ve ever worked with C++, you’ve likely dealt with CMake, Conan, vcpkg, or other complex build tools.
While powerful, these systems often feel like they were made for large enterprise teams — not for indie developers, hobbyists, or anyone who just wants to get started quickly.
You write 100 lines of CMake just to compile a Hello World with one dependency. You debug cryptic Conan recipes. You spend more time configuring than coding.
I’ve been there. I was tired of it. So I built something radically simpler.
🚀 Meet Zyn
Zyn is a build system for C/C++ that follows one simple idea:
You should be able to build your project and use any GitHub library with a single command — no setup hell
⚡ Example: Add GoogleTest
With Zyn, this is how you add a dependency:
[dependency]
https://github.com/google/googletest
Zyn will:
- Clone the repo
- Build it
- Link it to your project No CMakeLists.txt, no conanfile.py, no package.json-style complexity.
đź§ Why Does This Matter?
Because the barrier to entry in C++ is too high. New developers shouldn’t have to master the intricacies of multiple build tools just to use a library.
Zyn lets you:
- Start a project in seconds
- Add dependencies by just linking to GitHub
- Focus on code, not build logic
🛠️ Under the Hood Zyn uses a simple project layout:
/src
/build
/include
Future versions will support:
- IDE project generation (CLion, VSCode, etc.)
- CI/CD build support
- Windows/macOS builds
- Plugin system
🤔 Isn’t This Reinventing the Wheel?
A little, yes. But wheels can be reinvented — especially when the old ones have square edges.
CMake, Conan, Meson, Bazel — they all have their strengths. But for 80% of real-world use cases, they’re too heavy, too verbose, and too unfriendly.
Zyn is not trying to compete with enterprise tooling. It’s trying to make C++ fun again.
🙌 Try It, Break It, Fork It
The project is open source on GitHub:
👉 https://github.com/zyntraxis-corp/zyn
Try it. File issues. Suggest features. Or just tell me why it sucks. I’m building this for real developers, and real feedback is gold.
Let’s make C++ accessible again.
Top comments (7)
Not true. That is one of:
We can boil down the needs of dependencies. You effectively need:
Well, you need much more but i'm trying to not make this an essay long post..
cmake (and pkg-config and... many others) do these things for you.
Adding googletest is arguably a more complex example as you also want to build a specific binary. But still, including it is far less then your baseless claim of "100 lines":
In general though, adding a dependency in cmake is fairly easy. I'll take libxml2 as that's a fairly common library. In modern cmake you just need 2 lines:
Or perhaps openssl?
That
target_link_libraries
line isn't even a new line, it's a modification of your existing line. This does assume that you have LibXml2 installed and that cmake itself can find the config file for it (which in this case islibxml2-config.cmake
)What can improve a lot is the package manager part in all of this. That is outside the scope of a build system. At least in C/C++. It's not many other languages that have an actual compiler (Go, Rust, ...).
So for cmake again. Say you want a specific version of openssl then you'll be in for a complicated configuration needed to get that working. This is where C/C++ can massively improve. Then again, it has been done before but just doesn't seem to be a de-facto succes and standard.
To conclude this, build systems are a thorough pain in the ass. All of them. If you like self inflicted pain then by all means keep on working on your project and hope for the best. Realistically though, it's extremely unlikely that you'll create a new system that will be a success. I would save yourself the trouble and pain and move on to a project that has a higher chance of not ending up bitrotting.
Blindingly using the latest version of a dependency is a bad idea for many reasons. You have to depend on specific versions.
You're absolutely right — depending on the latest version can be risky.
If you want to use a specific version in Zyn, just include the tag, branch, or commit in the URL like this:
github.com/gabime/spdlog@v1.12.0
Zyn will automatically clone the repo and check out the specified version.
Version pinning is supported in version 1.0.1 — it's just that simple.
Tags can be moved. Online sources can be compromised. Using code downloaded from the internet for every fresh build is fine, I guess, for hobby projects, but doesn't belong in production use unless you also match checksums.
Thanks for the feedback, we will fix everything in future versions!
perfect tbh, i get lost in build tools way too often and end up just wishing i could skip all that mess. seeing simple stuff like this legit feels refreshing
Thanks a lot — that means a lot to hear!
That exact frustration is what motivated me to build Zyn. C++ should be powerful and accessible — not a maze of build scripts and config files.
If it feels refreshing, then I’m on the right track. 🙌
And if you ever run into friction or have ideas to make it even smoother, I’m all ears!