A container registry that uses the AT Protocol for manifest storage and S3 for blob storage.
atcr.io
docker
container
atproto
go
1FROM docker.io/golang:1.25.2-trixie AS builder
2
3RUN apt-get update && \
4 apt-get install -y --no-install-recommends sqlite3 libsqlite3-dev && \
5 rm -rf /var/lib/apt/lists/*
6
7WORKDIR /build
8
9COPY go.mod go.sum ./
10RUN go mod download
11
12COPY . .
13
14RUN go generate ./...
15RUN CGO_ENABLED=1 go build \
16 -ldflags="-s -w -linkmode external -extldflags '-static'" \
17 -tags sqlite_omit_load_extension \
18 -trimpath \
19 -o atcr-appview ./cmd/appview
20
21# ==========================================
22# Stage 2: Minimal FROM scratch runtime
23# ==========================================
24FROM scratch
25# Copy CA certificates for HTTPS (PDS, Jetstream, relay connections)
26COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
27# Copy timezone data for timestamp formatting
28COPY --from=builder /usr/share/zoneinfo /usr/share/zoneinfo
29# Copy optimized binary (SQLite embedded)
30COPY --from=builder /build/atcr-appview /atcr-appview
31
32# Expose ports
33EXPOSE 5000
34
35# OCI image annotations
36LABEL org.opencontainers.image.title="ATCR AppView" \
37 org.opencontainers.image.description="ATProto Container Registry - OCI-compliant registry using AT Protocol for manifest storage" \
38 org.opencontainers.image.authors="ATCR Contributors" \
39 org.opencontainers.image.source="https://tangled.org/@evan.jarrett.net/at-container-registry" \
40 org.opencontainers.image.documentation="https://tangled.org/@evan.jarrett.net/at-container-registry" \
41 org.opencontainers.image.licenses="MIT" \
42 org.opencontainers.image.version="0.1.0" \
43 io.atcr.icon="https://imgs.blue/evan.jarrett.net/1TpTNrRelfloN2emuWZDrWmPT0o93bAjEnozjD6UPgoVV9m4" \
44 io.atcr.readme="https://tangled.org/@evan.jarrett.net/at-container-registry/raw/main/docs/appview.md"
45
46ENTRYPOINT ["/atcr-appview"]
47CMD ["serve"]