We all know the pain: you have a tiny C or ASM project, and suddenly you're knee-deep in CMake syntax from 2003, googling why your target_link_libraries silently does nothing. I built ForgeZero so that building feels like go build — you just run it and it works.
Here's what landed in the last two releases.
v1.6 — daily quality of life
fz init scaffolds .fz.yaml, .fzignore and a README in one shot. No more copy-pasting boilerplate before writing a single line of actual code.
Speaking of .fz.yaml — yes, I added proper config file support, because large projects need it. Define your deps, flags, output format once and forget about it. .fzignore works exactly like .gitignore: tell fz what to skip, it skips it.
-format bin outputs flat binaries — no ELF headers, just raw bytes. Essential for bootloaders and firmware where the header is dead weight.
libs in config auto-injects -lm, -lc, whatever you need. flags.cc lets you drop in -O3 -march=native without touching a build script.
v1.7 — for when the project gets serious
-j N parallel builds. On a 12-core machine the compile spreads across threads faster than you can blink. If you're building system software where every file matters, this one's a relief.
Linker scripts (-T, -Ttext) for precise address control — without this, working on OSes and embedded targets was just not practical.
fz -shell drops you into an interactive mode: tweak params, build, clean, watch output — all live. Useful when you're deep in a debug loop and don't want to retype the same command 40 times.
Full C++ support — .cpp, .cc, .cxx now compile with the same strict flags as C. No shortcuts.
Get it
go install github.com/forgezero-cli/ForgeZero/cmd/fz@latest
Fully open source. Docs, examples and a forum at fzforum.duckdns.org — drop by if you're tired of heavyweight build systems. PRs welcome. documentation
Top comments (0)