aquadoggo
Embeddable p2panda network node
`aquadoggo` is a reference node implementation for [p2panda](https://p2panda.org). It is a intended as a tool for making the design and build of local-first, collaborative p2p applications as simple as possible, and hopefully even a little fun!
`aquadoggo` can run both on your own device for local-first applications, or on a public server when acting as shared community infrastructure. Nodes like `aquadoggo` perform a number of tasks ranging from core p2panda data replication and validation, aiding the discovery and establishment of connections between edge peers, and exposing a developer friendly API used for building applications.
> 📖 Read more about nodes in our [learn](https://p2panda.org/learn/networks) section
> 🐬 Visit the main repo [README](https://github.com/p2panda/aquadoggo) for more general info
## Features
- Awaits signed operations from clients via GraphQL.
- Verifies the consistency, format and signature of operations and rejects invalid ones.
- Stores operations of the network in an SQL database of your choice (SQLite, PostgreSQL).
- Materializes views on top of the known data.
- Answers filtered, sorted and paginated data queries via GraphQL.
- Discovers other nodes in local network and internet.
- Establishes peer-to-peer connections via UDP holepunching or via relays.
- Replicates data efficiently with other nodes.
## Installation
For using `aquadoggo` in your Rust project, you can add it as a dependency with the following command:
```bash
cargo add aquadoggo
```
## Example
Run the node directly next to the frontend you're building for full peer-to-peer applications. Check out our [Tauri](https://github.com/p2panda/tauri-example) example for writing a desktop app.
```rust,ignore
use aquadoggo::{Configuration, Node};
use p2panda_rs::identity::KeyPair;
let config = Configuration::default();
let key_pair = KeyPair::new();
let node = Node::start(key_pair, config).await;
```
### FFI bindings
If you are not working with Rust you can create FFI bindings from the `aquadoggo` crate into your preferred programming language. Dealing with FFI bindings can be a bit cumbersome and we do not have much prepared for you (yet), but check out our [Meli](https://github.com/p2panda/meli/) Android project as an example on how we dealt with FFI bindings for Dart / Flutter.
### Command line application
Check out our [Releases](/releases) section where we publish binaries for Linux, RaspberryPi, MacOS and Windows.
## Development
The Protocol Buffers compiler must be installed in order to compile aquadoggo.
On a Debian-based OS run:
```bash
$ sudo apt install -y protobuf-compiler
```
See the [installation documentation](https://grpc.io/docs/protoc-installation/) for more options.
## License
GNU Affero General Public License v3.0 [`AGPL-3.0-or-later`](LICENSE)
## Supported by
*This project has received funding from the European Union’s Horizon 2020
research and innovation programme within the framework of the NGI-POINTER
Project funded under grant agreement No 871528 and NGI-ASSURE No 957073*