TerminusDB — это открытая графовая база данных с поддержкой документо-ориентированного хранения, которая сочетает модель графа и документоориентированный подход с возможностью контроля версий данных в стиле Git. Она разрабатывается как система для создания версионированных «data products» (продуктов данных), где каждое изменение данных фиксируется как коммит, допускаются ветвление, слияние и синхронизация между узлами.
TerminusDB предоставляет API, ориентированный на JSON-документы, объединённые в граф через строгую схему. Для запросов поддерживается как GraphQL, так и собственный язык WOQL (Web Object Query Language), представляющий собой разновидность дэйтологического языка запросов. Архитектура ориентирована на иммутабельность слоёв изменений, что обеспечивает возможность навигации по историческим состояниям данных и управления версиями на уровне объектов.
Проект реализован с использованием языков Prolog и Rust, распространяется под лицензией Apache 2.0. Он используется в проектах, где требуется не просто хранение данных, но совместная работа, аудит изменений и управление историей изменений сложных взаимосвязанных структур. Если каких-либо аспектов работы TerminusDB не удаётся достоверно описать из открытых источников, они упоминаются как недостаточно документированные области.
- Версионность данных: изменения фиксируются как коммиты, поддерживаются ветки и слияния, аналогично Git.
- Гибридный графово-документный интерфейс: JSON-документы связаны в графовую структуру через схему.
- Схема управляемых документов: строгие типы, вложенные поддокументы, автоматическая генерация идентификаторов.
- WOQL — дэйтологический язык запросов: позволяет выражать сложные шаблоны и связи.
- GraphQL API: автоматически генерируемые GraphQL-схемы на основе модели данных.
- Работа с историей: возможность запросов к любому состоянию по коммиту, просмотр изменений между версиями.
- Синхронизация и распределённость: клонирование, push/pull изменений между узлами или репозиториями.
- Управление конфликтами и слияниями: механизмы разрешения расхождений при объединении веток.
- Иммутабельность слоёв хранения: данные и изменения хранятся как неизменяемые слои.