You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Johyn Papin bb2aa856e5
3 months ago
src Initial commit 4 months ago
.gitignore Initial commit 4 months ago Update 3 months ago
build.zig Rename skia-bindgen to vojo 3 months ago


Vojo is a C++ bindings generator. Currently, Vojo only generates C bindings.

If you want to generate bindings for another language than C, feel free to open an issue or contribute to the source code. Zig support is already planned.

The current goal of the project is to support the Skia library. Using Skia to create graphical interfaces instead of a webview probably helps to reduce the ecological footprint of software. The goal of this project is to make Skia more accessible to all developers.

If you want to add another project to the list of supported projects feel free to open another issue.


Not usable. The generated bindings do not compile for the moment.


  • Generate bindings faithful to Skia's public API, including experimental and deprecated methods.
  • Be fully automated.
  • Be able to generate bindings for the latest version of Skia.
  • The generated code must be human readable.


  • Support older versions of Skia.

Get started

zig build run

How it works

Vojo uses libclang to get the C++ AST of the Skia public API.

Vojo then translates this AST to another simpler AST. This allows Vojo to stop using the libclang API from that moment on.

Then, the chosen backend (only C for the moment) translates this simplified AST into its own internal representation. The purpose of this internal representation is to remove any form of logic from the generation of the source code to make it as simple as possible.

This internal representation is finally translated into source code and written in the output files.