#networking #mobile #webassembly #storage #database

exocore-store

Store / indexation layer of Exocore (Distributed applications framework)

14 releases

0.1.14 Sep 15, 2021
0.1.11 Jul 30, 2021
0.1.3 Feb 7, 2021
0.1.1 Dec 21, 2020

#137 in WebAssembly

Download history 38/week @ 2021-06-06 5/week @ 2021-06-13 43/week @ 2021-06-20 5/week @ 2021-06-27 44/week @ 2021-07-04 14/week @ 2021-07-11 13/week @ 2021-07-18 62/week @ 2021-07-25 28/week @ 2021-08-01 74/week @ 2021-08-08 65/week @ 2021-08-15 27/week @ 2021-08-22 46/week @ 2021-08-29 25/week @ 2021-09-05 205/week @ 2021-09-12 16/week @ 2021-09-19

172 downloads per month
Used in 7 crates (4 directly)

Apache-2.0

1MB
21K SLoC

Exocore

codecov Build

Warning: Exocore is at a very early development stage, hence incomplete, unstable and probably totally unsafe. Use at your own risk.

Exocore is a distributed applications framework with private and encrypted data storage. Think of it like an infrastructure that allows a user to own his own personal cloud that is extensible via WebAssembly applications and accessible via Web/Mobile/Backend SDKs. It is designed to be resilient to failures and will eventually allow offline usage (ex: on mobile).

Exocore is primarily built for Exomind, a personal knowledge management tool built in parallel to this project. Exocore is the application framework for Exomind.

The primary concept in Exocore is a Cell, which is a unique container for a user's applications and data.

A cell consists of:

  • Chain nodes managing replication and storage by using a blockchain data structure.
  • Store nodes managing indexation, querying and mutation of the data (collocated with chain node).
  • Application host nodes run applications written in WebAssembly (collocated with store nodes)

Roadmap

v0.1 (in progress)

  • Chain storage and replication: Proof of concept
  • Transport: Proof of concept
  • Entity store: Proof of concept
  • Applications (WASM host): Proof of concept

v0.2

  • Cell management (Configuration replication)
  • Enhanced security (Chain encryption, configuration signatures, etc.)

v0.3 and beyond

  • Android SDK
  • Blob storage (IPFS)
  • Offline support

Dependencies

  • Build dependencies

    • On MacOS: Install Xcode and command lines tools
    • On Ubuntu: apt install build-essential pkg-config libssl-dev
  • Rust

    • Install using rustup
    • Install clippy and rustfmt: rustup component add clippy rustfmt
  • Cap'n Proto

    • On MacOS: brew install capnp
    • On Ubuntu: apt install capnproto
  • Protobuf

    • On MacOS: brew install protobuf swift-protobuf
    • On Ubuntu: apt install protobuf-compiler

Usage & configuration

  • CLI:

    • ./tools/install.sh or cd exo && cargo install --path . or grab latest released binary.
  • Configuration

    • Most commands requires a node configuration file, for which an example can be found in here: [./examples/node.yaml]. exo can also generate and manage configurations. See Quick start.
    • At minimum, the config requires 2 keypair: one for the node, one for the cell.
    • The node keypair is unique per node, while the cell keypair is shared among servers that host the cell.
    • See Quick start section for example 2 nodes setup.

Quick start

Create a Cell hosted on 2 nodes

  • On node 1

    • Generate configuration:

      exo --dir ./node1 node init --name node1

    • Edit configuration to include unique and accessible addresses:

      exo -d ./node1 config edit

    • Generate a cell:

      exo -d ./node1 cell init --name my_cell

  • On node 2

    • Generate configuration:

      exo --dir ./node2 node init --name node1

    • Edit configuration to include unique and accessible addresses. If both nodes are running on the same machine, make sure they have unique ports.

      exo -d ./node2 config edit

    • Request to join the cell. This will use exocore's discovery server (disco.exocore.io), but this can overridden:

      exo -d ./node2 cell join

      and copy the displayed discovery PIN.

  • On node 1:

    • Add node 2 to cell:

      exo -d ./node1 cell node add --chain --store

      Paste node 2's discovery PIN.

  • Start both nodes:

    • Node 1: exo -d ./node1 daemon
    • Node 2: exo -d ./node2 daemon

Join the example web client

Install & run Exomind

Clients

Web

C

iOS

Documentation

Dependencies

~5–13MB
~243K SLoC