Matrix Synapse Retention: Nachrichten automatisch löschen
Vor zwei Wochen habe ich bereits einen Artikel zum Thema Matrix-Aufräumen veröffentlicht:
👉 Matrix-Räume aufräumen – einfach automatisiert
Darin ging es um ein Bash-Script, das mit der Synapse-Admin-API Nachrichten per purge_history
löscht. Die Methode funktioniert – kann aber in föderierten Umgebungen für Probleme sorgen, wie ich inzwischen selbst feststellen musste.
Daher hier nun ein besserer Ansatz: Retention Policies, nativ in Synapse, stabil und föderationsfreundlicher.
In vielen Matrix-Räumen landen regelmäßig automatisierte Nachrichten: Logs, Statusmeldungen, Systeminformationen oder RSS-Feeds. Diese Daten sind oft nur kurzfristig von Bedeutung – bleiben aber unbegrenzt gespeichert, wenn nichts dagegen unternommen wird.
Matrix bringt dafür ein Feature mit: sogenannte Retention Policies. Diese ermöglichen es, Nachrichten automatisch nach einer bestimmten Zeit zu löschen – direkt auf dem Homeserver, ohne zusätzliche Tools oder manuelles Eingreifen.
🧬 Was macht die Retention und wie funktioniert sie?
Die automatische Löschung basiert auf einem speziellen Raumstatus-Event: m.room.retention
. Dieses wird im Raum hinterlegt und gibt an, wie lange Nachrichten gespeichert bleiben sollen – zum Beispiel 30 Tage oder 5 Jahre.
Nach Ablauf dieser Zeit löscht der Synapse-Server die entsprechenden Events. Das Ganze passiert intern, regelmäßig und ohne dass man sich nach der Einrichtung weiter darum kümmern muss. Voraussetzung ist: das Feature ist serverseitig aktiviert und im jeweiligen Raum korrekt gesetzt.
Die Funktion wurde 2019 von Brendan Abolivier im Rahmen der Synapse-Entwicklung implementiert. Sie entstand als Reaktion auf eine häufige Anforderung der Community: eine saubere, föderationsfreundliche Lösung zum Aufräumen von Räumen.
⚙️ Synapse: Retention in der homeserver.yaml konfigurieren
Bevor m.room.retention
im Raum wirkt, muss das Feature auf dem Server selbst erst Mal aktiviert werden. Das geschieht in der Datei homeserver.yaml
. Eine einfache Konfiguration sieht folgendermaßen aus:
retention: enabled: true default_policy: min_lifetime: 1d max_lifetime: 1825d allowed_lifetime_min: 1d allowed_lifetime_max: 1825d purge_jobs: - interval: 1d
Weitere Konfigurationsmöglichkeiten findest du Hier.
Die Parameter im Detail:
enabled: true
schaltet das Feature ein. Ohne diese Einstellung löscht Synapse nichts.default_policy
definiert eine Standard-Aufbewahrungszeit, wenn keinm.room.retention
im Raum gesetzt ist.allowed_lifetime_min
undmax
begrenzen die möglichen Werte, die Raum-Admins setzen dürfen.purge_jobs
regelt, wie oft alte Nachrichten geprüft und gelöscht werden. Hier geschieht das täglich.
Nach Anpassung dieser Werte muss Synapse einmal neu gestartet werden, damit die Änderungen greifen.
Jetzt werden Nachrichten in Räumen standardmäßig fünf Jahre vorgehalten und anschließend automatisch gelöscht.
🧱 Räume individuell konfigurieren – direkt in Element
Neben der Serverkonfiguration ist die Einstellung auf Raumebene entscheidend. In Element lässt sich die m.room.retention
setzen.

So funktioniert’s:
- Raum öffnen
- In das Nachrichtenfeld
/devtools
eingeben und mit Enter bestätigen - „Raumstatus erkunden“ auswählen
- Nach
m.room.retention
suchen – ist kein Event vorhanden, auf „Benutzerdefiniertes Status-Event senden“ klicken

Dann folgendes eintragen:
- Eventtyp:
m.room.retention
- Ereignisinhalt:
{ "max_lifetime": 2592000000 }

Dieser Wert steht für 30 Tage. Die Berechnung erfolgt so:
1000 * 60 * 60 * 24 * <Anzahl der Tage>
= Millisekunden
Ein Klick auf „Senden“ speichert das Event – und der Raum beginnt automatisch, ältere Nachrichten zu löschen, sobald sie das eingestellte Alter überschreiten.

Nach dem Setzen lässt sich die Konfiguration leicht überprüfen: Dazu einfach erneut „Raumstatus erkunden“ aufrufen, nach m.room.retention
filtern und das Event anklicken. Die gespeicherten Werte werden dann übersichtlich angezeigt – so kann direkt kontrolliert werden, ob alles korrekt übernommen wurde.

🌍 Wichtig: Wirkung nur lokal – nicht auf fremden Servern
Ein entscheidender Punkt bei der Nutzung von Retention Policies in Matrix ist, dass diese ausschließlich lokal auf dem eigenen Server wirken.
Wird in einem Raum eine Retention Policy gesetzt, löscht Synapse die Nachrichten nur aus dem eigenen Speicher. Nutzer, die den Raum über einen anderen Homeserver betreten und die Nachrichten dort bereits empfangen haben, behalten sie – es sei denn, auf diesem Server ist dieselbe oder eine vergleichbare Policy aktiv.
Das bedeutet: Die automatische Löschung ist föderationsfreundlich (sie zerstört keine Synchronisation), aber nicht föderationsübergreifend wirksam. Wer also vollständige Löschung über mehrere Server hinweg benötigt, muss sicherstellen, dass alle beteiligten Homeserver eigene Aufbewahrungsregeln setzen.
📌 Fazit
Matrix-Räume mit wachsendem Nachrichtenvolumen lassen sich durch m.room.retention
zuverlässig und automatisch bereinigen – ganz ohne Scripte, manuelle API-Aufrufe oder zusätzlichen Aufwand. Die Konfiguration erfolgt einmalig auf Server- und Raumebene. Danach übernimmt Synapse die Löschung im Hintergrund.
Wichtig ist: Die Funktion greift lokal, nicht global. Wer föderierte Räume betreibt, sollte Retention also bewusst einsetzen.
Richtig eingesetzt hilft das Feature dabei, Speicherplatz zu sparen, Systeme sauber zu halten und die Übersicht in technisch genutzten Räumen zu wahren.
👥 Techniverse Community
Matrix, Selfhosting, smarte IT-Lösungen und jede Menge Nerd-Talk – das findest du in der Techniverse Community.
Komm vorbei, tausch dich aus und werde ein Teil von uns.
👉 Unsere Gruppe auf Matrix: #community:techniverse.net
Wir freuen uns auf dich!
3 Kommentare