
Write HTML. Render video. Built for agents.
gRPC-zig gives Zig projects client and server implementations for gRPC, with HTTP/2, streaming, compression, TLS, JWT auth, and health checks. The package is split into client, server, transport, protocol, and HTTP/2 modules, with examples and tests showing how the pieces fit together.
Builders who want to add gRPC or MCP networking to Zig projects.
You can build and ship Zig services and clients without wiring gRPC plumbing from scratch.
Provides `GrpcClient` and `GrpcServer` entry points for making calls and serving handlers.
Implements HTTP/2 support with flow control through the transport layer.
Handles bi-directional streaming for request and response flows.
Includes JWT authentication and TLS support.
Supports gzip and deflate compression for messages.
Includes a built-in health checking system.
Ships a benchmark tool, benchmark script, unit tests, and integration tests.
zig fetch --save git+https://github.com/ziglana/gRPC-zig#main
A blazingly fast gRPC client & server implementation in Zig, designed for maximum performance and minimal overhead.
const std = @import("std");
const GrpcServer = @import("grpc-server").GrpcServer;
pub fn main() !void {
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
defer _ = gpa.deinit();
const allocator = gpa.allocator();
// Create and configure server
var server = try GrpcServer.init(allocator, 50051, "secret-key");
defer server.deinit();
// Register handlers
try server.handlers.append(allocator, .{
.name = "SayHello",
.handler_fn = sayHello,
});
// Start server
try server.start();
}
fn sayHello(request: []const u8, allocator: std.mem.Allocator) ![]u8 {
_ = request;
return allocator.dupe(u8, "Hello from gRPC-zig!");
}
See examples/basic_server.zig for a complete example.
const std = @import("std");
const GrpcServer = @import("grpc-server").GrpcServer;
pub fn main() !void {
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
defer _ = gpa.deinit();
const allocator = gpa.allocator();
var server = try GrpcServer.init(allocator, 50051, "secret-key");
defer server.deinit();
try server.start();
}
See examples/basic_client.zig for a complete example.
const std = @import("std");
const GrpcClient = @import("grpc-client").GrpcClient;
pub fn main() !void {
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
defer _ = gpa.deinit();
const allocator = gpa.allocator();
var client = try GrpcClient.init(allocator, "localhost", 50051);
defer client.deinit();
const response = try client.call("SayHello", "World", .none);
defer allocator.free(response);
std.debug.print("Response: {s}\n", .{response});
}
All features are demonstrated in the examples/ directory:
zig fetch --save git+https://github.com/ziglana/gRPC-zig#main
build.zig:const grpc_zig_dep = b.dependency("grpc_zig", .{
.target = target,
.optimize = optimize,
});
// For server development
exe.root_module.addImport("grpc-server", grpc_zig_dep.module("grpc-server"));
// For client development
exe.root_module.addImport("grpc-client", grpc_zig_dep.module("grpc-client"));
const GrpcServer = @import("grpc-server").GrpcServer;
const GrpcClient = @import("grpc-client").GrpcClient;
Clone the repository and add it to your build.zig.zon:
.{
.name = "my-project",
.version = "0.1.0",
.dependencies = .{
.grpc_zig = .{
.url = "https://github.com/ziglana/gRPC-zig/archive/refs/heads/main.tar.gz",
// Replace with actual hash after first fetch
.hash = "...",
},
},
}
Benchmarked against other gRPC implementations (ops/sec, lower is better):
gRPC-zig โโโโโโโโโโโโโโโโโโโโ 2.1ms
gRPC Go โโโโโโโโโโโโโโโโโโโโ 3.8ms
gRPC C++ โโโโโโโโโโโโโโโโโโโโ 4.2ms
The repository includes a built-in benchmarking tool to measure performance:
# Build the benchmark tool
zig build
# Run benchmarks with default settings
zig build benchmark
# Run with custom parameters
./zig-out/bin/grpc-benchmark --help
./zig-out/bin/grpc-benchmark --requests 1000 --clients 10 --output json
# Or use the convenient script
./scripts/run_benchmark.sh
Benchmark Options:
--host <host>: Server host (default: localhost)--port <port>: Server port (default: 50051)--requests <n>: Number of requests per client (default: 1000)--clients <n>: Number of concurrent clients (default: 10)--size <bytes>: Request payload size (default: 1024)--output <format>: Output format: text|json (default: text)Benchmark Metrics:
The benchmarks automatically run in CI/CD on every pull request and provide performance feedback.
๐ Detailed Benchmarking Guide
Run the unit test suite:
zig build test
The test suite covers:
Run integration tests with a Python client validating the Zig server:
cd integration_test
./run_tests.sh
Or manually:
# Build and start the test server
zig build integration_test
./zig-out/bin/grpc-test-server
# In another terminal, run Python tests
cd integration_test
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
python3 test_client.py
The integration tests validate:
๐ Integration Test Documentation
Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.
This project is licensed under the Unlicense - see the LICENSE file for details.
If you find this project useful, please consider giving it a star on GitHub to show your support!
Made with โค๏ธ in Zig
Sign in to join the discussion.
No comments yet. Be the first to say what this is good for.

Write HTML. Render video. Built for agents.
Ultra-lightweight, open-source, self-hosted personal AI agent framework in Python with WebUI, tools, memory, MCP, multi-agent workflows, automation, and chat apps
SkillOpt is a text-space optimizer that trains reusable natural-language skills for frozen LLM agents through trajectory-driven edits, validation-gated updates, and deployable best_skill.md artifacts.

Omnigent is an open-source AI agent framework and meta-harness: orchestrate Claude Code, Codex, Cursor, Pi, and custom agents โ swap harnesses without rewriting, enforce policies and sandboxing, and collaborate in real time from any device.
A theoretical reconstruction of the Claude Mythos architecture, built from first principles using the available research literature.
๐ท๏ธ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl!