Change start page and update intro

This commit is contained in:
Jacob Karlsson 2024-06-12 18:24:34 +02:00
parent 490df1b16c
commit c01b6458f1
3 changed files with 61 additions and 46 deletions

View File

@ -6,7 +6,7 @@ const darkCodeTheme = require('prism-react-renderer/themes/dracula');
/** @type {import('@docusaurus/types').Config} */ /** @type {import('@docusaurus/types').Config} */
const config = { const config = {
title: 'PZP Wiki', title: 'PZP',
tagline: 'A rad p2p protocol', tagline: 'A rad p2p protocol',
favicon: 'img/favicon.ico', favicon: 'img/favicon.ico',

View File

@ -5,25 +5,29 @@ sidebar_position: 1
# PZP Docs # PZP Docs
What is "PZP": What is "PZP":
- A local-first P2P protocol with 10 years of learnings baked in - A [local-first][local-first] P2P protocol with 10 years of learnings baked in
- Message formats + Message validation + RPC methods - Message formats + Message validation + RPC methods
- If scuttlebutt is :slightly_smiling_face: then pzp is :sunglasses: - If scuttlebutt is :slightly_smiling_face: then pzp is :sunglasses:
- No apps so far except for a [demo app][zooboard], but it's ready for developers to have fun with and hack on.
What it doesn't specify:
- Disk storage
## Features ## Features
- sig-chains - you know what the messages are - Peer to peer. PZP is designed in a way to avoid centralization of power.
- first class multi-device support - Low storage expectations. Expecting users to store large amounts of data makes adoption on phones and old devices hard, and eventually risks centralization and corporate takeover when only resource rich users or even companies have enough resources needed to keep the network running.
- partial replication (using lipmaa links) - Content/public-key adressed data. We try to avoid relying on DNS since that would put too much trust/pressure on single nodes.
- message deletion (can leave nothing, or only metadata) - Easy to use CRDT data structures like sets and dicts.
- [Local-first][local-first]
- No DHTs or other [singletons](https://handbook.scuttlebutt.nz/stories/design-challenge-avoid-centralization-and-singletons).
- First class multi-device and multi-app support. A user's account ID is independent of what keypair(s) they choose to use, so keypairs can be added and rotated.
- Partial replication using tangles (merkle-trees) and [lipmaa links][lipmaa].
- Message deletion (can leave nothing, or only metadata).
- Trust based (friend to friend) with a simple invite system.
### How PZP is different from SSB (Secure Scuttlebutt) ### How PZP is different from [SSB (Secure Scuttlebutt)][ssb]
- Storage is designed to not grow indefinitely. By default (of course overridable) an app's storage shouldn't go above 100MB. - Storage is designed to not grow indefinitely. By default (of course overridable) an app's storage shouldn't go above 100MB.
- Multi device/app support from the start. Every device/app has its own keypair. They're connected together into one identity using an Account tangle. The Account tangle's root message ID is the account's identifier. - Multi device/app support from the start. Every device/app has its own keypair. They're connected together into one identity using an Account tangle. The Account tangle's root message ID is the account's identifier.
- One account or even keypair can post messages concurrently (forking) without problem. Because there aren't linear feeds, everything is in tangles. - One account or even keypair can post messages concurrently (forking) without problem. Because there aren't linear feeds, everything is in tangles, including state updates like e.g. username changes.
- Deletion is possible. The data contents of a message is separate from the message metadata, and only the metadata + hash of the data is signed. - Deletion is possible. The data contents of a message is separate from the message metadata, and only the metadata + hash of the data is signed.
- When messages are getting signed they get serialized according to [RFC 8785](https://tools.ietf.org/html/rfc8785). - When messages are getting signed they get serialized according to [RFC 8785](https://tools.ietf.org/html/rfc8785).
- Easy to use invites - Easy to use invites
@ -57,6 +61,15 @@ There are 3 sorts of tangles:
- e.g. all the messages in a discussion - e.g. all the messages in a discussion
- e.g. all the messages in a shared shopping list - e.g. all the messages in a shared shopping list
All tangles have
- a root / root message
- an ID (the id of the root message of the tangle)
- have tangle-data for causal ordering
How the tangles differ
- the Account tangle has strict validation of messages (it is only valid to write to it if you've been given permission to)
- a Feed root is deterministic! (only inputs are accountId + domain)
### Account Tangle ### Account Tangle
The account tangle starts with a message which says "This key is allowed to author messages on behalf of this account, and add further keys". The account tangle starts with a message which says "This key is allowed to author messages on behalf of this account, and add further keys".
@ -73,30 +86,36 @@ _Domain Tangle, AccountDomain Tangle_
### Thread Tangle ### Thread Tangle
All tangles have TODO
- a root / root message
- an ID (the id of the root message of the tangle)
- have tangle-data for causal ordering
How the tangles differ ## Specifications
- the Account tangle has strict validation of messages (it is only valid to write to it if you've been given permission to)
- a Feed root is deterministic! (only inputs are accountId + domain) ### [Messages](https://codeberg.org/pzp/pzp-db/src/branch/master/protospec.md)
### [Replication](https://codeberg.org/pzp/pzp-sync/src/branch/master/protospec.md)
### [Invites](https://codeberg.org/pzp/pzp-invite/src/branch/master/protospec.md)
### [Sets](https://codeberg.org/pzp/pzp-set/src/branch/master/protospec.md)
### [Dicts](https://codeberg.org/pzp/pzp-dict/src/branch/master/protospec.md)
## Messages ## Further exploration
https://github.com/staltz/ppppp-db/blob/master/protospec.md ### Code
PZP is not ready for end users yet but it's stable enough for developers to have a fun time hacking with/on it. All the code is available [on codeberg](https://codeberg.org/pzp)
## RPC methods ### SDK
- [Replication](https://github.com/staltz/ppppp-sync/blob/master/protospec.md) We have [a simple SDK](https://codeberg.org/pzp/pzp-sdk) that helps you get started making PZP apps.
## Other ### Demo app
- [ppppp-invite](https://github.com/staltz/ppppp-invite/blob/master/protospec.md) [A demo app](https://codeberg.org/pzp/zooboard) demonstrating some PZP features. Take a look at the code for inspiration. Note that you probably have to be a developer to build and use it.
- [ppppp-set](https://github.com/staltz/ppppp-set/blob/master/protospec.md)
- [ppppp-dict](https://github.com/staltz/ppppp-dict/blob/master/protospec.md)
[local-first]: https://www.inkandswitch.com/local-first/
[lipmaa]: https://github.com/AljoschaMeyer/bamboo#links-and-entry-verification
[zooboard]: https://codeberg.org/pzp/zooboard
[ssb]: https://scuttlebutt.nz/

View File

@ -4,46 +4,42 @@ import styles from './styles.module.css';
const FeatureList = [ const FeatureList = [
{ {
title: 'Easy to Use', title: 'Code',
Svg: require('@site/static/img/undraw_docusaurus_mountain.svg').default,
description: ( description: (
<> <>
Docusaurus was designed from the ground up to be easily installed and PZP is not ready for end users yet but it's stable enough for developers to have a fun time hacking with/on it.
used to get your website up and running quickly.
</> </>
), ),
link: 'https://codeberg.org/pzp',
}, },
{ {
title: 'Focus on What Matters', title: 'SDK',
Svg: require('@site/static/img/undraw_docusaurus_tree.svg').default,
description: ( description: (
<> <>
Docusaurus lets you focus on your docs, and we&apos;ll do the chores. Go We have a simple SDK that helps you get started making PZP apps.
ahead and move your docs into the <code>docs</code> directory.
</> </>
), ),
link: 'https://codeberg.org/pzp/pzp-sdk',
}, },
{ {
title: 'Powered by React', title: 'Demo app',
Svg: require('@site/static/img/undraw_docusaurus_react.svg').default,
description: ( description: (
<> <>
Extend or customize your website layout by reusing React. Docusaurus can A demo app demonstrating some PZP features. Take a look at the code for inspiration. Note that you probably have to be a developer to build and use it.
be extended while reusing the same header and footer.
</> </>
), ),
link: 'https://codeberg.org/pzp/zooboard',
}, },
]; ];
function Feature({Svg, title, description}) { function Feature({title, description, link}) {
return ( return (
<div className={clsx('col col--4')}> <div className={clsx('col col--4')}>
<div className="text--center">
<Svg className={styles.featureSvg} role="img" />
</div>
<div className="text--center padding-horiz--md"> <div className="text--center padding-horiz--md">
<h3>{title}</h3> <a href={link} target='_blank' style={{color: 'var(--ifm-font-color-base)'}}>
<p>{description}</p> <h3>{title}</h3>
<p>{description}</p>
</a>
</div> </div>
</div> </div>
); );