Skip to content

neogit

A Git-like tool for filesystems, backed by a Neo4j graph and pluggable object storage.

Neogit takes content-addressed Merkle-tree snapshots of a directory tree and stores them in two places:

  • Neo4j — the graph: commits, branches, trees, blobs, and their relationships
  • Object storage — the bytes: file contents addressed by their SHA-1 (local filesystem, MinIO, or S3 via Apache Libcloud)

This split makes filesystem state queryable as a graph while keeping file contents in cheap blob storage.

Where to start

This documentation follows the Divio framework — four kinds of docs, each serving a different need:

  • Tutorial

    Learning by doing. Take your first filesystem snapshot in five minutes.

  • How-to guides

    Recipes for specific tasks: switching storage backends, diffing commits, embedding neogit in your own Python code.

  • Reference

    The dry facts: every CLI flag, every config key, every node type in the graph.

  • Explanation

    Background and design rationale: why Neo4j, how the Merkle tree is laid out, what trade-offs were made.

Where it's used

Neogit powers the storage layer of the OSWatcher ecosystem, where downstream projects build filetype detection, symbol extraction, and syscall-trace plugins on top of neogit's Commit / PluginRun graph.