Zig Programming Language
-
Ratakor/clog: A logging library
github.com GitHub - Ratakor/clog: A logging libraryA logging library. Contribute to Ratakor/clog development by creating an account on GitHub.
From the README:
A fully customizable, drop-in replacement for std.Options.LogFn with support for multiple file logging, buffering, colors (NO_COLOR supported), time and mutex!
-
An interesting blog post about using the Zig toolchain for Nintendo 3DS homebrewing.
-
llogick/zigscient: A Zig Language Server
github.com GitHub - llogick/zigscient: A Zig Language ServerA Zig Language Server. Contribute to llogick/zigscient development by creating an account on GitHub.
An alternative to ZLS
-
osdialog-zig: Cross-platform utility module for Zig to open native dialogs for the filesystem, message boxes, color-picking.
github.com GitHub - ttytm/osdialog-zig: Cross-platform utility module for Zig to open native dialogs for the filesystem, message boxes, color-picking.Cross-platform utility module for Zig to open native dialogs for the filesystem, message boxes, color-picking. - ttytm/osdialog-zig
From the README:
Cross-platform utility module for Zig to open native dialogs for the filesystem, message boxes, color-picking.
-
ecez: A WIP ecs API for Zig!
github.com GitHub - Avokadoen/ecez: A WIP ecs API for Zig!A WIP ecs API for Zig! Contribute to Avokadoen/ecez development by creating an account on GitHub.
An Entity Component System API for Zig
-
objective-zig: Runtime and bindings to common Objective-C frameworks.
github.com GitHub - colbyhall/objective-zig: Runtime and bindings to common Objective-C frameworks.Runtime and bindings to common Objective-C frameworks. - colbyhall/objective-zig
From the README:
objective-zig is a work-in-progress Objective-C runtime and auto generated collection of Objective-C frameworks in zig. You can find the bindings generator at objective-zig-gen. These bindings are not ready. See the notice at the bottom of the README.
-
shimizu - The Wayland protocol, in Zig
From the README:
This repository contains:
- wire: a Zig module that defines types for Wayland's wire format and functions to serialize and deserialize messages.
- shimizu-scanner: a command to take Wayland XML protocol descriptions and turn them into Zig types.
- core: The Wayland core protocol as a Zig module, generated by shimizu-scanner
- shimizu: A Zig module that provides higher level Connection and Proxy types.
-
Cubyz: Voxel sandbox game with a large render distance, procedurally generated content and some cool graphical effects.
github.com GitHub - PixelGuys/Cubyz: Voxel sandbox game with a large render distance, procedurally generated content and some cool graphical effects.Voxel sandbox game with a large render distance, procedurally generated content and some cool graphical effects. - PixelGuys/Cubyz
From the README:
Cubyz is a 3D voxel sandbox game (inspired by Minecraft).
Cubyz has a bunch of interesting/unique features such as:
Level of Detail (→ This enables far view distances.) 3D Chunks (→ There is no height or depth limit.) Procedural Crafting (→ You can craft anything you want, and the game will figure out what kind of tool you tried to make.) --- Written in Zig, of course
-
veb: A delightful programming language for writing reliable software
github.com GitHub - ziord/veb: A delightful programming language for writing reliable softwareA delightful programming language for writing reliable software - ziord/veb
From the README:
A delightful, statically typed programming language for writing reliable software. veb features algebraic data types, pattern matching, generics, classes (without inheritance), traits, flow-sensitive typing with type narrowing, trait-driven operator overloading and modules. Ergonomic features such as pipe and concat operators are also supported. Currently, the language runtime executes on a custom register-based virtual machine written in Zig.
-
cricket.zig: Zig library for encoding and decoding cryptographic data formats.
github.com GitHub - furpu/cricket.zig: Zig library for encoding and decoding cryptographic data formats.Zig library for encoding and decoding cryptographic data formats. - furpu/cricket.zig
PEM/DER reader, written in Zig. Currently supports elliptic curve private and public keys.
-
typ: A small Zig ⚡ module, as a convenience for me when writing WebAssembly plugins for Typst
github.com GitHub - peterhellberg/typ: A small Zig ⚡ module, as a convenience for me when writing WebAssembly plugins for TypstA small Zig ⚡ module, as a convenience for me when writing WebAssembly plugins for Typst - peterhellberg/typ
From the README: A small Zig module, as a convenience for writing WebAssembly plugins for Typst
-
hypergraphz: HypergraphZ - A Hypergraph Implementation in Zig
github.com GitHub - yamafaktory/hypergraphz: HypergraphZ - A Hypergraph Implementation in ZigHypergraphZ - A Hypergraph Implementation in Zig. Contribute to yamafaktory/hypergraphz development by creating an account on GitHub.
From the README:
HypergraphZ - A Hypergraph Implementation in Zig
!GitHub Actions Workflow Status
HypergraphZ is a directed hypergraph implementation in Zig (https://en.wikipedia.org/wiki/Hypergraph):
- Each hyperedge can contain zero, one (unary) or multiple vertices.
- Each hyperedge can contain vertices directed to themselves one or more times.
Usage
Add
hypergraphz
as a dependency to yourbuild.zig.zon
:sh zig fetch --save https://github.com/yamafaktory/hypergraphz/archive/<commit-hash>.tar.gz
Add
hypergraphz
as a dependency to yourbuild.zig
:zig const hypergraphz = b.dependency("hypergraphz", .{ .target = target, .optimize = optimize, }); exe.root_module.addImport("hypergraphz", hypergraphz.module("hypergraphz"));
Documentation
The latest online documentation can be found here.
-
Zig•EM: The EM language is dead, long live EM !!!
Zig•EM is a novel programming framework for resource-constrained embedded systems.
Read all about it in the linked blog post
- github.com GitHub - floooh/sokol: minimal cross-platform standalone C headers
minimal cross-platform standalone C headers. Contribute to floooh/sokol development by creating an account on GitHub.
Since zig has good cross platform compiler support, libraries that improve cross platform support are also interesting.
This one is also potentially cross language.
-
ymlz: small and convenient yaml parser
github.com GitHub - pwbh/ymlz: small and convenient yaml parsersmall and convenient yaml parser. Contribute to pwbh/ymlz development by creating an account on GitHub.
From the README:
Key Features
- Simple and straightforward to use thanks to built-in reflections.
- Just define a struct and accessing it's fields.
- Supports recursive struct.
- Deinitialization is handled for you, just call
deinit()
and you are done. - Fields are automatically parsed based on field type.
-
Zig package manager indices
A couple of promising new ones have popped up:
https://zigistry.dev/
https://ziglist.org/
-
chipz: 8-bit emulator experiments in Zig
github.com GitHub - floooh/chipz: 8-bit emulator experiments in Zig8-bit emulator experiments in Zig. Contribute to floooh/chipz development by creating an account on GitHub.
Z80 chip emulator with classical games such as Pac-Man bundled
-
Crafting Interpreters in Zig
github.com GitHub - Southporter/zlox: Crafting Interpreters in ZigCrafting Interpreters in Zig. Contribute to Southporter/zlox development by creating an account on GitHub.
The principles from the book Crafting Interpreters by Bob Nystrom, but in Zig
-
zig-afl-kit: Convenience functions for easy integration with AFL++ for both Zig and C/C++ programmers!
github.com GitHub - kristoff-it/zig-afl-kit: Convenience functions for easy integration with AFL++ for both Zig and C/C++ programmers!Convenience functions for easy integration with AFL++ for both Zig and C/C++ programmers! - kristoff-it/zig-afl-kit
Convenience functions for easy integration with AFL++ for both Zig and C/C++ programmers!
-
dipm: An alternative to
curl | sh
github.com GitHub - Hejsil/dipm: An alternative to `curl | sh`An alternative to `curl | sh`. Contribute to Hejsil/dipm development by creating an account on GitHub.
A package manager for installing linux programs that are self contained
-
gnumake: build.zig for GNU's make program: https://www.gnu.org/software/make/
github.com GitHub - allyourcodebase/gnumake: build.zig for GNU's make program: https://www.gnu.org/software/make/build.zig for GNU's make program: https://www.gnu.org/software/make/ - allyourcodebase/gnumake
From the README:
Provides a package to build/run GNU's make program.
The primary use case for this project is to facilitate "incremental ports" to the Zig build system. Start with a project by building it with Make then incrementally transfer parts of it to build.zig while maintaining a working build that can be tested throughout. It's not recommended for projects to use this package long term.
-
y3: i3-inspired wrapper for Yabai
github.com GitHub - diocletiann/y3: i3-inspired wrapper for Yabaii3-inspired wrapper for Yabai. Contribute to diocletiann/y3 development by creating an account on GitHub.
From the README:
y3 is a wrapper for yabai that attempts to emulate i3 behavior and adds additional logic to improve the experience. It may not match 1:1, please let me know if something is missing or incorrect.
-
zig-sfml-wrapper: A zig wrapper for csfml, updated for Zig 0.13
github.com GitHub - Guigui220D/zig-sfml-wrapper: A zig wrapper for csfmlA zig wrapper for csfml. Contribute to Guigui220D/zig-sfml-wrapper development by creating an account on GitHub.
From the README:
This is a wrapper for CSFML. Theres no problem importing CSFML in Zig, but the resulting code can be a little bit messy. My goal is to make things close enough to SFML, with nice methods.
-
Zigverm v0.3.0 released
ziggit.dev Zigverm (previously zigvm) v0.3.0 releasedThis release is mainly dedicated towards renaming of zigvm to zigverm because a lot of people suggested to use a better name for it in my first post and this is the new name I am going with. It also covers fixing a bunch of bugs here and there. You can checkout the release here. Keep in mind that ...
zigverm (previously zigvm) is a version manager for Zig
Change log: https://github.com/AMythicDev/zigverm/blob/main/CHANGELOG.md#v030-2024-06-26
-
TLS 1.2 and 1.3 client
github.com GitHub - ianic/tls.zig: tls 1.2 and 1.3 client in Zigtls 1.2 and 1.3 client in Zig. Contribute to ianic/tls.zig development by creating an account on GitHub.
Zig library which implements tls 1.2 and tls 1.3 protocol.
-
ZLS (Zig's language server) releases v.0.13.0
github.com Release zls 0.13.0 · zigtools/zlsThis release is meant to provide compatibility with Zig 0.13.0 New Contributors @ert78gb made their first contribution in #1887 @Sekky61 made their first contribution in #1896 @WillLillis made the...
Provides compatibility with Zig 0.13.0
-
GitHub Actions for Zig workflows
github.com Setup Zig Compiler - GitHub MarketplaceDownload and install the Zig compiler, and cache the global Zig cache
Makes integrating Zig projects with GitHub Actions easy and uses mirrors to reduce load on servers
-
0.13.0 Release Notes ⚡ The Zig Programming Language
Contains plenty of changes and upgrades to LLVM 18.1.7
Go read the release notes
-
Hexdump: The alternative cross-platform hex dumping utility
github.com GitHub - KeithBrown39423/Hexdump: The alternative cross-platform hex dumping utilityThe alternative cross-platform hex dumping utility - KeithBrown39423/Hexdump
From the README:
Hexdump is designed to replace the standard Hexdump command. If you feel uncomfortable replacing it, simply rename the binary to something else.
Features
- ASCII sidebar
- Skipping bytes
- Specified length
- Multiple formats
- Colored output
- Output to file
-
Zigar 0.12.0 released - a toolkit that lets you use Zig code in a JavaScript project.
github.com GitHub - chung-leong/zigar: Enable the use of Zig code in JavaScript projectEnable the use of Zig code in JavaScript project. Contribute to chung-leong/zigar development by creating an account on GitHub.
Zigar is a software tool set that lets you utilize Zig code in your JavaScript project.
-
zig-json - A JSON library for inspecting arbitrary values
github.com GitHub - nektro/zig-json: A JSON library for inspecting arbitrary valuesA JSON library for inspecting arbitrary values. Contribute to nektro/zig-json development by creating an account on GitHub.
From the README:
JSON library for inspecting arbitrary values. Optionally accepts trailing commas.
Fully passes https://github.com/nst/JSONTestSuite.
-
Zig's New CLI Progress Bar Explained - Andrew Kelley
From the blog:
Sometimes, programming projects are too easy and boring. Sometimes, they're too hard, never ending or producing subpar results.
This past week I had the pleasure of completing a project that felt like maximum difficulty - only possible because I am at the top of my game, using a programming language designed for making perfect software. This problem threw everything it had at me, but I rose to the challenge and emerged victorious.
What a rush.
In this blog post I'll dig into the technical implementation as well as provide the Zig Progress Protocol Specification.
-
sokol-zig - Zig bindings for the sokol headers (https://github.com/floooh/sokol)
github.com GitHub - floooh/sokol-zig: Zig bindings for the sokol headers (https://github.com/floooh/sokol)Zig bindings for the sokol headers (https://github.com/floooh/sokol) - floooh/sokol-zig
From the README:
Auto-generated Zig bindings for the sokol headers.
For Zig version 0.12.0 and 0.13.0-dev
In case of breaking changes in Zig, the bindings might fall behind. Please don't hesitate to ping me via a Github issue, or even better, provide a PR :)
Support for stable Zig versions is in branches (e.g. zig-0.12.0), those versions are 'frozen in time' though.
-
flags - An effortless command-line argument parser for Zig
github.com GitHub - n0s4/flags: An effortless command-line argument parser for Zig.An effortless command-line argument parser for Zig. - n0s4/flags
From the README:
An effortless command-line argument parser for Zig.
Features
- Zero allocations.
- Declaratively define your command as a plain Zig type.
- Single-function API.
- Multi-level subcommands.
- Automatic help message generation at comptime.
-
zfe - a terminal file explorer written in Zig
github.com GitHub - BrookJeynes/zfeContribute to BrookJeynes/zfe development by creating an account on GitHub.
From the README:
- Simple to use: Minimal and customizable keymaps with vim binding support.
- Image Previews: Preview images with Kitty terminal.
- File Previews: Preview contents of files directly in the terminal.
- Configurable Options: Customize settings via an external configuration file.
-
ziglang-set: A generic and general purpose Set implementation for the Zig language
github.com GitHub - deckarep/ziglang-set: A generic and general purpose Set implementation for the Zig languageA generic and general purpose Set implementation for the Zig language - deckarep/ziglang-set
From the README:
Zig currently does not have a built-in, general purpose Set data structure at this point in time. Until it does, try this!
Rationale: It may be common knowledge that a dictionary or map or hashset can be used as a set where the value is basically void. While this is true, there's a lot to think about in terms of supporting all the common set operations in a performant and correct way and there's no good reason why a common module for this can't exist. After studying the Zig stdlib, I'm hoping this implementation can fill that gap and provide some value.
-
TSxo/zli - A friendly fork of TigerBeetle's
flag
module with support for subcommand help and short options.github.com GitHub - TSxo/zli: A friendly fork of TigerBeetle's `flag` module with support for subcommand help and short options.A friendly fork of TigerBeetle's `flag` module with support for subcommand help and short options. - TSxo/zli
From the README:
This library is a friendly refactor of TigerBeetle's flags module that adds support for:
- subcommand specific help messages; and
- short options (-k=v).
-
arbor - Easy-to-use audio plugin framework
github.com GitHub - ArborealAudio/arbor: Easy-to-use audio plugin frameworkEasy-to-use audio plugin framework. Contribute to ArborealAudio/arbor development by creating an account on GitHub.
From the README:
arbor
For the future of plugin development
Goals
-
Dead-simple plugin development. Write <= 100 lines of code and have a runnable blank-slate plugin.
-
Ideally only require Zig as a toolchain dependency, not as a programming language. You should be able to write plugins in C/C++/whatever and easily link that code to Arbor via a C API and the Zig build system.
- Could also have a
get_zig.sh
that will download latest stable Zig if you don't already have it
- Could also have a
-
Easy cross-compilation. Compile to Mac/Linux/Windows from Mac/Linux/Windows, batteries included.
-
Cross-platform graphics. A simple software renderer (like Olivec), but also native graphics programming, potentially using something like sokol, or making a thin wrapper around Direct2D/CoreGraphics for cross-platform graphics abstraction, giving the programmer a simple choice with little-to-no platform-specific considerations.
-
Simple, declarative UI design. Possibly with the option of using a custom CSS-like syntax (or Ziggy) to declare, arrange, and style UI widgets at runtime or compile-time, all compiling to native code--not running in some god-forsaken web browser embedded in a plugin UI 🤮
Have:
-
A nice abstraction layer over plugin APIs which should lend itself nicely to extending support to other APIs
-
Easy comptime parameter generation
-
Basic CLAP audio plugin supporting different types of parameters, sample-accurate automation
-
A janky VST2 implementation that works in Reaper and mostly works in other DAWs
-
Simple, portable software rendering using Olivec and a custom text rendering function with a bitmap font
-
-
ly - display manager with console UI
github.com GitHub - fairyglade/ly: display manager with console UIdisplay manager with console UI. Contribute to fairyglade/ly development by creating an account on GitHub.
From the README:
Ly is a lightweight TUI (ncurses-like) display manager for Linux and BSD.
[...]
Ly should work with any X desktop environment, and provides basic wayland support (sway works very well, for example).