Zig: the language built by removing things
Andrew Kelley was trying to write a digital audio workstation — software where a millisecond of unexpected latency translates directly into an audible glitch — when C, as C tends to do, quietly betrayed him. Integer conversions truncated without warning; the preprocessor layered a second language on top of the first, making both harder to reason about; manual memory management left traps that no compiler was required to catch. He was not the first programmer to enumerate these complaints. He was, however, one of the few who responded by designing the replacement himself.
Zig first appeared on February 8, 2016, in a blog post Kelley titled Introduction to the Zig Programming Language. His stated ambition: to make something “more pragmatic than C” — a goal he acknowledged was “like trying to be more evil than the devil himself.” The name came from a script he had written to generate random letter combinations beginning with Z. He picked Zig because it was short, pronounceable, and unclaimed.
The language’s organizing principle fits in ten words: no hidden control flow, no hidden memory allocations. If a line of Zig does not look like it calls a function, it does not call a function. There is no preprocessor, no exceptions, no operator overloading, no garbage collector. Memory is allocated and freed explicitly; the compiler’s job is to make that honesty easy rather than painful. The most distinctive feature is comptime — ordinary Zig code that executes at compile time — which replaces what C achieves through macros and what C++ achieves through templates with a single, readable mechanism. Types become values at compile time, and generics, meta-programming, and conditional compilation collapse into one thing instead of three.
In 2018, Zig had no stable release, no company behind it, and a community small enough to follow by first name. Kelley, then employed as a senior backend engineer at OkCupid, resigned to work on the language full-time on Patreon donations. He reported, afterward, that he had never been happier. The professional biography this produced — man quits job at dating company to write systems language on donations — was vindicated, over the following years, by TigerBeetle (a financial database running in production), Ghostty (a GPU-accelerated terminal emulator), and the early versions of Bun (a JavaScript runtime that arrived in 2023 trailing impressive benchmark numbers and, under its hood, almost entirely Zig). By 2025, the Zig Software Foundation was receiving roughly $400,000 annually in donations.
What Zig contributed is less a feature set than a stance. Every prior systems language of the decade — Rust, Go, Swift — had answered C’s problems by adding mechanisms: a borrow checker, proofs in the type system, a garbage collector. Zig’s answer was to remove things instead. No undefined behavior hidden in abstractions. No allocations that don’t appear in the source. The bet was that enforced transparency would prove more durable than layered safety.
A programming language, it turns out, does not have to tell the programmer what to do. It can simply refuse to lie to them.
Sources
- Zig (programming language) — Wikipedia — creation date, design features, name origin, notable adopters (TigerBeetle, Ghostty, Bun), Zig Software Foundation finances.
- Introduction to the Zig Programming Language — Andrew Kelley — original 2016 announcement; C’s limitations, the “more evil than the devil” framing, Zig’s design goals.
- Zig, Andrew Kelley and Self Funding — CoRecursive Newsletter — Kelley’s 2018 decision to leave OkCupid and fund Zig development through Patreon donations.