#networking #mobile #webassembly #storage #database

app exo

CLI for Exocore (Distributed applications framework)

15 releases

new 0.1.15 Oct 16, 2021
0.1.13 Aug 20, 2021
0.1.11 Jul 30, 2021
0.1.3 Feb 7, 2021
0.1.0 Jan 16, 2020

#20 in WebAssembly

Download history 4/week @ 2021-06-29 15/week @ 2021-07-06 3/week @ 2021-07-13 45/week @ 2021-07-20 29/week @ 2021-07-27 29/week @ 2021-08-03 40/week @ 2021-08-10 18/week @ 2021-08-17 2/week @ 2021-08-24 3/week @ 2021-08-31 1/week @ 2021-09-07 24/week @ 2021-09-14 17/week @ 2021-09-21 5/week @ 2021-09-28 26/week @ 2021-10-12

74 downloads per month

Apache-2.0

2MB
38K 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

~20–28MB
~551K SLoC