fkettelhoit / assemblagedb

Distributed Document/Graph DB for Connected Pages & Documents

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Distributed Document/Graph DB for Connected Pages

AssemblageDB is a transactional high-level database for connected webs of pages, notes, texts and other media. Think of it like a personal web, but easily editable, with more connections and better navigation than the web. It is high-level in the sense that it defines a document model similar to HTML but vastly simpler and with graph-like 2-way links instead of tree-like 1-way jump links. The data model is both:

  • document-oriented: supports nested documents without a fixed schema
  • graph-based: documents can have multiple parents and form a directed, possibly cyclic graph

Features

  • versioned: old values remain accessible until merged
  • transactional: snapshots are isolated through MVCC
  • storage-agnostic: supports native (files) and wasm (IndexedDB) targets
  • indexed: maintains an automatic index for similarity/overlap search
  • distributed: nodes can be published/subscribed as remote broadcasts

Components

AssemblageDB is the core of the project, a document-graph DB built on top of the AssemblageKV store and exposed to a web frontend (not in this repo) using the Assemblage View linearized view model. AssemblageDB nodes can be broadcast and persisted in the cloud using the Assemblage Broadcast service.

The best place to get an understanding of the whole system is probably AssemblageDB and its document-graph data model, followed by Assemblage View's view model. The former is deliberately open and graph-like at the cost of being quite abstract, with the latter as a concrete view that displays a single linear path in the DB graph and injects all connections to other nodes as branches into the view.

+=======================+
| Web Frontend          | (Typescript/React)
+===========+===========+
            |
+===========+===========+
| Assemblage View       |
+-----------------------+                 +======================+
| AssemblageDB          | <~~ pub/sub ~~> | Assemblage Broadcast |
+-----------------------+                 +======================+
| AssemblageKV          |
+===========+===========+
            |
+===========+===========+
| File IO   | IndexedDB |
+=======================+

Why?

AssemblageDB is an attempt to reimagine and prototype a different vision of the web in general and of connected and overlapping documents/pages/media in particular. It works similar to a wiki, shares a few similarities with Ted Nelson's Xanadu and ZigZag, but more importantly grew out of a hypertext system for Wittgenstein's philosophical Nachlass, a philosophical corpus of 20.000 pages with a strikingly non-linear structure and way of thinking. It is also vaguely inspired by Deleuze & Guattari's concept of the Rhizome and McLuhan's media theory with its notion of acoustic space. At the risk of rambling on pretentiously and pseudo-philosophically, one of the aims of this project is to explore how certain theoretical ideas about non-linear structure can be cast into software and used practically.

About

Distributed Document/Graph DB for Connected Pages & Documents

License:GNU Affero General Public License v3.0


Languages

Language:Rust 99.9%Language:JavaScript 0.1%