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 kein m.room.retention im Raum gesetzt ist.
  • allowed_lifetime_min und max 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:

  1. Raum öffnen
  2. In das Nachrichtenfeld /devtools eingeben und mit Enter bestätigen
  3. „Raumstatus erkunden“ auswählen
  4. 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!

📑 Ähnliche Beiträge
Vergrößern einer Partition in Ubuntu

Stell dir vor, deine Ubuntu-Installation braucht einfach mehr „Luft zum Atmen“. Angenommen, du hast eine 100GB-SSD, auf der 30GB für Read more

Asciinema 3: Installation der neuesten Version des Terminal Session Recorder

Asciinema hat sich als das Tool der Wahl für das Aufzeichnen und Teilen von Terminal-Sessions etabliert. In der kommenden Version Read more

Fritz!Box per Bash-Script neustarten

Heute möchte ich dir ein nützliches Bash-Script vorstellen, das mir persönlich sehr geholfen hat. Es handelt sich um ein "Fritz!Box Read more

Linux: Einfach E-Mails versenden mit msmtp

Oft ist es sinnvoll, wenn man sich von seinem Linux System Benachrichtigungsmails versenden lassen kann. Anwendungsbeispiele wären zum Beispiel der Read more

OwnCloud: Den Footer im Login-Screen bearbeiten

In diesem Beitrag möchte ich den Footer der OwnCloud anpassen. Das bearbeiten des Footers geht ziemlich einfach und schnell. Ich Read more

Vielen Dank fürs Teilen!