ooyeku/vigil
A process supervision and management library for Zig, inspired by Erlang/OTP's supervisor model.
A process supervision and inter-process communication library for Zig, designed for building reliable distributed systems and concurrent applications. Inspired by Erlang/OTP.
Version: 1.0.0
zig fetch --save "git+https://github.com/ooyeku/vigil"
Add as a dependency in your build.zig:
const vigil = b.dependency("vigil", .{
.target = target,
.optimize = optimize,
});
exe.root_module.addImport("vigil", vigil.module("vigil"));
const std = @import("std");
const vigil = @import("vigil");
fn worker() void {
std.debug.print("Worker running\n", .{});
std.Thread.sleep(100 * std.time.ns_per_ms);
}
pub fn main() !void {
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
defer _ = gpa.deinit();
const allocator = gpa.allocator();
var app = try vigil.app(allocator);
_ = try app.worker("task1", worker);
_ = try app.workerPool("pool", worker, 4);
try app.start();
defer app.shutdown();
}
var inbox = try vigil.inbox(allocator);
defer inbox.close();
try inbox.send("hello");
if (try inbox.recvTimeout(1000)) |msg| {
defer msg.deinit();
std.debug.print("Received: {s}\n", .{msg.payload.?});
}
var breaker = try vigil.CircuitBreaker.init(allocator, "api", .{
.failure_threshold = 5,
.reset_timeout_ms = 30000,
});
defer breaker.deinit();
if (breaker.getState() == .open) {
// Service unavailable, fail fast
}
var limiter = vigil.RateLimiter.init(100); // 100 ops/sec
if (limiter.allow()) {
// Process request
} else {
// Rate limited
}
var group = try vigil.ProcessGroup.init(allocator, "workers");
defer group.deinit();
try group.add("worker1", inbox1);
try group.add("worker2", inbox2);
try group.broadcast("message"); // Send to all
try group.roundRobin("message"); // Load balance
// Production: conservative restarts, monitoring enabled
var app = try vigil.appWithPreset(allocator, .production);
// Development: verbose logging, quick restarts
var app = try vigil.appWithPreset(allocator, .development);
// High availability: intensive health checks
var app = try vigil.appWithPreset(allocator, .high_availability);
// Testing: minimal restarts, fast health checks
var app = try vigil.appWithPreset(allocator, .testing);
See examples/vigilant_server for a complete TCP server with:
cd examples/vigilant_server
zig build
./zig-out/bin/vigilant_server
See docs/api.md for comprehensive API documentation.
zig build test
MIT - see the LICENSE file for details.