4 releases (breaking)

0.5.0 Aug 31, 2023
0.4.0 Sep 7, 2022
0.3.0 Jul 1, 2022
0.1.0 Oct 25, 2021

#291 in Database interfaces

26 downloads per month


21K SLoC


Embeddable p2panda network node

aquadoggo is a reference node implementation for p2panda. 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 section
🐬 Visit the main repo README for more general info


  • 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.


For using aquadoggo in your Rust project, you can add it as a dependency with the following command:

cargo add aquadoggo


Run the node directly next to the frontend you're building for full peer-to-peer applications. Check out our Tauri example for writing a desktop app.

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 Android project as an example on how we dealt with FFI bindings for Dart / Flutter.

Command line application

Check out our Releases section where we publish binaries for Linux, RaspberryPi, MacOS and Windows.


The Protocol Buffers compiler must be installed in order to compile aquadoggo.

On a Debian-based OS run:

$ sudo apt install -y protobuf-compiler

See the installation documentation for more options.


GNU Affero General Public License v3.0 AGPL-3.0-or-later

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


~2M SLoC