#distributed-applications #mobile #storage #database #networking


Protobuf and cap'n protos of Exocore (Distributed applications framework)

22 releases

0.1.25 May 22, 2023
0.1.24 Oct 12, 2022
0.1.23 Aug 9, 2022
0.1.22 Jun 28, 2022
0.1.11 Jul 30, 2021

#1211 in WebAssembly

Download history 82/week @ 2023-12-13 98/week @ 2023-12-20 103/week @ 2023-12-27 41/week @ 2024-01-03 28/week @ 2024-01-10 69/week @ 2024-01-17 118/week @ 2024-01-24 58/week @ 2024-01-31 47/week @ 2024-02-07 89/week @ 2024-02-14 120/week @ 2024-02-21 134/week @ 2024-02-28 66/week @ 2024-03-06 88/week @ 2024-03-13 93/week @ 2024-03-20 70/week @ 2024-03-27

331 downloads per month
Used in 13 crates (8 directly)


7.5K SLoC


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 as 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 manage replication and storage by using a blockchain data structure.
  • Store nodes manage indexation, querying, and mutation of the data (collocated with chain node).
  • Application host nodes run applications written in WebAssembly (collocated with store nodes)


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


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

v0.3 and beyond

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


  • 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 require a node configuration file, for which an example can be found here: [./examples/node.yaml]. exo can also generate and manage configurations. See Quick start.
    • At a minimum, the config requires 2 keypairs: 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 as a chain and store node. This will use exocore's discovery server (disco.exocore.io) to exchange configurations:

      exo -d ./node2 cell join --chain --store

      and copy the displayed discovery PIN.

  • On node 1:

    • Add node 2 to cell:

      exo -d ./node1 cell node add

      Paste node 2's discovery PIN and accept its join request.

  • Start both nodes:

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

Join the example web client

Install & run Exomind







~166K SLoC