A C11-friendly C API layer for Skia with idiomatic Zig bindings.
This C API is maintained against Skia upstream:
- Repository:
https://github.com/google/skia - Pinned commit:
1c31b24a5773b073f146a5b903ee59857d05e2b9 - Commit link:
https://github.com/google/skia/commit/1c31b24a5773b073f146a5b903ee59857d05e2b9
include/skia/c/public headerssrc/implementationexamples/C exampleszig/src/skia.zigidiomatic Zig wrapperzig/examples/Zig SDL demos
make buildBuild expects Skia to already be available on the system (headers and libraries).
This produces:
build/libskiac.a
make smoke-examplesRunnable C demo using SDL2 + Ganesh/OpenGL:
make example-sdl-gl SKIA_LIBS="... your skia link libs ..."
./build/sdl_ganesh_glNotes:
SKIA_LIBSis intentionally left to the environment because Skia link lines vary by build setup.- With a system-wide install this often works as:
make example-sdl-gl SKIA_LIBS="-lskia"
Build Zig demos:
zig build example-sdl-gl
zig build example-sdl-vk
zig build example-api-showcaseRun Zig demos:
zig build run-sdl-gl
zig build run-sdl-vk
zig build run-api-showcaseNotes:
run-sdl-vkcurrently uses a raw Vulkan present loop to validate window/swapchain path.- C and Zig Vulkan bridge APIs are present, but actual Skia Ganesh Vulkan rendering depends on your
installed
libskiaexporting Vulkan Ganesh symbols.
Include either the umbrella header:
#include "skia/c/skia.h"or per-domain headers from skia/c/.
Main Zig module:
zig/src/skia.zig
Add dependency in your build.zig.zon:
.dependencies = .{
.skia_zig = .{
.url = "https://github.com/theunnecessarythings/skia-zig/archive/<ref>.tar.gz",
.hash = "<hash>",
},
},Wire it in build.zig:
const skia_zig_dep = b.dependency("skia_zig", .{
.target = target,
.optimize = optimize,
});
const skia_mod = skia_zig_dep.module("skia");
exe.root_module.addImport("skia", skia_mod);Use it in Zig code:
const skia = @import("skia");
pub fn main() void {
const v = skia.version();
_ = v;
}The repo includes build.zig and build.zig.zon so it can be consumed as a Zig package.
zig build checkDependency key name: skia_zig
This C API layer is licensed under the BSD 3-Clause License, matching Skia.
See LICENSE.