Nominated Zig versions

Periodically we nominate a new Zig nightly version which all Mach projects target and use.

We encourage others to adopt the same Zig version Mach uses, since Zig packages which target latest nightly (or the latest stable release) will very often be incompatible otherwise.

Why nominated Zig versions, instead of nightly or stable?

TL;DR: it’s a sweetspot between stable and nightly.

Stable releases occur just once or twice per year, nominated Zig versions occur several times per year - but not every day like nightly.

Stable releases of Zig are few and far between, perhaps once or twice per year, making it challenging to provide feedback on the latest-and-greatest APIs or benefit from the wins that are being made in main because Zig development happens so rapidly.

Nightly Zig is the opposite, but is an always moving target. When only you work with your code, you depend on nobody, and nobody depends on you, then you can update at your leisure and nightly is managable. But with many projects depending on one another, it’s very challenging to ensure your code is compatible with others’ because everyone is working on their own personal update schedule.

Mach’s nominated Zig versions provide a different set of tradeoffs, a middleground between the two extremes above: benefit from the changes in nightly Zig 2-3x faster than you would using stable, and suffer less from the incompatibility consequences of using nightly.

Schedule

WhenWhat🚀 Other notable event
January🚀 Mach version release
February👋 Anticipated influx of new Machanists / Ziguanas
Marchâš¡ Zig version nominated
April
Mayâš¡ Zig version nominated
Juneâš¡ Zig version nominated
July🚀 Mach version release
August👋 Anticipated influx of new Machanists / Ziguanas
Septemberâš¡ Zig version nominated
October
Novemberâš¡ Zig version nominated
December👋 Anticipated influx of new Machanists / Ziguanas

All events target the 4th day of the month, but may slip if we’re unable to complete the event by then.

Over time, we may adjust this schedule somewhat as we learn more (it is not set in stone.)

Process

During months where a Zig version is nominated, we:

  • Begin the nomination process (ideally on the 1st-4th of the month)
  • Update the Nomination history section below with the new nightly Zig version we’re nominating.
  • Begin the time-consuming process of following this GitHub checklist
    • Updating 40+ repositories Zig code, CI pipelines, build.zig.zon files, testing using the new Zig version, etc.
    • Doing updates in a specific order, so that dependencies are also updated to use the new Zig version
  • Typically, a show-stopping bug does not occur. But if it does..
    • We may have to fix the issue e.g. upstream in Zig if we can’t workaround it
    • We’ll need to wait for it to be merged, and for Zig nightly builds to contain the fix
    • We’ll update the existing Nomination history entry to point to the new version (days may have passed, so this could include other breaking changes)
    • Re-roll! Effectively begin this whole process from the beginning.
  • Once everything looks good, the new Zig version is working with Mach, we declare success - the GitHub issue is closed, and an announcement is made in the #progress channel of Discord.
  • If after we declare success you find a show-stopping bug in your own projects that needs to be fixed upstream in Zig, you’ll have to use the older version until the next scheduled nominated version update.

Machine-readable version history

https://machengine.org/zig/index.json provides a machine-readable version history. It is a strict superset of https://ziglang.org/download/index.json - but updated less frequently, and with Mach versions added. A few types of Mach versions are added:

  • mach-latest -> always the latest nominated Zig version.
  • 2024.1.0-mach-wip -> -wip signifies that we are in the process of nominating this version, it has not been confirmed working with Mach yet.
  • 2024.1.0-mach -> specific nominated versions.
  • 0.3.0-mach -> an alias for the nominated Zig version that was used at the time of Mach v0.3 release.

Nominated Zig history

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