2026-02-27 01:11:57 +00:00
2026-02-27 01:11:57 +00:00
2026-02-25 18:01:39 +00:00
2026-02-25 18:01:39 +00:00
2026-02-25 18:01:39 +00:00
2026-02-25 18:01:39 +00:00
2026-02-25 18:01:39 +00:00
2026-02-25 23:05:25 +00:00

Wayland Protocol Code Generator

Code generation for Wayland protocols, for use without libwayland. Generated code is NOT ABI compatible with libwayland.

I wrote this to use in my own projects to avoid the callback-heavy interface provided by libwayland and the standard wayland-scanner.

This generator currently only supports generating Zig code, but I plan to add an option to emit the code as a single-header C library too.

I'll probably also give this all a cleanup pass soon. This code was all written rather quickly and probably can be tidied up.

Usage

CLI

The binary can be produced by invoking zig build in the project root and protocols.zig can be generated by running the program as below:

# The program can be run with as many input protocols as you'd like
$ ./zig-out/bin/wayland-protocol-generator -o protocols.zig path/to/wayland.xml path/to/protocol1.xml path/to/protocolN.xml

This will read in all provided xml files and produce a single protocols.zig which will include the code for each protocol.

The core wayland protocol can be found at https://gitlab.freedesktop.org/wayland/wayland and additional protocol specifications can be found at https://gitlab.freedesktop.org/wayland/wayland-protocols

Generation Via Build.zig

You can use the zig build system to generate protocols.zig and expose it as a module as follows:

Add this repo as a dependency. You can do this manually or by invoking:

$ zig fetch --save git+https://github.com/ptrToLiam/wayland-protocol-codegen

Then add some lines such as the following to your build.zig:

const wayland_protocol_specifications = [_]std.Build.LazyPath{
  b.path("path/to/wayland.xml"),
  b.path("path/to/protocol1.xml"),
  b.path("path/to/protocolN.xml"),
  ...,
};

const wayland_protocols = b.dependency("wayland_protocol_codegen", .{
  .protocols = &wayland_protocol_specifications,
}).module("wayland-protocols");
exe.root_module.addImport("wayland-protocols", wayland_protocols);

This will allow you to import the protocol code with @import("wayland-protocols") in your executable module's source code.

S
Description
No description provided
Readme 87 KiB
Languages
Zig 99.1%
Nix 0.9%