mailsieve
DocsDonate
Getting started

Installation

One container, one volume. Most people are running in a couple of minutes.

Docker

docker run -d --name mail-sieve \
  -p 127.0.0.1:8080:8080 \
  -v mail-sieve-data:/data \
  ghcr.io/pmqueiroz/mail-sieve

Open http://localhost:8080, choose an admin password, then add your first account.

Images are published for linux/amd64 and linux/arm64, so the same command works on a Raspberry Pi or an ARM NAS.

Tag What it is
latest The newest release
0.1.0, 0.1 A specific release, or the newest patch of a minor version
edge The current main branch. Newest features, least tested

Docker Compose

Save this as compose.yml:

services:
  mail-sieve:
    image: ghcr.io/pmqueiroz/mail-sieve:latest
    restart: unless-stopped
    ports:
      - "127.0.0.1:8080:8080"
    volumes:
      - mail-sieve-data:/data

volumes:
  mail-sieve-data:

Then start it:

docker compose up -d

The repository also ships this file as docker/compose.yml, where MAIL_SIEVE_PORT picks a host port other than 8080 and MAIL_SIEVE_HOST_IP=0.0.0.0 makes it reachable from other devices. Both can live in docker/.env.

Standalone binary

No Docker? Download the archive for your platform from the latest release.

Platform Archive ends with
Linux x86_64 x86_64-unknown-linux-musl.tar.gz
Linux ARM64 aarch64-unknown-linux-musl.tar.gz
macOS, Apple silicon aarch64-apple-darwin.tar.gz
macOS, Intel x86_64-apple-darwin.tar.gz
Windows x86_64 x86_64-pc-windows-msvc.zip
tar xzf mail-sieve-*-x86_64-unknown-linux-musl.tar.gz
cd mail-sieve-*-x86_64-unknown-linux-musl
./mail-sieve serve

It is a single file with the web UI built in. It keeps its database and secret.key in ./data and listens on 127.0.0.1:8080; MAIL_SIEVE_DATA_DIR and MAIL_SIEVE_BIND change both (see Configuration). The Linux builds are fully static and run on any distribution.

To check a download, compare it with SHA256SUMS from the same release, or verify where it was built with gh attestation verify <archive> --owner pmqueiroz.

Updating

docker compose pull
docker compose up -d

With the standalone binary, stop it, replace the file with the one from the new release and start it again. The data folder carries over.

Database migrations run automatically on start. Back up the data volume before upgrading.

Edit this page on GitHub