Nominated Zig versions

Zig projects in the wild often use either stable Zig or nightly Zig.

  • Stable Zig releases often occur just once or twice a year.
  • Nightly Zig, as the name implies, gets released every night from the ‘main’ branch of Zig.

For projects like Mach wishing to keep up with modern Zig developments and improvements, stable Zig is simply too infrequent and outdated (waiting 6-12 months to get an awesome new feature like incremental compilation, or a critical linker fix, is not ideal.)

But nightly Zig is far too frequent: if every project is targetting a new Zig version every day, then libraries tend to not be compatible with one another in practice.

Nominated Zig is a sweet-spot between stable and nightly Zig: we nominate a new nightly Zig version every 6 weeks and target that.

This gives everyone 6 weeks to update their projects to the same Zig version, and everyone can move ‘in unison’ keeping their projects compatible with one another - rather than targetting a wide array of nightly Zig versions.

Schedule

On these days, the current nightly Zig version is nominated.

DateDay
January 1Thursday
February 12Thursday
March 26Thursday
May 7Thursday
June 18Thursday
July 30Thursday
September 10Thursday
October 22Thursday
December 3Thursday

No special testing is performed beyond what Zig nightly already performs in e.g. its continuous integration testing. Sometimes a version may not be stable enough for a project using Zig, in which case you can e.g. hold back one version until the next one is nominated just 6 weeks later.

Nomination occurs on Thursdays, to give people (who are often maintaining Zig projects over their weekends) the ability to do so promptly on their weekend rather than during the week.

Where to get old versions

ziglang.org periodically purges old nightly Zig versions. As a result, recent nominated versions may be available there but older ones may not be. https://pkg.hexops.org is a Zig download mirror which hosts even older nominated Zig versions, and many popular tools in the community integrate with it directly.

Machine-readable version history

https://pkg.hexops.org/zig/index.json provides a machine-readable version history. It is a strict superset of https://ziglang.org/download/index.json - but with Mach versions added. A few types of Mach versions are added:

  • mach-latest -> always the latest nominated Zig version.
  • 2024.1.0-mach -> a nominated Zig version in YYYY.MM.DD-mach format (leading zeros omitted)
  • 0.3.0-mach -> an alias for the nominated Zig version that was used at the time of Mach v0.3 release.

What if we had just used stable zig in the past?

Periodically, the question comes up: “why not just use stable Zig versions?” The best way to answer this, and our own gauge for answering this, is to look at how this would’ve affected us in the past.

  • Between Zig 0.15 and 0.16:
    • Early access to Zig’s SPIR-V compiler backend, and ability of some Mach contributors to contribute to the SPIR-V backend, helped influence our future decisions for shading language.
  • Between Zig 0.14 and 0.15:
  • Between Zig 0.13 and 0.14:
    • We were able to identify a linker regression which prevented Mach from building/linking at all on macOS. This regression likely only affected Mach, as most projects do not use Zig ObjC bindings. If we hadn’t been able to identify this regression and give feedback to the Zig core team (who thankfully was able to fix it quickly!) then we may not have been able to upgrade to Zig 0.14 while keeping macOS support.
  • Between Zig 0.12 and 0.13 (1.5 months):
    • We were able to identify a linker regression which prevented using prebuilt WebGPU binaries on macOS, exactly one day after the 0.12 release. Again, this regression likely primarily affected Mach - so if we had been using stable Zig, we’d need to hope it got fixed in 0.13 which was a short development cycle - or wait ~10 months for 0.14 / regress our macOS support.
  • Between Zig 0.11 and 0.12 (8.5 months)
    • We were able to provide early feedback on the package manager and get various bugs/issues with it fixed for our use cases, being probably the earliest / most serious adopter of it. If we had not done this, we would’ve had no choice but to maintain our pre-package-manager dependency management system until Zig 0.13 was released ~10 months later.
  • Between Zig 0.10 and 0.11 (9 months)
    • Early package manager feedback.

Nominated Zig history

2024.11.0-mach

Zig 2024.11.0-mach and 0.14.0-dev.2577+271452d22 are identical.

Install it using zigup:

zigup 0.14.0-dev.2577+271452d22

Or download it using our pkg.machengine.org mirror:

OS/ArchKindDownload mirror
Linux x86_64Binaryzig-linux-x86_64-0.14.0-dev.2577+271452d22.tar.xz
Linux aarch64 (ARM)Binaryzig-linux-aarch64-0.14.0-dev.2577+271452d22.tar.xz
Windows x86_64Binaryzig-windows-x86_64-0.14.0-dev.2577+271452d22.zip
Windows aarch64 (ARM)Binaryzig-windows-aarch64-0.14.0-dev.2577+271452d22.zip
macOS x86_64 (Intel)Binaryzig-macos-x86_64-0.14.0-dev.2577+271452d22.tar.xz
macOS aarch64 (Apple Silicon)Binaryzig-macos-aarch64-0.14.0-dev.2577+271452d22.tar.xz
Source codeSourcezig-0.14.0-dev.2577+271452d22.tar.xz

Installation: Download, extract, and place on your system $PATH. Ensure zig version reports the right version.

Signatures: .minisig Download signatures can be retrieved from ziglang.org for all downloads.

Tips on upgrading your code

2024.10.0-mach

Zig 2024.10.0-mach and 0.14.0-dev.1911+3bf89f55c are identical.

