Skip to content

Quick start

quicz is an experimental IETF QUIC transport implementation in Zig. It targets a usable QUIC v1 transport rather than every optional QUIC extension.

  • Zig 0.16.0 (see the repo’s .zigversion)

While the package is experimental, the easiest route is a local checkout. Add quicz to your application’s build.zig.zon:

.dependencies = .{
.quicz = .{ .path = "../quicz" },
},

Then expose the dependency to the executable in build.zig:

const quicz_dep = b.dependency("quicz", .{
.target = target,
.optimize = optimize,
});
exe.root_module.addImport("quicz", quicz_dep.module("quicz"));
const std = @import("std");
const quicz = @import("quicz");
pub fn main() !void {
var connection = try quicz.Connection.init(std.heap.page_allocator, .client, .{
.initial_max_data = 65_536,
.initial_max_stream_data = 65_536,
.initial_max_streams_bidi = 16,
});
defer connection.deinit();
const stream_id = try connection.openStream();
try connection.sendOnStream(stream_id, "hello", true);
var frame_buffer: [1350]u8 = undefined;
const frame_payload = (try connection.pollTx(0, &frame_buffer)) orelse
return error.NoPendingFrame;
_ = frame_payload;
}
Terminal window
zig build
zig build test --summary all
zig build run-tls13-udp-loopback
zig build run-tls13-process-interop
  • run-tls13-udp-loopback — pure-Zig TLS handshake and stream path over loopback UDP.
  • run-tls13-process-interop — independent Zig client and server processes over loopback UDP.

zig build --help lists every build step.

Need Start here
Public connection API src/lib.zig
TLS 1.3 implementation src/quic/tls13.zig
Endpoint routing and timers src/quic/endpoint_lifecycle.zig
Runnable probes examples/
Protocol status and acceptance evidence transport task matrix

The API is evolving. Connection is the primary public handle; detailed lifecycle helpers are documented in the architecture doc and task matrix rather than enumerated here.

MIT.