Skip to content
Brian Marco edited this page Jan 15, 2018 · 8 revisions

Welcome to the Datsys wiki!

!!!: current symmetric branch for datsys is one behind datsync. working on the update now.

Roadmap

This software is very much in alpha state, hopefully this will change in the near future. Currently the code base contains too much and we are in the process of simplifying.

There's obviously also a ton smaller things that need to be done and fixed, and you can take a look at project issues for those. But the following is a very big picture overview of some of the more major things we'd like to accomplish with the system and the current state of the system.

Overall Design Heuristics

  • Move away from protocols and towards spec
  • Move away from multi-methods and towards onyx compute graphs using plain functions
  • Use async chans for side effects, onyx for purity

Datsys

Datsys is for stitching together the other dat projects into a unified whole.

Usage

git clone -b dev-merging https://github.com/metasoarous/datsys.git

cd datsys

lein new datsys testapp

cd testapp

lein repl

(run)

Note: Not currently working (reset)

Note: Currently you have to manually add checkouts for https://github.com/bamarco/conformity and https://github.com/bamarco/datscript. We are currently trying to remove those depencdencies.

Future Work

  • Documentation
  • More example apps
  • System Componentization of server, similar to what we've done for client: Going to be a little more challenging here since the flow of data is a bit more complicated, and scalability more of a concern. But we should still be able to come up with some nice abstractions so folks can switch out different implementations.
  • Generative testing (based on specs)
  • Arachne plugin?

Branches

  • dev-merging - (USE THIS ONE) combination of the lein template and the symmetric branch. we are still working out bugs and refactoring befor merging back to dev and eventually master.
  • master - this branch is way behind development. not really useful if you are trying to contribute
  • dev - also way behind development. not really useful if you are trying to contribute
  • symmetric - has been merged into the dev-merging branch. this uses the symmetric branches of the other dat.* projects

Datsync

Datsync is for communications between the client and server (eventually peers). It coordinates transactions and publication/subscription.

Branches

  • symmetric - (USE THIS ONE) this version is combining server.clj and client.cljs into a single core.cljc file. core.cljc is messy and has been through rounds and rounds of refactoring. server.clj and client.cljs are deprecated and will be replaced with core.cljc. Multimethods are slowly being replaced by onyx compute graphs using the onyx local runtime. Onyx will serve the role that interceptors do in re-frame as well as providing infrastructure to later accomplish peering and optimistic updates. The sente implementation has been changed heavily and is a bit of a mess. The wire protocol is the most recent version of usage, but will also be replaced by a spec of some kind.
  • master - behind
  • dev - behind

Future work:

  • Security and scoping filters (+ posh query exports for automated scoping)
  • Offline availability
  • Entity validations
  • Onyx distribution
  • Long term:
    • P2P (non-centralized) distribution/sharing (perhaps via CRDTs or CVDCS)
    • Log history plugins

Datreactor

Datreactor is for managing events and side-effects. This project may be cut entirely and is in a high state of flux.

Branches

  • symmetric - USE THIS ONE this version has onyx.cljc which will be replacing most if not all of the rest of the repository. It is possible that parts of onyx.cljc will be replaced by or moved into onyx-sim

Datspec

The protocols, utils, and specs that the rest of the system uses. This is in a high state of flux and contains a lot of information which is outdated or incorrect. Be wary here.

Branches

  • symmetric - (USE THIS ONE)

Datview

Datview is for the user interface. This is still very experimental and about to undertake a complete rewrite as we move from multimethods to onyx. It is still unclear how we will wrap the onyx fns so much of the current registration architecture may or may not remain in the next version.

Branches

  • symmetric - (USE THIS ONE)

Future work:

  • Use onyx-sim to make ui declaration more flexible, interactive, and debuggable.
  • Finish setting up default context hooks/implementations.
  • Build out more default control widgets and clean way of grouping them.
  • Documentation
  • Package together some example widgets (as context multimethod implementations).
  • Datspec
    • Add Clojure spec hotness to abstract architectural descriptions :-) (and generally spec rest of project(s) as well)

Navigation is to your right under Pages.

Please also see