Skip to content

sonwh98/datomworld

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

665 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

datom.world

A world built on datoms

datom.world is a multi-platform system built on datoms and streams. It treats all computation as stream processing, where functions consume and produce streams of datoms.

Datoms are immutable tuples in an open moduli space, graded by dimension n. The vocabulary of dimensions is open: applications declare new dimensions as needed. The canonical persistent fact is the 5-tuple [e a v t m] (entity, attribute, value, transaction, metadata), known as d5. Shorter projections — [v] (d1, content-addressed blobs) and [s a v] (d3, RDF-style triples) — serve as universal floors: d1 for content addressing, d3 for semantic interpretability of fact-shaped data.

Core components:

  • Yang: Compiler frontend that transforms source code (Clojure/Python/PHP) into Universal AST datoms
  • Yin VM: Family of CESK continuation machines (stack‑based, register‑based, semantic) that execute projections of the Universal AST
  • DaoDB: Persistent datom store with Datalog queries over indexed datom streams
  • DaoStream: Stream transport foundation modeling all IO as streams
  • DaoSpace: Tuple space for stigmergic coordination via shared datom streams
  • PostGraphics: A backend-neutral graphics frame vocabulary plus a reference Flutter terminal. Producers emit frame programs as data; terminals interpret them as drawing.
  • Shibi: Capability tokens for authentication and authorization in stream descriptors

Philosophy: Everything is data, everything is a stream. Functions are interpreters that consume streams (often datoms) and transform them into higher‑dimensional structures. Structure emerges from constraints, not global ontologies. Graphs are constructed from tuples, not assumed.

Live Demo

Try the live demo at https://datom.world/demo.html

Development Prerequisites

This project uses mise to manage development tools.

To install the required versions of Java, Clojure, Node.js, and Flutter, run:

mise install

Development

Start the browser demo build:

clj -M:cljs -m shadow.cljs.devtools.cli watch demo

or open a CLJ REPL and start the build from there:

clj -M:cljs -m shadow.cljs.devtools.cli clj-repl
shadow.user=> (shadow/watch :demo)

Start a CLJS REPL:

clj -M:cljs -m shadow.cljs.devtools.cli cljs-repl demo
cljs.user=> (js/alert 1)

Open http://localhost:9000 (or try the live demo at https://datom.world/demo.html)

Testing

Clojure (JVM)

Run the unit tests for the Clojure backend:

clj -M:test

ClojureScript (Node.js)

Compile and run the tests for the frontend/CLJS logic using the Clojure CLI:

clj -M:cljs -m shadow.cljs.devtools.cli compile test && node target/node-tests.js

Yin REPL

Launch the interactive Yin REPL to experiment with the Yin VM and manipulate datoms directly.

Clojure (JVM)

clj -M:yin-repl

ClojureScript (Node.js)

First, compile the ClojureScript source to a Node.js script:

clj -M:cljs -m shadow.cljs.devtools.cli compile yin-repl

Then, run the compiled script:

node target/yin-repl.js

ClojureDart (cljd)

The ClojureDart source for the Yin REPL is located in src/cljd/yin/repl_main/cljd.cljd.

Compile the ClojureDart namespace to Dart:

clj -M:cljd compile yin.repl-main.cljd

Then run the generated Dart entry point:

dart run bin/yin_repl_main.dart

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors