Continuing with my last post, I decided to try and find an existing CLI arg parseing library instead of crude, hand-rolled parseing I was doing. Argzon looked interesting, so I updated it from zig-0.15.2 → zig-0.16.0. That was the easy part, now I’m just trying to work around some quirky behaviour, and figure out if it’s the libraries fault or simply that argument parseing is inherently difficult, even with a library helping you (i.e. user error). I’m pretty sure it’s the latter.
Hello! I’m new to Zig, but not new to programming. (Coming from Go.)
I’m working on zig-vars. It’s a small library to expand environment variables.
Example: this expandEnv(a, env, "Hello, ${HOME}!") will output this "Hello, /home/me!"
This little project has been fun (especially since I’m not allowed to have fun at work any more) and has helped me learn more Zig.
The library is actually flexible enough to allow more than just environment variables. This led to learn that Zig doesn’t really do closures? I also read some blog posts about interfaces Zig Interfaces 2023 and Zig Interface Revisited 2025. I also kinda peeked at std.mem.Allocator. All of these were kinda scary… but got a little better the more I read…
I ended up, I guess, creating a DataSource interface. I also created an environment variable implementation and a strings hash map implementation. Then those get passed to a more generic expand function. Those details are mostly not important for users, unless they want to grab data from some source besides the env or a hash map.
As last month, I’m still heavily working on my s3 cli tool, z3cli, and contribute much to the underlying Zig S3 library. Since I need many features before they get merged upstream into the lib, I fetch my own fork as dep for the tool.
I was able to implement some more features into the cli tool, as up/-downloading files or objects recursively and listing object versions. Next points I’ll implement are i.a. list/abort multipart uploads, get/put bucket policies/lifecycle-configuration etc. The tool is now so polished that I can use it as my daily driver at work and maybe in the near future can distribute it to our customers/researchers as homemade tool to access our s3 storage systems.
Furthermore, I did some simple benchmarking, and happily my Zig tool beats out other popular s3 cli tools/SDK’s (written in Rust, Go and Python) performance-wise! That, surely, is accounted for by Zig itself as performant and fast programming language and not my subpar coding skills. Another point for Zig ![]()
I’ve been starting to work on my first “real” game, I’ve made a few already but those were mostly to fight boredom. Currently it’s barely started, every single assets is stolen from itchio, but it’s enough to at least work on it.
Basically the concept is going to be a merge between Path Of Exile 2 (the theory craft part / the setting / and the system they use to procedurally generate maps) and Faster Than Light, in terms on the gameplay loop. The game is being built with raylib, it embed lua for scripting. Right now it’s just starting to look like a game (not a good one).
Now that I have a start of a semblance of a game. I will focus my energy into developing tools. Like a map editor (because the procedural generation works by generating a layout, and choosing for a given biome, a set of premade blocks).
The game is going to be isometric, but pixel art, since I don’t have the skils nor the means to make a isometric good looking game. In the end I will probably publish it on Steam, but given the scope I have in mind, I’m probably going to need a few years.
Also I wanted to point out that build.zig is really god’s work, I’ve been loving how easy it is to make some insanely useful meta programming steps. For example I’ve a build step, that recursively walk my assets directory, and create a module, where each directory is a namespace, where leaf structs contains constants that contain the absolute path of each texture/sound etc. which is really useful for not loosing time.
I also have a step that uses a file where I export the types I want to debug, and automatically creates an imgui debug layer. Anyway build.zig is really cool
Continuing to work on my toy browser: Hush Browser
I’ve uploaded my first project, a session manager for modular audio setups (mainly Linux, in theory crossplatform).
It started with a bash script, then learned Python, switched to Go and did a GUI and a C related tool in Zig.
Designing it and searching for simple solutions was the most fun. Trying to follow the Unix philosophy, made me as a beginning programmer solve some problems and found unexpected solutions and new possibilities.
It works for me, but I’m sure there is also a lot room for improvements and that’s one of the reasons I’ve uploaded it at open source.
https://codeberg.org/jasm/jasm-sessions
https://codeberg.org/jasm/jasm-session-manager
For this month i will be working on completing the Zig book. And i will be focusing on learning more about the build system. Finally as am a Cybersecurity background i will be working on SNMP enumeration tool.
I noticed getting a bit braindead of my chessprogramming. So there will be a programming stop for a while.
The current challenge for me is learning the slovenian language. After a few years living here I want to get serious with speaking it really well.


