← HOME - a blog about xit RSS ██╗ ██╗██╗████████╗██╗ ██████╗ ██████╗ ╚██╗██╔╝██║╚══██╔══╝██║ ██╔═══██╗██╔════╝ ╚███╔╝ ██║ ██║ ██║ ██║ ██║██║ ███╗ ██╔██╗ ██║ ██║ ██║ ██║ ██║██║ ██║ ██╔╝ ██╗██║ ██║ ███████╗╚██████╔╝╚██████╔╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚══════╝ ╚═════╝ ╚═════╝ DEVLOG - ZIG 0.16'S BREAKING CHANGES - November 27, 2025 I'm back from a lot of traveling and despite the jetlag and mild cold, I'm trying to get back into the project. The main progress I've made recently is making changes for Zig 0.16. I already wrote about the breakages from 0.15, but there are more on the way. Zig 0.15 (and soon, 0.16) massively broke the xit project, because I made heavy use of the standard library. Accounting for these changes has taken months, because xit is not a small codebase anymore; it's over 25k lines. I "signed up" for this by using an unstable language. While it's not always fun to deal with, the changes are good for the language and even improved xit's performance. One breaking change was zlib. In 0.15, Zig's zlib compressor was completely removed, and its decompressor was redesigned to comply with writergate. Since xit relies on zlib for git compatibility, this was a problem. My temporary solution was to copy the zlib code from the 0.14 std lib into the xit project, but that code uses the old-style readers/writers, so it's not a long-term solution. The great news is that someone contributed a writergate-compliant zlib compressor recently, so it'll be landing in 0.16. On a separate branch, I've already removed the vendored std lib code and replaced it with the new zlib compressor and decompressor. This was a lot of work, because they now have a very different API, but everything is looking good now. Zig 0.16 is also introducing the Io interface, which will need to be passed to anything that does i/o, including filesystem operations. I haven't done this change yet, and it's going to be pretty big in terms of line count, but I'm guessing it'll be mostly mindless work so I'm not worried about it. I'm pretty excited about this design because it should make it easy to multi-thread parts of xit. Besides that, I did some work on master to improve http in xit. The new HTTP client in Zig 0.15 is very difficult to use correctly, and after the initial work to support 0.15 I temporarily recommended people stick to ssh-based networking. I finally found and fixed the problem, so http-based cloning now works again. In the process of doing that, I realized my networking tests were not hitting certain code paths because they were making very small repos. I added some tests that fetch and push repos containing much more data, so hopefully that will catch more problems in the future. A year ago, I spent all three months of winter implementing git's client-side networking protocol in xit. This winter, I plan on implementing a server. My goal is to have a fully compliant git-compatible server written in Zig by the end of winter. I like doing this kind of boring, incremental work during the winter months when I'm stuck inside all day avoiding the bitter cold. That means the project will probably be quiet in the meantime. Come spring, xit will come out of hibernation and new feature work will continue.