I wrote a minecraft launcher in zig as a learning exercise.
I got a lot of practice writing zig code and I learned a few things about it.
- The GeneralPurposeAllocator is really useful for finding memory leaks, as is the std.testing.allocator for use in tests.
- The standard library HTTP client is really cool, but unfortunately fails on a lot of websites because it lacks TLSv1.2 support.
- Calling into C code is really easy. I used libCURL instead of the zig stdlib and it was easy to write a wrapper around it.
- The standard library JSON parsing is good, but error messages are not verbose enough to help you and by default they don’t indicate where in the tree the problem is. This can be added but it’s not obvious how to do it (spoiler: set the .diagnostics element on a std.json.Scanner). For types which the standard library can’t cope with, there is an escape hatch: implement jsonParse method for that type.
- The builtin module has useful constants for checking the current operating system and CPU architecture, which I used for hacking in linux-aarch64 support.
Finally however, I learned that minecraft on the pinebook pro sucks :( It’s just not got enough power to run the game well.