Zig is a general-purpose programming language and toolchain for maintaining robust, optimal and reusable software, created by Andrew Kelley and developed in the open by the Zig Software Foundation and its contributors. Its current stable release is 0.17.1, published on 2 November 2026, and it is released under the MIT (Expat) licence. Zig deliberately does without the machinery most modern languages carry: there is no hidden control flow, no hidden memory allocation, no preprocessor and no macros. Everything you can do at compile time is written in Zig itself, memory is allocated through an allocator you pass explicitly, and errors are ordinary values that the compiler forces you to handle. The same download is a complete self-hosted toolchain — compiler, standard library, build system and test runner — that also compiles C and C++, so a single zig binary can build a project without a separate C compiler installed.
try, catch and errdefer keywords make handling or propagating them mandatory at the call site.zig cc and zig c++ are a zero-dependency, Clang-based C and C++ compiler with cross-compilation for many targets built in. Zig can incrementally improve an existing C/C++ codebase, or be added to it as a compilation unit that exposes the Zig standard library.zig build — a build system written in Zig, defined in build.zig, that gives every platform the same build and test commands and can produce executables, libraries and C headers.test blocks live beside the code they cover, and zig test runs them with the same toolchain, no framework to install.Zig sits where C and C++ sit — close to the machine, with manual memory management and a small runtime — but removes the parts of that world that cause the most expensive bugs. Uninitialised variables and unused values are compile errors; integer overflow is checked in safe build modes; allocators make ownership explicit; and defer gives deterministic cleanup without a garbage collector. The trade is that you must be deliberate about memory and error handling, which is exactly the property that makes Zig suitable for low-level infrastructure: databases, runtimes, language tooling and embedded firmware. Because it also compiles C and C++, it can be adopted incrementally in a codebase that cannot be rewritten — a common pattern is to add one Zig module or build step first and expand from there. The project remains pre-1.0, so the language and standard library do change between releases; pin the version you build against and read the release notes when upgrading.
zig cc when no native toolchain exists for the target.@import("builtin") to describe the target.zig build, which works the same on Linux, macOS and Windows.Download the prebuilt tarball for your platform from ziglang.org — Linux, macOS and Windows builds are published for every release — unpack it and put zig on your PATH; the archive is the whole toolchain, with no installer and no dependencies. Check the version with zig version, run a file directly with zig run hello.zig, and use zig init to scaffold a project with build.zig, a source file and tests. The language reference at ziglang.org/documentation is the authoritative guide, and zig env prints the paths the compiler will use for its standard library and cache. Keep an eye on the release notes: the language is still evolving ahead of 1.0, which is why zig fmt and the compiler’s migration errors matter more here than in a stable language. Source and issue tracker moved from GitHub to Codeberg, at codeberg.org/ziglang/zig.