Skip to content

Wovin engine ​

INFO

TBD - this is a first overview

Our attempt at a way to deal with data - aligned with these ideas:

  • local-first - app & data should work autonomously. Independent of servers & platforms.
    • peer-to-peer - users & services should work together as simple and direct as possible
    • share at will - share only the data you want, only with whom you want to
  • flexible
    • different apps have different needs
    • even users using the same app might have differing requirements & style
    • transport data over various channels, store where & how you want to
  • hackable - the engine we develop will never suffice the needs & wants of everyone else
    • extensible - make it easy to add new data sources, formats & transformations
    • agnostic - make it easy for other apps to interpret & create data that can weave with others
    • open source - open data needs open source, everyone can customize & extend
    • it should be very easy to query & transform data
    • end-user programmable

How? ​

  • datalog-style
    • Extended EAV triple - a single data point is composed of Entity ID, Attribute name, Value, Agent ID, Timestamp and previous atom
    • this enables the most flexible view on data where different apps & users care about / contribute different attributes but can talk about / interact with the same entity
    • easily merge, split & transform data as needed
  • IPFS / IPLD - we (mainly) care about what data we want, not where from. Also, we want to verify & cache easily.
  • end-to-end encryption - if wanted, encrypt your data streams for intended recipients
  • In browser - most of the internet happens in browsers, so this is our first target

Tech-stack ​

Our current implementation is

  • alpha-stage
  • Typescript-based
  • using mobx for reactivity
    • all queries are instantly reactive to changes in the source streams - locally (we don't have realtime sync yet, only push/pull)
    • queries are broken down into computed functions, enabling other queries to re-use shared parts of the query (behaving like indices / materialized views) (TBD)
  • IndexDB for local-first storage
  • Web3.storage/NFT.storage as an easy first way to store data on IPFS.
    (more about storage)

Usage ​

For now, we don't have docs, just some examples.

Inspired by the lovely people at Fission