What’s everybody working on? (August Edition)

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.

3 Likes

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.

5 Likes

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 :grin:

5 Likes

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

20 Likes

Continuing to work on my toy browser: Hush Browser

8 Likes

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.

Feel free to help with polishing the graphical interface made with Zig and DVUI.

https://codeberg.org/jasm/jasm-sessions

https://codeberg.org/jasm/jasm-session-manager

https://codeberg.org/jasm


13 Likes

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.

7 Likes

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.

7 Likes

i will be working on completing the Zig book

Cool! I think your chapter on Allocators is great!

2 Likes

Pixel art is awesome! IMO it’s the best looking game style :alien_monster::alien_monster::alien_monster:

2 Likes

I love it too, and it’s the only form of drawing I might be able to learn how to draw ahah, but yeah I really like it and when it’s done well like in Faster Than Light, I think it just makes the game more accessible both for me and the user, making a 3d game and the assets that goes with it, is another beast entirely.

2 Likes

I finished the TinyGo based ZigBee->LoRa bridge. That was great fun, and pretty cool that my house sensors can now send me messages over radio :slight_smile:

Otherwise, last month my PinePhone Zig OS/microkernel was put on hold whilst I searched for a home in the ‘cooler’ north. The good news is that I found a home! The bad news is that the area is already on the 4th heat-wave of the summer, it hasnt rained for 4 weeks, and there is a high alert for forest fires. I just cant get my head around the speed at which the climate is changing here in Europe :frowning:

Anyway, I’m looking forward to getting back to some Zig coding. I really liked the recent wasm4 game jam concept :slight_smile: and pondering how difficult it would be to parse a wasm binary on the phone. Probably easier to offer a native phone build target, and just implement the wasm4 API. Although I still need to solve audio on the phone. Anyway hopefully I find some time to work on this, once I get the keys and aircon installed!

6 Likes

TinyGo is fun. I always watch that guy on Fosdem. It is always hilarious.

About the climate, yes, it is changing, but the last three to five years the summer was kaka, wet and cold. Now we have a hot summer and the media is complaing. The previous years it was silent.

Started making solenoid last month. Minimal Tauri clone in Zig.

You can make desktop applications and then build an executable binary. In development, uses localhost URL. In binary, uses assets.zig. The assets embedded to executable binary in buildtime.

Has plugin system. You can register your plugins basically. Then you can send an IPC request and your plugin will execute and return your frontend a message you defined.

But needs more work. I can only develop it weekends. Docs site not working. You can check the code in examples folder.

Uses WebkitGTK(Webkit6), GTK4. GObject GNOME 50 SDK bindings.

Supports latest master version of Zig.

Uses bindings created with zig-gobject. the bindings

Not preferred for production. Only supports Linux because uses WebkitGTK. But I’ll add support for Windows(WebView2) and macOS(WKWebView).

Thanks. :slight_smile:

6 Likes

I’m currently working on a tool to help debugging the mooltipass dev board.

This tool spy the communication between two mcu and help you to analyze payload content:

.

11 Likes

After recently finishing my .env files backup tool, I’ve embarked on the much more ambitious quest of building an SSG. Specifically a Hugo alternative, with a focus on small websites and minimal configuration, with an extended mustache syntax for templating.

3 Likes

Hello! I am working on a streaming terrain viewer. It uses raymarching to render the terrain and displays orthophoto images on top as textures. You can point it at very large raster datasets from opentopography.org and it will load it without needing to process the data yourself in any way. Data is streamed in based on what the camera should see, so you can explore huge datasets without waiting much. You can fly around the world (this is pretty fun) or walk on the surface (this is pretty boring). It’s reasonably fast on my modest integrated laptop GPU, so it should hopefully be pretty accessible, although I haven’t tested it on any other machines yet.

I have basic pointcloud rasterization mostly working, but the renderer is still 2.5D, meaning you can’t see overhangs or vertical holes. In the future I might update the renderer to show full 3D geometry. The screenshot below is viewing geotiffs, not pointclouds.

I’m using Sokol for graphics. Right now this is a native app, but it should be easy to build this for the web and use WebGPU for rendering, since Sokol supports that.

I hope to release this by the end of the year. It would be open source and cross-platform.

This is my first major Zig project, and I’m still on version 0.15.2. I’ll probably upgrade straight to 0.17 when it comes out.

Thanks for reading!


Mt Ranier dataset from OpenTopography - Survey of Mount Rainier, WA, 2021

A huge world, about 33 Skyrims by area. 93 GB.

28 Likes

This is very cool, thanks for sharing!

A huge world, about 33 Skyrims by area.

And thanks for using a unit of size I understand :stuck_out_tongue:

2 Likes

Currently I am learning vulkan + trying to create my first decent abstraction of vulkan api to something more high level. But now I only have a triangle which can be either shown on screen or saved to file so it is a long path :3

Also plan to start learning shaders this month

8 Likes

Working on a small browser renderer in zig for a talk I’ll be doing next month. Based on Matt Brubeck’s “Let’s build a browser engine” series.

5 Likes