Zig Programming Language
- GitHub - DonIsaac/zlint: A linter for the Zig programming languagegithub.com GitHub - DonIsaac/zlint: A linter for the Zig programming language
A linter for the Zig programming language. Contribute to DonIsaac/zlint development by creating an account on GitHub.
A linter for Zig with its own semantic analyzer
- [New library] Ratakor/clog: A logging librarygithub.com GitHub - Ratakor/clog: A logging library
A 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!
- Erik's Blog - Building Nintendo 3DS Homebrew with Zig
An interesting blog post about using the Zig toolchain for Nintendo 3DS homebrewing.
- [Tooling] llogick/zigscient: A Zig Language Servergithub.com GitHub - llogick/zigscient: A Zig Language Server
A Zig Language Server. Contribute to llogick/zigscient development by creating an account on GitHub.
An alternative to ZLS
- [New library] 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.
- [New project] 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.
- [Library] 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
- [New project] veb: A delightful programming language for writing reliable softwaregithub.com GitHub - ziord/veb: A delightful programming language for writing reliable software
A 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.
- [New library] 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.
- [New library] typ: A small Zig ⚡ module, as a convenience for me when writing WebAssembly plugins for Typstgithub.com GitHub - peterhellberg/typ: A small Zig ⚡ module, as a convenience for me when writing WebAssembly plugins for Typst
A 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
- [New library] hypergraphz: HypergraphZ - A Hypergraph Implementation in Ziggithub.com GitHub - yamafaktory/hypergraphz: HypergraphZ - A Hypergraph Implementation in Zig
HypergraphZ - 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.
- [Blog post] 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 - floooh/sokol: minimal cross-platform standalone C headersgithub.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.
- [New library] ymlz: small and convenient yaml parsergithub.com GitHub - pwbh/ymlz: small and convenient yaml parser
small 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/
- [New project] chipz: 8-bit emulator experiments in Ziggithub.com GitHub - floooh/chipz: 8-bit emulator experiments in Zig
8-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
- [Port] Crafting Interpreters in Ziggithub.com GitHub - Southporter/zlox: Crafting Interpreters in Zig
Crafting 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
- [New project] 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!
- [New project] 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
- [Build system] 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.
- [New project] y3: i3-inspired wrapper for Yabaigithub.com GitHub - diocletiann/y3: i3-inspired wrapper for Yabai
i3-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.
- [Update] zig-sfml-wrapper: A zig wrapper for csfml, updated for Zig 0.13github.com GitHub - Guigui220D/zig-sfml-wrapper: A zig wrapper for csfml
A 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.
- [New release] Zigverm v0.3.0 releasedziggit.dev Zigverm (previously zigvm) v0.3.0 released
This 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
- [New library] TLS 1.2 and 1.3 clientgithub.com GitHub - ianic/tls.zig: tls 1.2 and 1.3 client in Zig
tls 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.
- [New release] ZLS (Zig's language server) releases v.0.13.0github.com Release zls 0.13.0 · zigtools/zls
This 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
- [Infrastructure] GitHub Actions for Zig workflowsgithub.com Setup Zig Compiler - GitHub Marketplace
Download 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
- [Zig release] 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
- [New project] Hexdump: The alternative cross-platform hex dumping utilitygithub.com GitHub - KeithBrown39423/Hexdump: The alternative cross-platform hex dumping utility
The 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
- [Update] 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 project
Enable 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.
- [New library] zig-json - A JSON library for inspecting arbitrary valuesgithub.com GitHub - nektro/zig-json: A JSON library for inspecting arbitrary values
A 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.
- [Blog post] 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.
- [Update] 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.
- [New library] flags - An effortless command-line argument parser for Ziggithub.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.
- [New project] zfe - a terminal file explorer written in Ziggithub.com GitHub - BrookJeynes/zfe
Contribute 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.
- [New project] ziglang-set: A generic and general purpose Set implementation for the Zig languagegithub.com GitHub - deckarep/ziglang-set: A generic and general purpose Set implementation for the Zig language
A 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.
- [New project] 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).
- [New project] arbor - Easy-to-use audio plugin frameworkgithub.com GitHub - ArborealAudio/arbor: Easy-to-use audio plugin framework
Easy-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
-