Linux binaries
Static binaries for x86_64 and aarch64. Each has a SHA-256 checksum published on this page.
No published releases yet
Pre-release: no published builds yet.
Postwind will be published as ready-made packages: static Linux binaries, a container image, a Helm chart and a Docker Compose file. None is published yet. You will not need to build anything.
The first release will carry four packages.
Static binaries for x86_64 and aarch64. Each has a SHA-256 checksum published on this page.
Runs as a non-root user (UID 65532) on gcr.io/distroless/static-debian13:nonroot. Listens on 8080, 8081, 443 and 25.
For Kubernetes 1.25 or newer, over an external ClickHouse. The chart does not deploy ClickHouse.
Postwind and ClickHouse with Keeper on one Linux host.
ClickHouse 26.8 or newer
x86_64: AES-NI, PCLMULQDQ, AVX, AVX2, BMI1, ADX (Intel since Broadwell, AMD since Zen, roughly 2014 onward)
aarch64: NEON, AES, PMULL, SHA-2 (Graviton, Ampere, Apple M, Raspberry Pi 5)
| Port | What | Reachable from |
|---|---|---|
8080 |
API, MCP (/mcp), /healthz, /readyz, /metrics |
Your services and agents; keep it internal |
8081 |
Public web over HTTP: unsubscribe, confirmation, tracking | Recipients, through your proxy or Ingress |
443 |
Public web over HTTPS when web.tls.mode is files or acme |
The internet (ACME TLS-ALPN-01 arrives here) |
25 |
Inbound SMTP: bounces (DSN), complaints (ARF), mailto unsubscribe | The internet, at the host of web.public_url |
ClickHouse must be reachable over HTTP (8123), with a user that may create the database and tables. https:// to ClickHouse is not supported yet: keep it on a private network. For more than one node: ClickHouse Keeper and keeper_map_path_prefix. No Redis, ZooKeeper, etcd or message broker.
CPU. Outbound TLS and DKIM signing use the graviola cryptography library, which needs the CPU instructions listed above. Without them postwind serve starts, but the direct transport, DKIM signing and the built-in TLS of the public web are unavailable; the log says so with level = error.
Network for direct delivery. Outbound TCP 25 to recipients’ MX hosts must be open (most clouds block it by default; ask your provider). Every IP in every pool needs a PTR record pointing at its hostname and an A record pointing back. Behind NAT a pool has exactly one address with public_ip. Inbound TCP 25 on the host of web.public_url receives bounces; port 443 must be reachable from the internet when web.tls.mode = "acme". Using a relay instead (delivery.default_transport = "relay:<name>") needs only the relay’s port (587 or 465).
Read the documentation of the interface you will use, and go through the deliverability checklist before the first campaign.
HTTP API documentation MCP documentation Deliverability checklist