Sign inSign up

0kaba0/yarilo

By 0kaba0

Updated 26 days ago

IMAP/POP3/LMTP/ManageSieve/Submission mail server with full-text search, in Go. Kubernetes-native.

Image
Networking
0

10K+

0kaba0/yarilo repository overview

yarilo logo

yarilo

Production-grade IMAP / POP3 / LMTP / ManageSieve / Submission mail server written in Go, with built-in full-text search. Multi-binary architecture — each protocol component is a separate process — Kubernetes-native via a Helm chart.

Source & docs: https://github.com/yarilomail/yarilo License: AGPL-3.0 · Platform: linux/amd64

Architecture

Each protocol and infrastructure role is a separate compiled binary — no monolith, no mode flags. Login proxies terminate TLS and pass the authenticated connection to session backends; a director ring provides consistent-hash routing with sticky per-user sessions; shared yarilo-auth and yarilo-locks services back authentication and cross-process write coordination. The same binaries serve a single-node standalone install and a sharded clustered deployment — topology is configuration, not code. See ARCHITECTURE and DEPLOYMENT.

One image, many components

This is a single image containing every yarilo binary. The component to run is selected with the YARILO_COMPONENT environment variable, so the same image serves the all-in-one process and every clustered role:

YARILO_COMPONENTRole
yariloStandalone all-in-one server
yarilo-imap / yarilo-imap-loginIMAP backend / login proxy
yarilo-pop3 / yarilo-pop3-loginPOP3 backend / login proxy
yarilo-lmtp / yarilo-lmtp-loginLMTP delivery / login proxy
yarilo-submission / yarilo-submission-loginSubmission relay / login proxy
yarilo-managesieve / yarilo-managesieve-loginManageSieve backend / login proxy
yarilo-jmap-loginJMAP login proxy (the backend lands separately)
yarilo-sasl-loginSASL auth socket (Postfix / Exim relay)
yarilo-auth · yarilo-warden · yarilo-locksShared services (passdb, rate-limit, write locks)
yarilo-director · yarilo-backend-api · yarilo-backend-regDirector ring, admin API, backend registration sidecar
yarilo-fts · yarilo-quota-status · yarilo-migrateFull-text search, quota policy, offline format migration

Supported tags

TagMeaning
latestLatest build from main.
X.Y.ZA released version (matches the Helm chart appVersion).
<short-sha>Exact commit build, for pinning.

Observability & ports

HTTP on 8080 exposes health (/healthz, /readyz) and Prometheus /metrics; a ServiceMonitor is shipped with the Helm chart. Mail ports (config-driven; defaults):

PortService
143 / 993IMAP (STARTTLS) / IMAPS
110 / 995POP3 / POP3S
587 / 465Submission (STARTTLS) / implicit TLS
24LMTP
4190ManageSieve

Environment variables

VariableDefaultDescription
YARILO_COMPONENTRequired. Selects which binary runs (see table above).
CONFIG/etc/yarilo/yarilo.yamlPath to the YAML config, for components that read one.
LOG_LEVELinfodebug / info / warn / error (JSON slog output).
POD_IPThe pod's own IP; used by login proxies for session bookkeeping.
TELEMETRY_LISTEN:8080Address for the health/metrics HTTP server.

Admin/API tokens (YARILO_ADMIN_TOKEN, DIRECTOR_API_TOKEN, …) gate the control-plane endpoints in clustered mode; the Helm chart wires these automatically.

Deploy

yarilo is designed for Kubernetes via its Helm chart — login proxies, an optional director ring, co-located backend StatefulSets per storage tag, and shared services. See DEPLOYMENT.

Local (standalone)
docker run --rm \
  -e YARILO_COMPONENT=yarilo \
  -v "$PWD/yarilo.yaml:/etc/yarilo/yarilo.yaml:ro" \
  -p 143:143 -p 993:993 -p 587:587 -p 465:465 \
  0kaba0/yarilo:latest

Stack

  • Go (linux/amd64), multi-stage build → slim runtime
  • Storage: Maildir / sdbox / mdbox + FileIndex (mail-index v7.3 wire format)
  • Full-text search: flatcurve (Xapian) via yarilo-fts
  • TLS 1.3 throughout; SASL PLAIN / LOGIN / SCRAM-SHA-256 / XOAUTH2; mTLS between components
  • Redis for the dict / locks state (clustered mode)

CI

Built and published on every push to main; a tagged release is cut automatically when the Helm chart appVersion advances. Images are linux/amd64, built from docker/Dockerfile.

Tag summary

Content type

Image

Digest

sha256:cd5909ce7

Size

160.5 MB

Last updated

26 days ago

docker pull 0kaba0/yarilo