Your mailing lists, on your own server

difuzio is a free mailing list and newsletter engine written in Go. One binary, one database, no third-party service and no message broker.

Install difuzio Browse the source

Free software under GPL-3.0-or-later, published by CAP-REL.

# Debian 13 or Ubuntu 24.04
apt install ./difuzio-sqlite_<version>_amd64.deb

export CREDENTIALS_DIRECTORY=/etc/difuzio/secrets
CFG=/etc/difuzio/config.yaml

difuzio bootstrap-admin --config $CFG \
    --email you@example.org --password-stdin

difuzio add-domain --config $CFG \
    --name lists.example.org \
    --base-url https://lists.example.org

The package creates the database, applies the schema and starts the services. What is left to you: the first administrator, a domain, and a TLS proxy in front of the console.

difuzio receives mail from your mail server, applies each list's policy, fans the message out to its subscribers, then processes the bounces and complaints that come back so your sender reputation stays intact. It is designed as a modern successor to Sympa: multi-domain and multi-tenant from the first line, so a single deployment hosts as many domains, lists, owners and moderators as you need, isolated from one another.

What difuzio does

Two ways to deploy it

Light Full
Database SQLite, a single file MariaDB 10.6 or newer
Inbound IMAP polling, one mailbox per list LMTP from Postfix
Outbound Authenticated submission at the provider Local relay
Subscription Web and one-click unsubscribe Web and mail commands
Bounces and complaints Dead addresses removed by hand VERP, FBL and automatic kill switch
Throughput Your mailbox quota Your own sending pools
Number of hosts One As many as needed
What you must have A mailbox and its credentials An MTA, the DNS and the rights that go with it

These two profiles are the proven combinations, not a constraint: the database backend and the mail path remain two independent settings, and the second one is decided list by list. A single deployment can therefore poll an external mailbox for one list and receive over LMTP for another. The core of the product - pipeline, authorisations, transformations, fan-out - is identical either way, so you start light and switch when volume demands it.

Built to last

A single binary with sub-commands, a database as the only source of truth, no message broker to operate, no dependency on an online service. The same business code runs on top of both backends.

Message bodies are written to the filesystem rather than into the database, so backups stay usable and replication does not haul your attachments around.

Getting started