atproto relay implementation in zig
zlay.waow.tech
1# multi-stage build: compile natively inside x86_64 linux container
2# uses Debian (glibc) because zig 0.15's C++ codegen for musl
3# produces illegal instructions in RocksDB's LRU cache
4FROM --platform=linux/amd64 debian:bookworm-slim AS builder
5RUN apt-get update && apt-get install -y --no-install-recommends curl xz-utils ca-certificates && rm -rf /var/lib/apt/lists/*
6RUN curl -fSL https://ziglang.org/download/0.15.2/zig-x86_64-linux-0.15.2.tar.xz \
7 | tar xJ -C /opt
8ENV PATH=/opt/zig-x86_64-linux-0.15.2:$PATH
9WORKDIR /build
10
11# fetch dependencies first (cacheable — only changes when build.zig.zon changes)
12COPY build.zig build.zig.zon ./
13RUN zig build --fetch-only 2>/dev/null || true
14
15# then copy source and build
16COPY src/ src/
17RUN zig build -Doptimize=ReleaseSafe -Dcpu=baseline -Dtarget=x86_64-linux-gnu
18
19FROM --platform=linux/amd64 debian:bookworm-slim
20RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates && rm -rf /var/lib/apt/lists/*
21COPY --from=builder /build/zig-out/bin/zlay /usr/local/bin/zlay
22RUN mkdir -p /data/events /data/collection-index
23ENV RELAY_DATA_DIR=/data/events
24EXPOSE 3000 3001
25ENTRYPOINT ["/usr/local/bin/zlay"]