Project Setup โ
What you'll learn โ
- The minimal
build.zig/build.zig.zonwiring for a consumer project. - Which Zig version gate to enforce.
Complete example โ
build.zig.zon:
zig
.{
.name = .my_app,
.version = "0.0.0",
.fingerprint = 0x1234567890abcdef,
.minimum_zig_version = "0.16.0",
.dependencies = .{
.treesitter = .{
.url = "https://github.com/muhammad-fiaz/tree-sitter.zig/archive/refs/tags/0.0.1.tar.gz",
.hash = "...",
},
},
.paths = .{ "build.zig", "build.zig.zon", "src" },
}build.zig:
zig
const std = @import("std");
pub fn build(b: *std.Build) void {
const target = b.standardTargetOptions(.{});
const optimize = b.standardOptimizeOption(.{});
const treesitter = b.dependency("treesitter", .{ .target = target, .optimize = optimize });
const exe_mod = b.createModule(.{
.root_source_file = b.path("src/main.zig"),
.target = target,
.optimize = optimize,
});
exe_mod.addImport("treesitter", treesitter.module("treesitter"));
const exe = b.addExecutable(.{ .name = "my_app", .root_module = exe_mod });
b.installArtifact(exe);
}src/main.zig:
zig
const treesitter = @import("treesitter");
pub fn main() !void {
_ = treesitter.version;
}How it works โ
The package exposes a single module named treesitter whose root is src/treesitter.zig. Consumers always import exactly that name, so swapping between fetched, vendored, and source checkouts never changes application code.
