exocore
v0.1.26
Published
[![codecov](https://codecov.io/gh/appaquet/exocore/branch/master/graph/badge.svg?token=OKZAHfPlaP)](https://codecov.io/gh/appaquet/exocore) [![Build](https://github.com/appaquet/exocore/actions/workflows/push-tester.yml/badge.svg)](https://github.com/appa
Downloads
165
Readme
Exocore
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)
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
- Install using rustup
- Install
clippy
andrustfmt
:rustup component add clippy rustfmt
- On MacOS:
brew install capnp
- On Ubuntu:
apt install capnproto
- On MacOS:
- On MacOS:
brew install protobuf swift-protobuf
- On Ubuntu:
apt install protobuf-compiler
- On MacOS:
Usage & configuration
CLI:
./tools/install.sh
orcd 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.
- Most commands require a node configuration file, for which an example can be found here: [
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
- Node 1:
Join the example web client
Install & run Exomind
- See Exomind README
Clients
Web
C
- See C client README