Datenportabilität
Libre WebUI kann unter Einstellungen → Datenverwaltung ein versioniertes JSON-Archiv pro Benutzer exportieren und importieren. Es dient zum Übertragen unterstützter persönlicher Daten zwischen Installationen oder zur Wiederherstellung in einem Konto. Es ist keine vollständige Serversicherung.
Archivversion 3
Das aktuelle Format wird so erkannt:
{
"format": "libre-webui-user-data",
"version": 3,
"integrity": {
"algorithm": "sha256",
"canonicalization": "libre-json-sort-v1",
"digest": "<64 lowercase hexadecimal characters>"
}
}
Das Backend erstellt den Export aus authentifizierten, benutzerbegrenzten Abfragen. Enthalten sind:
- Benutzereinstellungen außer der Referenz eines gewählten wiederverwendbaren Stimmenprofils;
- Chatordner;
- Chatsitzungen, Nachrichten, Zweige, Bewertungen, Artefakte und chatspezifische Einstellungen;
- eigenständige Notes einschließlich angeheftetem Zustand;
- Wissenssammlungen;
- extrahierter Dokumentinhalt und Metadaten, Sitzungs-/Sammlungsbeziehungen und Textausschnitte.
Einbettungen werden nicht exportiert, da sie abgeleitet sind. Erstelle sie nach dem Import neu, wenn semantischer Abruf aktiv ist. Das Archiv enthält den für RAG extrahierten Text, nicht die Originalbytes, und kann die ursprüngliche Datei nicht Byte für Byte wiederherstellen.
Jedes Archiv hat eine Liste exclusions. Version 3 schließt bewusst aus:
- Konten, Passwörter, Anmeldesitzungen und OAuth-Zustand;
- Anbieterzugangsdaten und verschlüsselte Pluginvariablen;
- Referenzaufnahmen und Transkripte geklonter Stimmen, da biometrisch und gesondert einwilligungspflichtig;
- Personas und Persona-Speicher;
- erzeugte Bild-, Audio- und Videodateien;
- Revisionsverlauf und Anhänge von Notizen;
- Work-Aufgaben, Ausführungen, Sandboxes und Docker-/Kubernetes-Volumes.
Kanäle, Benachrichtigungen, Kalender und Automatisierungen liegen ebenfalls außerhalb; sie sind Instanz-/Teamzustand und reisen mit einer vollständigen Serversicherung.
Verwende zur vollständigen Wiederherstellung eine Datenbank-/Datenverzeichnissicherung mit demselben ENCRYPTION_KEY. Work benötigt zusätzlich seine benannten Volumes. Siehe SQLite-Migration und Sicherung und Work-Arbeitsbereiche.
Integrität und Exportprüfung
Version 3 schützt die Nutzlast mit SHA-256. Die kanonische Form libre-json-sort-v1 lässt das oberste Feld integrity aus, sortiert alle Objektschlüssel lexikografisch, bewahrt Arrayreihenfolgen und hasht kompaktes UTF-8-JSON. Ein Archiv mit falschem Hash wird auch bei syntaktisch gültigem JSON abgewiesen.
Der Hash erkennt versehentliche Beschädigung und spätere Änderungen. Er ist keine digitale Signatur, authentifiziert den Ersteller nicht und macht das Archiv nicht vertraulich. Behandle es wie jede Kopie privater Chats und Notes.
Vor dem Download führt der Export dieselben Schema-, Feldgrößen-, ID- und Zählprüfungen wie der Import aus. Außerdem darf das formatierte JSON das Uploadlimit von 50 MiB nicht überschreiten. Statt einer nicht wiederherstellbaren Datei wird ein genauer Fehler ausgegeben.
Aktuelle Grenzen:
- 50 MiB pro hochgeladenem oder erzeugtem Archiv;
- 100 Chatordner;
- 5,000 Chatsitzungen;
- 100,000 Nachrichten;
- 100 Notes mit Titeln bis 200 und Inhalt bis 200,000 Zeichen;
- 5,000 Wissenssammlungen;
- 5,000 Dokumente;
- 100,000 Dokumentausschnitte;
- allgemeine Inhaltsfelder bis 2,000,000 und IDs bis 256 Zeichen, mit engeren Laufzeitgrenzen.
Sicheres Importverhalten
Nach Dateiauswahl prüft das Backend sie sofort. Einstellungen zeigt eingehende Summen, geplante Erstellungen/Überschreibungen/Überspringungen, ID-Neuzuordnungen und Migrationswarnungen, bevor Import aktiviert wird. Ein Strategiewechsel berechnet eine neue Vorschau.
Die Vorprüfung kontrolliert Integrität, migriert unterstützte alte Formate, validiert Schema, Mengen, eindeutige IDs, Zeitstempel, Grenzen und Beziehungen und plant Konflikte und Verweise ohne Schreiben. Verwaiste Ordner-, Sammlungs-, Nachrichten- oder Dokumentbeziehungen werden abgewiesen statt still entfernt. Das Backend wiederholt die Prüfung beim tatsächlichen Import. Alle Schreibvorgänge laufen in einer Transaktion auf SQLite und PostgreSQL; ein Fehler setzt Einstellungen, Ordner, Sitzungen/Nachrichten, Notes, Sammlungen, Dokumente und Ausschnitte gemeinsam zurück.
Zwei Strategien stehen bereit:
- Duplikate überspringen behält Datensätze mit passender ID und importiert neue. Einstellungen werden mit aktuellen zusammengeführt.
- Vorhandene überschreiben ersetzt passende IDs. Einstellungen ersetzen Libre WebUI-Standards. Im Archiv fehlende Datensätze werden nie gelöscht.
Beide sind für passende IDs idempotent. Gehört eine ID einem anderen Konto, ordnet Libre WebUI sie und alle enthaltenen Verweise deterministisch neu zu. Fremde Ressourcen werden nie gelesen oder überschrieben. Verweise auf ausgeschlossene oder fehlende Ressourcen wie eine Persona einer anderen Installation sind dokumentierte Ausnahmen; die Vorprüfung meldet die Trennung der Sitzung.
Das Ergebnis zeigt erstellte, überschriebene und übersprungene Ordner, Sitzungen, Notes, Sammlungen und Dokumente. Danach lädt Libre Einstellungen, Chats und Ordner neu und aktualisiert Dokumente.
Ältere Archive
Der Import akzeptiert libre-webui-user-data Version 2 und migriert sie zu Version 3. Version 2 hatte keinen Hash und keine Notes; Libre kann Herkunft oder nie exportierte Notes nicht wiederherstellen. Die Vorschau weist darauf hin.
Auch das frühere libre-webui-export in Version 1.0 wird akzeptiert. Dieses Browserformat enthielt Einstellungen und nur dort geladene Sitzungen. Sein documents-Array war immer leer; Ordner, Notes, Sammlungen und Ausschnitte fehlten. Libre meldet diese Grenzen.
HTTP-Endpunkte
Alle Endpunkte benötigen Bearer-Token oder Sitzung des authentifizierten Benutzers:
| Methode | Endpunkt | Zweck |
|---|---|---|
GET | /api/preferences/export | Aktuelles v3-Archiv erstellen |
POST | /api/preferences/import/preflight | Ohne Schreiben prüfen und planen |
POST | /api/preferences/import | Transaktional prüfen und importieren |
Die Oberfläche sendet das Archiv als multipart/form-data-Feld archive und die Strategie als strategy. Das Limit beträgt 50 MiB. Kleinere API-Migrationen akzeptieren JSON:
{
"data": { "format": "libre-webui-user-data", "version": 3 },
"strategy": "skip"
}
strategy ist skip oder overwrite. Für den alten Client entspricht mergeStrategy: "merge" dem Wert skip und mergeStrategy: "replace" dem Wert overwrite.