TuringDB home pagelight logodark logo
  • Discord
  • GitHub
  • Website
TuringDB

Get Started

  • Introduction
  • Get Started
  • Claude Code Skill
  • Commands

Concepts

  • Overview
  • A Columnar Graph Database
  • Versioning System
  • The DataPart System
  • Zero-Locking Architecture
  • Snapshots Isolation

Benchmarks

  • Results Summary
  • Technical Report

Query Language

  • Query Language
  • CheatSheet

Importing data

  • JSONL
  • CSV
  • Neo4j
  • GML
  • Parquet

Graph Development

  • Create Graph
  • Load Graph
  • Load External data
  • Create a Change
  • List Changes
  • Create Nodes and Edges
  • Update Properties
  • Submit a Change
  • Time Travel
  • Graph Examples

Vector Search

  • Vector Search

Graph Algorithms

  • Shortest Path

Tutorials

  • Example Notebooks

Python SDK

  • Get Started
  • Reference

Troubleshooting

  • Troubleshooting

  • Core Concepts
  • Usage Guide
  • Practical Example: Protein Interaction Study
Concepts

Version Control in TuringDB

Git-like versioning in your graph database

TuringDB is a graph database that stores connected data (nodes and relationships) with built-in version control. The system combines graph database capabilities with time travel, enabling isolated workspaces, full change tracking, and safe collaboration. When you submit a Change, TuringDB checks it against the current state of main and rejects conflicting submissions, so you never silently overwrite someone else’s work.

With version control, you can explore ideas in parallel, test “what-if” hypotheses, reproduce past states, and audit data evolution. It’s like Git—but for graph data.

​
Core Concepts

TuringDB’s versioning scheme borrows familiar concepts from Git and Perforce:

Commit: A unit of change. Commits include new nodes/edges, updates, or deletions.

Main branch: Canonical history of all accepted and merged commits.

Change: An isolated “branch” of the graph where you can make commits without affecting main.

HEAD: The current tip of a Change or the main branch—i.e., the active snapshot of your graph.

With these primitives, you can:

Safely experiment in isolation

Audit the entire commit history

“Time travel” by checking out a past commit

Reproduce previous analyses and results

Roll back accidental or problematic changes

​
Usage Guide

  1. Create and switch to a new Change
> change new
> checkout change-<ID>  // e.g. checkout change-42

This creates a new branch (change) and switches your workspace to it.

  1. Modify the graph using Cypher-style queries:
> CREATE ...
> MATCH ... CREATE ...
> commit

A change can contain any number of commits. Each commit captures the exact transformation applied to the graph.

  1. Merge back to main once you’re happy with your updates:
> change submit
> CALL db.history()

This submits your changes to the main branch and merges all its commits. You can then inspect your updated graph history.

​
Practical Example: Protein Interaction Study

Load the Reactome knowledge graph

> CALL db.history()

+------------------+-----------+------------+-----------+
| commit           | nodeCount | edgeCount  | partCount |
+------------------+-----------+------------+-----------+
| be9643           | 2,588,826 | 10,042,846 | 1         |
+------------------+-----------+------------+-----------+

Query original graph

> MATCH (n:Protein {`displayName (String)`: 'APOE-4 [extracellular region]'})-->(m)
  RETURN n,  m.`displayName (String)`
   
+--------+-----------------------------------------+
| 514785 | extracellular region                    |
+--------+-----------------------------------------+
| 514785 | Homo sapiens                            |
+--------+-----------------------------------------+
| 514785 | UniProt:P02649 APOE                     |
+--------+-----------------------------------------+
| 514785 | L-cysteine 112 replaced with L-arginine |
+--------+-----------------------------------------+

Add new data

> MATCH (n {`displayName (String)`: 'APOE-4 [extracellular region]'})
  CREATE (n)-[e:HasWikipediaPage]->
         (m:WikipediaPage {
             `displayName (String)`: "APOE-4 wiki",
             `url (String)`: "https://en.wikipedia.org/wiki/Apolipoprotein_E"
         })

This adds a WikipediaPage node and connects it to APOE-4.

Submit the change

> change submit
> CALL db.history()

+------------------+-----------+------------+-----------+
| commit           | nodeCount | edgeCount  | partCount |
+------------------+-----------+------------+-----------+
| 701edb           | 0         | 0          | 1         |
+------------------+-----------+------------+-----------+
| be9643           | 2,588,826 | 10,042,846 | 1         |
+------------------+-----------+------------+-----------+
| 35fcd8           | 1         | 1          | 1         |
+------------------+-----------+------------+-----------+

The current state of the graph’s history can be represented by the following diagram.

Updated graph history

Now everyone sees the APOE-4 wiki connection as part of the main graph.

> MATCH (n {`displayName (String)`: 'APOE-4 [extracellular region]'})-->(m)
  RETURN n,  m.`displayName (String)`
   
+--------+-----------------------------------------+
| 514785 | **APOE-4 wiki**                             |
+--------+-----------------------------------------+
| 514785 | extracellular region                    |
+--------+-----------------------------------------+
| 514785 | Homo sapiens                            |
+--------+-----------------------------------------+
| 514785 | UniProt:P02649 APOE                     |
+--------+-----------------------------------------+
| 514785 | L-cysteine 112 replaced with L-arginine |
+--------+-----------------------------------------+

Time Travel Need to reproduce a past result? Just check out a previous commit:

> checkout be9643
> MATCH (n {`displayName (String)`: 'APOE-4 [extracellular region]'})-->(m)
  RETURN n,  m.`displayName (String)`
   
+--------+-----------------------------------------+
| 514785 | New APOE-4 neighbour                    |
+--------+-----------------------------------------+
| 514785 | extracellular region                    |
+--------+-----------------------------------------+
| 514785 | Homo sapiens                            |
+--------+-----------------------------------------+
| 514785 | UniProt:P02649 APOE                     |
+--------+-----------------------------------------+

Poof—back in time. The Wikipedia node vanishes because it didn’t exist yet in this snapshot.

TuringDB gives you Git-style power, but for graph data. Explore, simulate, track, and revert—all in real time.

A Columnar Graph DatabaseThe DataPart System
githublinkedinyoutubediscord