Compile-time Router
Routes are resolved at compile time — zero runtime overhead, instant 404s, and type-safe path parameters.
Compile-time Router
Routes are resolved at compile time — zero runtime overhead, instant 404s, and type-safe path parameters.
20 Built-in Middleware
Logging, CORS, compression, auth, rate limiting, CSRF, sessions, body parsing, static files, and more — all included.
Phoenix-style Channels
Real-time WebSocket channels with topic-based pub/sub, presence tracking, and a zzz.js client library.
Database Layer
Compile-time schema definitions, type-safe repositories, composable query builder, migrations, and connection pooling.
Background Jobs
Priority queues with in-memory or database-backed stores, retry strategies, cron scheduling, and telemetry.
Template Engine
Layouts, partials, XSS-safe HTML escaping, pipes, and first-class htmx integration.
OpenAPI / Swagger
Generate OpenAPI specs from route annotations. Swagger UI included.
High-performance I/O
epoll, kqueue, and io_uring backends. Built for speed from the ground up.
| Package | Description |
|---|---|
| zzz.zig | Core framework — HTTP server, router, middleware, WebSockets, channels |
| zzz_db | Database layer — SQLite & PostgreSQL, schemas, repos, query builder, migrations |
| zzz_jobs | Background jobs — queues, workers, retry strategies, cron, telemetry |
| zzz_mailer | Email — SMTP adapters and templated emails |
| zzz_template | Template engine — layouts, partials, pipes, htmx helpers |
| zzz_cli | CLI tool — project scaffolding, generators, dev server, migrations |
| zzz_example_app | Reference application demonstrating full-stack zzz usage |
const std = @import("std");const zzz = @import("zzz");
fn index(ctx: *zzz.Context) !void { ctx.text(.ok, "Hello from zzz!");}
const App = zzz.Router.define(.{ .middleware = &.{zzz.logger}, .routes = &.{ zzz.Router.get("/", index), },});
pub fn main() !void { var gpa = std.heap.GeneralPurposeAllocator(.{}){}; defer _ = gpa.deinit();
var server = zzz.Server.init(gpa.allocator(), .{ .port = 4000, }, &App.handler);
std.log.info("Listening on http://127.0.0.1:4000", .{}); try server.listen(std.io.defaultIo());}