Install it using zigup:

zigup 0.14.0-dev.1911+3bf89f55c

Or download it using our pkg.machengine.org mirror:

OS/ArchKindDownload mirror
Linux x86_64Binaryzig-linux-x86_64-0.14.0-dev.1911+3bf89f55c.tar.xz
Linux aarch64 (ARM)Binaryzig-linux-aarch64-0.14.0-dev.1911+3bf89f55c.tar.xz
Windows x86_64Binaryzig-windows-x86_64-0.14.0-dev.1911+3bf89f55c.zip
Windows aarch64 (ARM)Binaryzig-windows-aarch64-0.14.0-dev.1911+3bf89f55c.zip
macOS x86_64 (Intel)Binaryzig-macos-x86_64-0.14.0-dev.1911+3bf89f55c.tar.xz
macOS aarch64 (Apple Silicon)Binaryzig-macos-aarch64-0.14.0-dev.1911+3bf89f55c.tar.xz
Source codeSourcezig-0.14.0-dev.1911+3bf89f55c.tar.xz

Installation: Download, extract, and place on your system $PATH. Ensure zig version reports the right version.

Signatures: .minisig Download signatures can be retrieved from ziglang.org for all downloads.

Tips on upgrading your code

2024.5.0-mach

Zig 2024.5.0-mach and 0.13.0-dev.351+64ef45eb0 are identical.

Install it using zigup:

zigup 0.13.0-dev.351+64ef45eb0

Or download it using our pkg.machengine.org mirror:

OS/ArchKindDownload mirror
Linux x86_64Binaryzig-linux-x86_64-0.13.0-dev.351+64ef45eb0.tar.xz
Linux aarch64 (ARM)Binaryzig-linux-aarch64-0.13.0-dev.351+64ef45eb0.tar.xz
Windows x86_64Binaryzig-windows-x86_64-0.13.0-dev.351+64ef45eb0.zip
Windows aarch64 (ARM)Binaryzig-windows-aarch64-0.13.0-dev.351+64ef45eb0.zip
macOS x86_64 (Intel)Binaryzig-macos-x86_64-0.13.0-dev.351+64ef45eb0.tar.xz
macOS aarch64 (Apple Silicon)Binaryzig-macos-aarch64-0.13.0-dev.351+64ef45eb0.tar.xz
Source codeSourcezig-0.13.0-dev.351+64ef45eb0.tar.xz

Installation: Download, extract, and place on your system $PATH. Ensure zig version reports the right version.

Signatures: .minisig Download signatures can be retrieved from ziglang.org for all downloads.

Tips on upgrading your code

2024.3.0-mach

Zig 2024.3.0-mach and 0.12.0-dev.3180+83e578a18 are identical.

Install it using zigup:

zigup 0.12.0-dev.3180+83e578a18

Or download it using our pkg.machengine.org mirror:

OS/ArchKindDownload mirror
Linux x86_64Binaryzig-linux-x86_64-0.12.0-dev.3180+83e578a18.tar.xz
Linux aarch64 (ARM)Binaryzig-linux-aarch64-0.12.0-dev.3180+83e578a18.tar.xz
Windows x86_64Binaryzig-windows-x86_64-0.12.0-dev.3180+83e578a18.zip
Windows aarch64 (ARM)Binaryzig-windows-aarch64-0.12.0-dev.3180+83e578a18.zip
macOS x86_64 (Intel)Binaryzig-macos-x86_64-0.12.0-dev.3180+83e578a18.tar.xz
macOS aarch64 (Apple Silicon)Binaryzig-macos-aarch64-0.12.0-dev.3180+83e578a18.tar.xz
Source codeSourcezig-0.12.0-dev.3180+83e578a18.tar.xz

Installation: Download, extract, and place on your system $PATH. Ensure zig version reports the right version.

Signatures: .minisig Download signatures can be retrieved from ziglang.org for all downloads.

Tips on upgrading your code

2024.1.0-mach

Zig 2024.1.0-mach and 0.12.0-dev.2063+804cee3b9 are identical.

Note: The first nominated version ever, this was out-of-band with the schedule due to it.

Install it using zigup:

zigup 0.12.0-dev.2063+804cee3b9

Or download it using our pkg.machengine.org mirror:

OS/ArchKindDownload mirror
Linux x86_64Binaryzig-linux-x86_64-0.12.0-dev.2063+804cee3b9.tar.xz
Linux aarch64 (ARM)Binaryzig-linux-aarch64-0.12.0-dev.2063+804cee3b9.tar.xz
Windows x86_64Binaryzig-windows-x86_64-0.12.0-dev.2063+804cee3b9.zip
Windows aarch64 (ARM)Binaryzig-windows-aarch64-0.12.0-dev.2063+804cee3b9.zip
macOS x86_64 (Intel)Binaryzig-macos-x86_64-0.12.0-dev.2063+804cee3b9.tar.xz
macOS aarch64 (Apple Silicon)Binaryzig-macos-aarch64-0.12.0-dev.2063+804cee3b9.tar.xz
Source codeSourcezig-0.12.0-dev.2063+804cee3b9.tar.xz

Installation: Download, extract, and place on your system $PATH. Ensure zig version reports the right version.

Signatures: .minisig Download signatures can be retrieved from ziglang.org for all downloads.

Tips on upgrading your code