Переносимость данных
В Настройки → Управление данными можно переносить поддерживаемые данные между установками. Это не полный backup сервера.
Версия 3
{
"format": "libre-webui-user-data",
"version": 3,
"integrity": {
"algorithm": "sha256",
"canonicalization": "libre-json-sort-v1",
"digest": "<64 lowercase hexadecimal characters>"
}
}
Содержит предпочтения, папки, сессии, сообщения, ветки, оценки, артефакты, настройки, заметки, коллекции, документы и фрагменты. Embedding не экспортируются. Архив содержит извлечённый текст, не исходные байты.
exclusions: аккаунты, пароли, сессии/OAuth, credentials, биометрия голоса, персоны/память, медиа, версии/вложения, Work и тома. Каналы, уведомления, календари и автоматизации требуют серверного backup.
Полное восстановление: база с тем же ENCRYPTION_KEY и тома Work. SQLite, Work.
Целостность
SHA-256 канонического libre-json-sort-v1: исключает integrity, сортирует ключи, сохраняет массивы, хеширует compact UTF-8. Ошибка отклоняется. Это не подпись или шифрование.
Экспорт использует те же проверки и 50 MiB. Ограничения: 100 папок, 5000 сессий, 100 000 сообщений, 100 заметок, 5000 коллекций/документов, 100 000 фрагментов, поля 2 000 000, ID 256.
Безопасный импорт
Preflight показывает суммы, план, remap и предупреждения, проверяет schema, ID и связи без записи. Висячие связи отклоняются. Импорт повторяет и пишет одной транзакцией SQLite/PostgreSQL.
- Пропустить дубли — сохраняет ID, объединяет предпочтения.
- Перезаписать — заменяет совпадающие ID, не удаляет отсутствующие.
Чужой ID детерминированно переназначается со ссылками, без чтения/перезаписи чужого. После успеха UI обновляется.
Старые архивы
Версия 2 libre-webui-user-data мигрируется без digest и заметок. libre-webui-export 1.0 содержал предпочтения, загруженные сессии и пустой documents. Ограничения сообщаются.
HTTP
| Метод | Endpoint | Назначение |
|---|---|---|
GET | /api/preferences/export | Экспорт |
POST | /api/preferences/import/preflight | План |
POST | /api/preferences/import | Импорт |
multipart/form-data: archive, strategy, 50 MiB. JSON:
{
"data": { "format": "libre-webui-user-data", "version": 3 },
"strategy": "skip"
}
strategy: skip/overwrite; mergeStrategy: "merge" → skip, mergeStrategy: "replace" → overwrite.