handbook icon indicating copy to clipboard operation
handbook copied to clipboard

Website with tutorials, specification, info and learn sections of p2panda

p2:panda_face:

p2panda is a user-friendly peer-to-peer communications protocol for secure, energy-efficient, offline- and local-first web, mobile and desktop applications. We want this protocol to be a playful tool for people to hack, build, play, and experiment with.

Data changes in p2panda are signed, encrypted and published by clients using the Bamboo append-only log data type which gets distributed over the network to other peers. p2panda allows for decentralised and federated network topologies or even hybrids of these and aims at running in web browsers without losing its cryptographic features.

p2panda is currently very much in prototyping and specification phase, our milestones and progress can be seen below. If you're interested in any of these topics please get in touch!

Topics we're interested in

  • Browser friendliness: Lightweight clients that can easily be implemented as websites.
  • Collaboration: Data can be changed by multiple users at the same time with built-in CRDTs.
  • Decentralization: Networks consist of both federated or decentralised nodes.
  • Deletion: Data can be deleted without losing verifiability and log integrity.
  • Encryption: Transport communication is end-to-end encrypted via TLS 1.3, data is encrypted for groups via the Messaging Layer Security (MLS) protocol.
  • Energy efficiency: Data- and energy-efficient storage and replication.
  • Fork proof: Automatic detection of accidentially or maliciously forked append-only logs.
  • Identities: A user account model that gives people options for managing one or multiple online identities across devices.
  • Integrity: Authorship of all published data can be verified through signatures.
  • Local- & offline first: Access to online services without reliable and performant internet infrastructure. Independence from the corporate cloud.
  • Low-power electronics: Useable on low power devices.
  • Moderation: Decentralised content moderation for users and groups.
  • Partial replication: Nodes do not need to download the whole log to verify them.
  • Schemas: User data is stored in published, versioned data schemas so data can be reliably accessed across services.
  • Warmth: Computers make it easy to get carried away by their rigidly structured ways. However, every computer also contains an undeniable spark of pure chaos. We want to capture that spark to ignite a campfire for you to gather around and get cosy.

Background

p2panda emerged out of activities around the self-curated zine BLATT 3000 (2014) and subsequent festivals VERANTWORTUNG 3000 (2016) and HOFFNUNG 3000 (2017), the latter of these being the catalyst for building a custom platform designed to help communities organise in a decentralised manner, also called HOFFNUNG 3000.

While exploring building a p2p festival platform we met many people from the communities around Secure Scuttlebutt, DAT / Hypercore, Cabal, Chaos Computer Club, Fediverse, Antiuniversity Now, Pixelache trying to understand how this technology affects the way we organise ourselves.

p2panda - サービス!サービス!

サービス!サービス!

This led to a group of people interested in realising a protocol for p2p communication, which ultimately should serve as a tool to build applications, like a festival tool and more. We've been meeting regularly on Mondays since 2019 to hack p2panda and have recently reached the point where we have a publicly running demo project. We have also been active in some other projects including the Liebe Chaos Verein, organising a p2p gathering and a reading group in Berlin. Obviously we're still going to organise another festival sometime :panda_face:.

Overview

These libraries and applications are current work-in-progress reference implementations. See the Milestones below for current progress status.

Libraries

  • p2panda: Provides tools to write a client for the p2panda network. It is shipped both as a Rust crate p2panda-rs with WebAssembly bindings and a NPM package p2panda-js with TypeScript definitions running in NodeJS or any modern web browser.

Nodes

  • aquadoggo: GraphQL node server for the p2panda network running as a standalone application or Rust aquadoggo crate.

Clients

  • zoo-adventures: "Connect Four" Game. See it live under: https://p2panda.org
  • fishyfish: Command line interface to manage p2panda nodes.

Milestones

The past

  • [x] Ed25519 key pair generation and handling
  • [x] Bamboo Entry creation
  • [x] Entry signing and validation
  • [x] SQLite / PostgreSQL support for data storage
  • [x] WebAssembly support in the browser
  • [x] aquadoggo HTTP and WebSocket API
  • [x] Publish first v0.1.0 p2panda-rs crate and p2panda-js npm package
  • [x] Operation specification, creation and validation
  • [x] CBOR encoding and basic CDDL validation of messages
  • [x] Experimental chat demo application
  • [x] Embed aquadoggo library in Tauri container
  • [x] Stabilize p2panda-js API, release 0.2.0
  • [x] Publish aquadoggo crate 0.1.0
  • [x] bamboo-rs-ed25519-yasmf crate published
  • [x] Use YASMF hashes in p2panda-rs and p2panda-js
  • [x] Materialisation of data from operations
  • [x] Schemas describing the format of operations
  • [x] OpenMLS group encryption capabilities in p2panda-rs
  • [x] Schema migrations
  • [x] Multi-writer materialisation in aquadoggo
  • [x] Implement System Schemas in aquadoggo
  • [x] Implement Application Schemas in aquadoggo
  • [x] Basic replication protocol
  • [x] Manually follow other nodes
  • [x] p2panda first draft specification
  • [x] Dynamic GraphQL API to query data
  • [x] Schemas- and data validation

Now

  • [ ] p2panda specification 1.0 release :panda_face:

The future

  • [ ] Shared identities with KeyGroup in p2panda-rs
  • [ ] Multi-writer permissions in aquadoggo
  • [ ] Transport encryption between nodes via TLS 1.3
  • [ ] Automatic local discovery via mDNS
  • [ ] Schema backwards compatibility via lenses
  • [ ] Automatic internet discovery via signalling servers
  • [ ] Efficient replication protocol
  • [ ] Automatic deletion of unused data ("Garbage Collection")
  • [ ] Automatic detection of forked logs

How to contribute

  • We meet every Monday at 19:00 CET, for coding and planning, drop us a message if you would like to join.
  • Join our chat channel #p2panda: https://wald.liebechaos.org/channel/p2panda
  • Here you can find our meeting notes: https://wolke.liebechaos.org/s/oEErg5TMqZM9HB6
  • Check out our issues, PRs and source code on GitHub: https://github.com/p2panda

Further links

License

CC-BY-SA-4.0 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