Zero Framework - Part 1
September 27, 2026

My goal with this open source software project is to be able to give back something back to the community utilizing the Zig language and to let someone get started using the Zig services in real-time projects
Learning Zig so far doing amazing, and I’m thrilled the way it’s forging its own route, rebuilding to give faster and consistent software for everybody to utilize.
I’ve followed the language since 0.15.0 and before all those releases, I’ve merely heard only about the Ghostty and TigerBettle applications were using the Zig
It was the project I use every day that sparked the concept and made me construct something equal or better than the present one. One PR rejection pushed me to pursue my values on the language not in my radar, and give some values to the community surrounding without any compromises.
Having been working in the industry for a long much of our daily routine falls on the http service and so I choose this as opportunity to learn the language and at the same time replicate what I know till now.
So far the steps to thousand miles going on able to grasp the floor done several releases with good figures deliver something that handles major chunk of http loads.
The whole intention of this entire work is, deliver an output with no GC, single binary, performs million requests with lesser resource foot print.
With recent release of 0.5.2, the project started supporting the latest 0.16.0 zig release and adapting all the latest updates for better and long run.
Why is this called Zero?
I am always interested by the number zero, and I’ve been curious to begin with this name.
-
Name should preferably begin with
Zlike most of the Zig community does -
Something that came from
India -
The basis on which you build anything for yourself and community.
Moreover, I could add, most of the pillar that sustains this zero framework are coming from the community, which makes my task no brainier, to glue together and build a project out of it. I mean zero value from my side :)
What is its purpose?
As I mentioned above, this project lays the foundation for any service focused job you do.
-
Imagine a process that communicates heavily with outsiders and uses the HTTP protocol. Or
-
Processes incoming events and makes business decisions. Or
-
Does recurring mundane tasks that need to be repeated from the zig code base. Or
-
Interacts with many other underlying open source software to deliver something for your business.
I read the features that zero offers, and I understand that it is not restricted to one portion, it is the first and safe block to bake a new one for your own and side projects.
Why Zig?
For most of us, Zig is new territory, even for the experienced. I can feel the amount of engineering intricacies that goes in to this language is intriguing, and offers no room for doubt to design something better.
The idea was born out of existing projects (you may call out as rip-off, copy cat and inspired) for sure, but that didn’t stop us from continually using and limiting ourselves to burn more resources for the service to be supplied from that one language.
The idea borrowed from project is written in golang which is the go to language for any new projects/tools that you deploy in the k8s worlds. But that also brings its own package of the managed runetime and overall size of the binary
The zig has a harder learning curve, you have to throw away your easy mind map on the prior language and you have to write everything from scratch to develop something. But the end result to fall back on this native compiled binary is significantly more trimmed, superior version of the golang itself.
| Language | Static Binary |
|---|---|
| Golang | 42 MB |
| Ziglang | 5 MB |
I am not going to argue that shorter binary size wins the race, but it is only the start of the iceberg.
The allocation approach helped us to limit and use much less resources to handle response time far better for given load.
# gofr v1.62 version go1.27.1 darwin/amd64
❯ go-wrk -c 10 -d 30 http://localhost:8000/ping
Running 30s test @ http://localhost:8000/ping
10 goroutine(s) running concurrently
120367 requests in 29.89106809s, 40.75MB read
Requests/sec: 4026.86
Transfer/sec: 1.36MB
Overall Requests/sec: 4008.69
Overall Transfer/sec: 1.36MB
Fastest Request: 149µs
Avg Req Time: 2.482ms
Slowest Request: 228.903ms
Number of Errors: 0
10%: 192µs
50%: 236µs
75%: 256µs
99%: 271µs
99.9%: 271µs
99.9999%: 272µs
99.99999%: 272µs
stddev: 3.528ms
#zero 0.5.2 version zig 0.16.0
❯ go-wrk -c 10 -d 30 http://localhost:8080/ping
Running 30s test @ http://localhost:8080/ping
10 goroutine(s) running concurrently
295209 requests in 29.737019239s, 38.57MB read
Requests/sec: 9927.32
Transfer/sec: 1.30MB
Overall Requests/sec: 9833.53
Overall Transfer/sec: 1.28MB
Fastest Request: 102µs
Avg Req Time: 1.006ms
Slowest Request: 128.027ms
Number of Errors: 0
10%: 126µs
50%: 144µs
75%: 150µs
99%: 155µs
99.9%: 156µs
99.9999%: 156µs
99.99999%: 156µs
stddev: 1.898ms
❯
❯ curl http://localhost:2121/metrics | grep app_http_response_hits
# HELP app_http_response_hits Response counts of HTTP requests.
# TYPE app_http_response_hits counter
app_http_response_hits{method="GET",path="/ping",status="200"} 295232
In next chapter I will detail all main elements of the zero framework, assist you to get started with your personal projects.
Signing off till then!
PS - The system used to verify the above number is Apple A1502.
❯ zf
c.' OS: macOS 15.8.1
,xNMM. Kernel: 24.6.0
.OMMMMo Hostname: ngs-MacBook-Pro.local
lMM" Uptime: 9h 27m
.;loddo:. .olloddol;. Packages: 9 (brew)
cKMMMMMMMMMMNWMMMMMMMMMM0: Shell: zsh 5.9
.KMMMMMMMMMMMMMMMMMMMMMMMWd. DE: Aqua 15.8.1
XMMMMMMMMMMMMMMMMMMMMMMMX. WM: Quartz Compositor 15.8.1
;MMMMMMMMMMMMMMMMMMMMMMMM: Terminal: xterm-256color
:MMMMMMMMMMMMMMMMMMMMMMMM: User: ng
.MMMMMMMMMMMMMMMMMMMMMMMMX. CPU: Intel(R) Core(TM) i5-5257U CPU @ 2.70GHz
lMMMMMMMMMMMMMMMMMMMMMMMWd. CPU Cores: 4
'XMMMMMMMMMMMMMMMMMMMMMMMMMMk L1 Cache: 32.0 KiB
'XMMMMMMMMMMMMMMMMMMMMMMMMK. L2 Cache: 256.0 KiB
kMMMMMMMMMMMMMMMMMMMMMMd L3 Cache: 3.0 MiB
;KMMMMMMMWXXWMMMMMMMk. GPU: Intel Iris Graphics 6100
"cooc*" "*coo'" Memory: 8.0 GiB
Ng :)
Written as part of zero.