Rust implementation of NextGraph, a Decentralized and local-first web 3.0 ecosystem
https://nextgraph.org
byzantine-fault-tolerancecrdtsdappsdecentralizede2eeeventual-consistencyjson-ldlocal-firstmarkdownocapoffline-firstp2pp2p-networkprivacy-protectionrdfrich-text-editorself-hostedsemantic-websparqlweb3collaboration
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
188 lines
5.7 KiB
188 lines
5.7 KiB
4 months ago
|
# Contributors or compilation guide
|
||
|
|
||
|
- [Install Rust](https://www.rust-lang.org/tools/install) minimum required MSRV 1.74.0
|
||
|
- [Install Nodejs](https://nodejs.org/en/download/)
|
||
|
- [Install LLVM](https://rust-lang.github.io/rust-bindgen/requirements.html)
|
||
|
|
||
|
On openbsd, for LLVM you need to choose llvm-17.
|
||
|
|
||
|
until this [PR](https://github.com/rustwasm/wasm-pack/pull/1271) is accepted, will have to install wasm-pack this way:
|
||
|
|
||
|
```
|
||
|
cargo install wasm-pack --git https://github.com/rustwasm/wasm-pack.git --rev c2b663f25abe50631a236d57a8c6d7fd806413b2
|
||
|
```
|
||
|
|
||
|
then :
|
||
|
|
||
|
create a file called `nextgraph/src/local_broker_dev_env.rs` with the content :
|
||
|
|
||
|
```
|
||
|
pub const PEER_ID: &str = "FtdzuDYGewfXWdoPuXIPb0wnd0SAg1WoA2B14S7jW3MA";
|
||
|
```
|
||
|
|
||
|
once your ngd server will run in your dev env, replace the above string with the actual PEER ID of your ngd server.
|
||
|
|
||
|
```
|
||
|
cargo install cargo-watch
|
||
|
// optionally, if you want a Rust REPL: cargo install evcxr_repl
|
||
|
git clone git@git.nextgraph.org:NextGraph/nextgraph-rs.git
|
||
|
// or if you don't have a git account: git clone https://git.nextgraph.org/NextGraph/nextgraph-rs.git
|
||
|
cd nextgraph-rs
|
||
|
cargo build
|
||
|
```
|
||
|
|
||
|
### Packages
|
||
|
|
||
|
The crates are organized as follow :
|
||
|
|
||
|
- [nextgraph](nextgraph/README.md) : Client library. Use this crate to embed NextGraph client in your Rust application
|
||
|
- [ngcli](ngcli/README.md) : CLI tool to manipulate the local documents and repos and administrate the server
|
||
|
- [ngd](ngd/README.md) : binary executable of the daemon (that can run a broker, verifier and/or Rust services)
|
||
|
- [ng-app](ng-app/README.md) : all the native apps, based on Tauri, and the official web app.
|
||
|
- [ng-sdk-js](ng-sdk-js/DEV.md) : contains the JS SDK, with example for: web app, react app, or node service.
|
||
|
- ng-repo : Repositories common library
|
||
|
- ng-net : Network common library
|
||
|
- ng-oxigraph : Fork of OxiGraph. contains our CRDT of RDF
|
||
|
- ng-verifier : Verifier library, that exposes the document API to the app
|
||
|
- ng-wallet : keeps the secret keys of all identities of the user in a safe wallet
|
||
|
- ng-broker : Core and Server Broker library
|
||
|
- ng-client-ws : Websocket client library
|
||
|
- ng-storage-rocksdb : RocksDB backed stores. see also dependency [repo here](https://git.nextgraph.org/NextGraph/rust-rocksdb)
|
||
|
- ngone : server for nextgraph.one. helps user bootstrap into the right app. Not useful to you. Published here for transparency
|
||
|
- ngaccount : server for nextgraph's Broker Service Provider account manager. Not useful to you. Published here for transparency
|
||
|
|
||
|
### Run
|
||
|
|
||
|
Build & run debug executables:
|
||
|
|
||
|
```
|
||
|
// runs the daemon
|
||
|
cargo run --bin ngd
|
||
|
|
||
|
// runs the client
|
||
|
cargo run --bin ngcli
|
||
|
```
|
||
|
|
||
|
For the apps, see the [README](ng-app/README.md)
|
||
|
|
||
|
### Test
|
||
|
|
||
|
Please test by following this order (as we need to generate some files locally)
|
||
|
|
||
|
```
|
||
|
cargo test --package nextgraph -r --lib -- local_broker::test::gen_wallet_for_test --show-output --nocapture
|
||
|
cargo test -r
|
||
|
cargo test --package nextgraph -r --lib -- local_broker::test::import_session_for_test_to_disk --show-output --nocapture --ignored
|
||
|
```
|
||
|
|
||
|
Test a single crate:
|
||
|
|
||
|
```
|
||
|
cargo test --package ng-repo --lib -- --show-output --nocapture
|
||
|
cargo test --package ng-wallet --lib -- --show-output --nocapture
|
||
|
cargo test --package ng-verifier --lib -- --show-output --nocapture
|
||
|
cargo test --package ng-sdk-js --lib -- --show-output --nocapture
|
||
|
cargo test --package ng-broker --lib -- --show-output --nocapture
|
||
|
cargo test --package ng-client-ws --lib -- --show-output --nocapture
|
||
|
```
|
||
|
|
||
|
Test WASM websocket
|
||
|
|
||
|
First you need to install the `chromedriver` that matches your version of Chrome
|
||
|
|
||
|
https://googlechromelabs.github.io/chrome-for-testing/
|
||
|
|
||
|
then:
|
||
|
|
||
|
```
|
||
|
cd ng-sdk-js
|
||
|
wasm-pack test --chrome --headless
|
||
|
```
|
||
|
|
||
|
Test Rust websocket
|
||
|
|
||
|
```
|
||
|
cargo test --package ng-client-ws --lib -- remote_ws::test::test_ws --show-output --nocapture
|
||
|
```
|
||
|
|
||
|
### Build release binaries
|
||
|
|
||
|
First you will need to have the production build of the frontend.
|
||
|
If you do not want to setup a whole development environment for the frontend, you can use the precompiled release of the frontend available in `dist-file.tar.gz` that you can download from the release page.
|
||
|
|
||
|
```
|
||
|
cd ng-app
|
||
|
tar -xzf dist-file.tar.gz
|
||
|
cd ..
|
||
|
```
|
||
|
|
||
|
Otherwise, build from source the single-file release of ng-app
|
||
|
|
||
|
```
|
||
|
npm install -g pnpm
|
||
|
cd ng-sdk-js
|
||
|
wasm-pack build --target bundler
|
||
|
cd ../ng-app
|
||
|
pnpm install
|
||
|
pnpm webfilebuild
|
||
|
cd ..
|
||
|
```
|
||
|
|
||
|
then build the ngd daemon
|
||
|
|
||
|
```
|
||
|
cargo build -r -p ngd
|
||
|
```
|
||
|
|
||
|
you can then find the binary `ngd` in `target/release`
|
||
|
|
||
|
The CLI tool can be obtained with :
|
||
|
|
||
|
```
|
||
|
cargo build -r -p ngcli
|
||
|
```
|
||
|
|
||
|
you can then use the binary `target/release/ngcli`
|
||
|
|
||
|
For usage, see the documentation [here](ngd/README.md).
|
||
|
|
||
|
For building the apps, see this [documentation](ng-app/README.md).
|
||
|
|
||
|
#### OpenBSD
|
||
|
|
||
|
On OpenBSD, a conflict between the installed LibreSSL library and the reqwest crate, needs a bit of attention.
|
||
|
Before compiling the daemon for OpenBSD, please comment out lines 41-42 of `ng-net/Cargo.toml`. This will be solved soon by using `resolver = "2"`.
|
||
|
|
||
|
```
|
||
|
#[target.'cfg(target_arch = "wasm32")'.dependencies]
|
||
|
#reqwest = { version = "0.11.18", features = ["json","native-tls-vendored"] }
|
||
|
```
|
||
|
|
||
|
to use the app on OpenBSD, you need to run the daemon locally.
|
||
|
|
||
|
```
|
||
|
ngd -l 14400 --save-key
|
||
|
```
|
||
|
|
||
|
then open chrome (previously installed with `doas pkg_add chrome`)
|
||
|
|
||
|
```
|
||
|
env ENABLE_WASM=1 chrome --enable-wasm --process-per-site --new-window --app=http://localhost:14400
|
||
|
```
|
||
|
|
||
|
### Generate documentation
|
||
|
|
||
|
Generate documentation for all packages without their dependencies:
|
||
|
|
||
|
```
|
||
|
cargo doc --no-deps
|
||
|
```
|
||
|
|
||
|
The generated documentation can be found in `target/doc/nextgraph`.
|
||
|
|
||
|
### Contributions license
|
||
|
|
||
|
Unless you explicitly state otherwise, any contribution intentionally submitted
|
||
|
for inclusion in the work by you shall be dual licensed as below, without any
|
||
|
additional terms or conditions.
|