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)
- 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.)
- 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
-
- 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:
-
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: [
-
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:
- See Exomind README
- See C client README