What are you using for UI?
I’ve been working on mint, a custom Zig code formatter. mint performs automatic line wrapping without syntactic hints. Currently, it supports Zig 0.16.0 (but should technically work with other versions as well). It is able to format itself and a lot of open source Zig projects out there. Source code is available on GitHub.
It is very important to port over one behaviour of spreadsheet software that is integral to the user experience: absolute total field type confusion. Is my cell going to be interpreted as a date? An integer? Currency? Temperature in Fahrenheit? Text?? I don’t know. And that’s beautiful.
\s
It’s a library designed after Rust’s GPUI, but it significantly drifted away in the course of my work.
I believe I will opensource it, but at this stage the code is pretty ugly as soon as I’m focused on performance mostly.
Hi, amazing project can you publish it:
I think you can get some insperation here:
Hi. I’m working on what started as ‘sand simulation’ inspired by Noita. It turned into a small sandbox after a couple of weeks – place/remove blocks, and they will participate in the simulation. I plan to add more block types, but we’ll see.
There’s no particular purpose for this. I just like Zig, and heard of sokol-gfx – and I combined them to learn both.
P.S. – Respect to flooh ![]()
I’ve been working on a Ur-Quan Masters (Star Control II) clone in Zig, just for fun. This is multiplayer pvp only and only a few of the ships will be implemented. Just enough to play with friends. I’m using graphics from the public Ur-Quan Masters repo.
Running on sokol gfx with most of the engine in Zig. The engine exposes a Lua API and most of the game is written in Lua. TBH, I’m not sure if having Lua in the mix is all that useful.. I have a “mini ECS” written in Zig and exposing that to Lua and writing systems in Lua feels kind of awkward compared to how I’d implement the same things in just Zig.
Will be working sometime this month on creating a vim plugin to handle golang text/template and html/template .tmpl file formatting (in Zig!!!).
Vim-go’s formatting doesn’t work quite as i need it to, so i will be meesing around with that.
phpz — Use Zig as an alternative to C for developing PHP extensions.
Supports PHP modules, globals, functions, classes, constants, INI settings, memory, lifecycle hooks, observers, and more — covering most PHP extension development scenarios.
Provides a wide range of type‑safe wrappers around Zend structs.
Compatible with PHP 8.2–8.5 (NTS and ZTS), and supports Linux, macOS, and Windows.
Wraps PHP’s native allocators (emalloc/efree) into Zig Allocator, keeping memory management fully consistent with PHP’s own behavior.
Actively under development.
The last weeks I have been working on a CLI tool for interoperating with S3 storages, which is kind of a CLI client frontend for the z3 Zig library.
The CLI client is still in an early stage and many features are not implemented yet. Nevertheless, basic functionalities like up/downloading files/object and listing works fine. I just made the repo public, so have a look if you like:
Hey, I’m new here and I just recently started learning zig about 3 weeks ago.
For someone who started learning programming 3 years ago and has only mostly worked with Javascript and Python, zig is quite interesting. Still getting the hang of manually managing memory, dealing with pointers and the whole ownership/lifetime concept.
Currently I’m building mini programs to better understand these system concepts. But all in all, zig is quite the fun and interesting programming language to learn and write. ![]()
A standalone drum synth that lets users create bass drum kick samples. Mostly C. Zig is used for building and embedding assets. Raylib, rtaudio, rtmidi, faust, sqlite, native file dialog libraries are used. WIP.
I’ve been making a zig program that does the same as a small python utility, so that I can run it on a Raspberry Pi without having to install a bunch of Python dependencies and mess around with venv’s. The utility forms one part of a process to use said Raspberry Pi to remotely re-program an ESP32-S3 microcontroller board.
Also, the executable is so small (124 kB for optimize=ReleaseSmall) compared to the binary image for the ESP32 (2 MB) that I can just package them together and not have to worry about what the system has installed.
P.S. being able to cross-compile with a single command line switch is amazing.
I have been working on GitHub - omerfirmak/zevm: Zig EVM - Ethereum protocol in Zig · GitHub. It is a direct-threaded interpreter implementation of Ethereum Virtual Machine. It looks to be the fastest one out there, leveraging comptime, tailcalls and careful allocation schemes that fit workload the best.
I’ve been working on a program to emulate the behaviour of the radio in Mewgenics.
It’s super simple - I’m using SDL3 for audio playback, and stb_vorbis.c for decoding OGG files, exactly like Mewgenics itself does.
I tried using miniaudio at first, but it fucked me around constantly - I got it working to the point where it would play back audio in a recognisable form, but sped up slightly and hideously crackly.
Since I plan to use this to play music over the voice chat in TF2, it was necessary to add an interface for the user to choose the output device, since to micspam I have an output device (Line 1 (Virtual Audio Cable)) that just streams the audio back into an input device, and I need to stream to that one.
This worked well and I confirmed that I can output to the voice chat, and since it was relatively fun to do this part I also let the user choose the volume level, and access a “songs_only” mode that was defined in radio.gon (the file that defines the radio state machine in Mewgenics).
One surprising difficulty I had with audio playback in SDL3 was that I kept getting an error saying “Cannot upload partial sample frames”.
It turns out that whenever you call SDL_PutAudioStreamData, it expects the buffer length to be exactly equal to the byte-size of one second of audio at the sample rate, times the number of channels.
And this isn’t really documented anywhere. Fun!
I’ve also been doing something very lazy, which is that I treat playing sounds as a blocking function; as in, I upload a full sound file, then literally sleep until it finishes playing, then clear the audio buffer and return control to the caller.
Since I know ahead of time that I’ll never need to play multiple tracks at once, this approach hasn’t yet come back to bite me.
Another funny/lazy thing I did is that I didn’t bother using translate_c on stb_vorbis.c, instead opting to declare the functions I wanted as extern and just use addCSourceFile() to statically link it.
Plans for the future:
- Separate stdin input thread or GUI to live-change volume, skip the current track, rescan audio devices and pick a new one, pause and resume (basically a minimal music player interface)
- Configuration file for blacklisted songs
- Failing that, “spoiler-free” mode that doesn’t play any unlockable songs
I have wasted wayy too much money on a calorie tracker app. Made an account just to comment how cool this is.
Time to switch to “What’s everybody working on? (August Edition)”?



