ztick — Push-Driven Job Scheduler in Zig

Your application decides when to schedule. ztick faithfully executes.

Get Started GitHub

Why ztick?

Periodic schedulers (cron, systemd timers) trigger work at fixed intervals regardless of the target system’s state. When load is already high, they make it worse.

ztick inverts this logic: the application decides when to schedule a job based on its own state. It sends a SET command over TCP at the moment it sees fit, and ztick faithfully executes it at the requested time.

This is an explicit push model — the application drives, ztick executes.

Install

curl -fsSL https://raw.githubusercontent.com/awf-project/ztick/main/scripts/install.sh | sh

Or build from source:

git clone https://github.com/awf-project/ztick.git
cd ztick
make build

Quick Start

Run the server with default settings:

zig build run

Schedule a job over TCP:

echo "SET deploy.daily $(date +%s%N -d 'tomorrow 03:00')" | nc 127.0.0.1 5678

Or define a rule that matches a job prefix and runs a shell command:

echo 'RULE SET deploy.* deploy.* shell "/usr/local/bin/deploy.sh"' | nc 127.0.0.1 5678

Explicit Push Model

Your application decides when to schedule. ztick listens on TCP, accepts SET commands with explicit timestamps, and executes them at the requested time — no periodic triggers, no surprise overlaps.

Multiple Runners

Match jobs by prefix and dispatch to shell commands, direct execve, HTTP webhooks, AWF workflows, AMQP publishers, or Redis commands — all configured through the same protocol.

Durable Persistence

Append-only logfile with binary length-prefixed framing, automatic background compression, and a memory mode for ephemeral CI runs without disk I/O.

Built with Zig

Hexagonal architecture, four-thread design, optional TLS via system OpenSSL, OpenTelemetry export — packaged in a small static binary with explicit memory management.