pzp-wiki/guide/intro/index.html

17 lines
20 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html>
<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-intro">
<head>
<meta charset="UTF-8">
<meta name="generator" content="Docusaurus v2.4.1">
<title data-rh="true">PZP Docs | PZP Wiki</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://pzp.wiki/img/docusaurus-social-card.jpg"><meta data-rh="true" name="twitter:image" content="https://pzp.wiki/img/docusaurus-social-card.jpg"><meta data-rh="true" property="og:url" content="https://pzp.wiki/guide/intro"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="PZP Docs | PZP Wiki"><meta data-rh="true" name="description" content="What is &quot;PZP&quot;:"><meta data-rh="true" property="og:description" content="What is &quot;PZP&quot;:"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://pzp.wiki/guide/intro"><link data-rh="true" rel="alternate" href="https://pzp.wiki/guide/intro" hreflang="en"><link data-rh="true" rel="alternate" href="https://pzp.wiki/guide/intro" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="PZP Wiki RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="PZP Wiki Atom Feed"><link rel="stylesheet" href="/assets/css/styles.c52b59fd.css">
<link rel="preload" href="/assets/js/runtime~main.891fd127.js" as="script">
<link rel="preload" href="/assets/js/main.fb9073d5.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/logo.svg" alt="My Site Logo" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/logo.svg" alt="My Site Logo" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">PZP Wiki</b></a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/guide/intro">Guide</a><a class="navbar__item navbar__link" href="/blog">Blog</a></div><div class="navbar__items navbar__items--right"><a href="https://codeberg.org/pzp" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">Code<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebarViewport_Xe31"><div class="sidebar_njMd"><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" href="/guide/intro">PZP Docs</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist" aria-expanded="false" href="/guide/category/philosophy">Philosophy</a><button aria-label="Toggle the collapsible sidebar category &#x27;Philosophy&#x27;" type="button" class="clean-btn menu__caret"></button></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist" aria-expanded="false" href="/guide/category/concepts">Concepts</a><button aria-label="Toggle the collapsible sidebar category &#x27;Concepts&#x27;" type="button" class="clean-btn menu__caret"></button></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist" aria-expanded="false" href="/guide/category/tutorial---basics">Tutorial - Basics</a><button aria-label="Toggle the collapsible sidebar category &#x27;Tutorial - Basics&#x27;" type="button" class="clean-btn menu__caret"></button></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist" aria-expanded="false" href="/guide/category/tutorial---extras">Tutorial - Extras</a><button aria-label="Toggle the collapsible sidebar category &#x27;Tutorial - Extras&#x27;" type="button" class="clean-btn menu__caret"></button></div></li></ul></nav></div></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_YNFT"><path d="M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z" fill="currentColor"></path></svg></a></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">PZP Docs</span><meta itemprop="position" content="1"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><h1>PZP Docs</h1><p>What is &quot;PZP&quot;:</p><ul><li>A local-first P2P protocol with 10 years of learnings baked in</li><li>Message formats + Message validation + RPC methods</li><li>If scuttlebutt is 🙂 then pzp is 😎 </li></ul><p>What it doesn&#x27;t specify:</p><ul><li>Disk storage</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="features">Features<a href="#features" class="hash-link" aria-label="Direct link to Features" title="Direct link to Features"></a></h2><ul><li>sig-chains - you know what the messages are</li><li>first class multi-device support</li><li>partial replication (using lipmaa links)</li><li>message deletion (can leave nothing, or only metadata)</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="how-pzp-is-different-from-ssb-secure-scuttlebutt">How PZP is different from SSB (Secure Scuttlebutt)<a href="#how-pzp-is-different-from-ssb-secure-scuttlebutt" class="hash-link" aria-label="Direct link to How PZP is different from SSB (Secure Scuttlebutt)" title="Direct link to How PZP is different from SSB (Secure Scuttlebutt)"></a></h3><ul><li>Storage is designed to not grow indefinitely. By default (of course overridable) an app&#x27;s storage shouldn&#x27;t go above 100MB.</li><li>Multi device/app support from the start. Every device/app has its own keypair. They&#x27;re connected together into one identity using an Account tangle. The Account tangle&#x27;s root message ID is the account&#x27;s identifier.</li><li>One account or even keypair can post messages concurrently (forking) without problem. Because there aren&#x27;t linear feeds, everything is in tangles.</li><li>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.</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="how-pzp-is-different-from-nostr">How PZP is different from Nostr<a href="#how-pzp-is-different-from-nostr" class="hash-link" aria-label="Direct link to How PZP is different from Nostr" title="Direct link to How PZP is different from Nostr"></a></h3><ul><li>keys are not shared across devices</li><li>sig-chains - you know if you&#x27;re missing content in PZP</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="tangles">Tangles<a href="#tangles" class="hash-link" aria-label="Direct link to Tangles" title="Direct link to Tangles"></a></h2><p>Tangles control how messages are organised. They provide a way to group, and causally sort (partially), which is important for replication.</p><p>Basics of tangles in PZP: it&#x27;s a directed acyclic graph (DAG) which aims to be as linear as possible</p><p>There are 3 sorts of tangles:</p><ul><li>Account - a tangle which weaves (device) keys and defines capabilities / permissions of these</li><li>Feed - a tangle where all messages are from valid devices (as defined by an Account), and scoped to a particular domain<ul><li>e.g. all post messages from &quot;mix&quot;</li><li>e.g. all chess messages from &quot;happy0&quot;</li></ul></li><li>Thread - a tangle where multiple Accounts are collaborating on some state<ul><li>e.g. all the messages making up a &quot;10th birthday gathering&quot;</li><li>e.g. all the messages in a discussion</li><li>e.g. all the messages in a shared shopping list</li></ul></li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="account-tangle">Account Tangle<a href="#account-tangle" class="hash-link" aria-label="Direct link to Account Tangle" title="Direct link to Account Tangle"></a></h3><p>The account tangle starts with a message which says &quot;This key is allowed to author messages on behalf of this account, and add further keys&quot;.</p><p>Subsequent messages in this tangle may add / remove capabilities for existing / new keys.</p><p>Messages in this tangle are verified by checking state they&#x27;re extending on</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="feed-tangle">Feed Tangle<a href="#feed-tangle" class="hash-link" aria-label="Direct link to Feed Tangle" title="Direct link to Feed Tangle"></a></h3><p><em>Domain Tangle, AccountDomain Tangle</em></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="thread-tangle">Thread Tangle<a href="#thread-tangle" class="hash-link" aria-label="Direct link to Thread Tangle" title="Direct link to Thread Tangle"></a></h3><p>All tangles have</p><ul><li>a root / root message</li><li>an ID (the id of the root message of the tangle)</li><li>have tangle-data for causal ordering</li></ul><p>How the tangles differ</p><ul><li>the Account tangle has strict validation of messages (it is only valid to write to it if you&#x27;ve been given permission to)</li><li>a Feed root is deterministic! (only inputs are accountId + domain)</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="messages">Messages<a href="#messages" class="hash-link" aria-label="Direct link to Messages" title="Direct link to Messages"></a></h2><p><a href="https://github.com/staltz/ppppp-db/blob/master/protospec.md" target="_blank" rel="noopener noreferrer">https://github.com/staltz/ppppp-db/blob/master/protospec.md</a></p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="rpc-methods">RPC methods<a href="#rpc-methods" class="hash-link" aria-label="Direct link to RPC methods" title="Direct link to RPC methods"></a></h2><ul><li><a href="https://github.com/staltz/ppppp-sync/blob/master/protospec.md" target="_blank" rel="noopener noreferrer">Replication</a></li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="other">Other<a href="#other" class="hash-link" aria-label="Direct link to Other" title="Direct link to Other"></a></h2><ul><li><p><a href="https://github.com/staltz/ppppp-invite/blob/master/protospec.md" target="_blank" rel="noopener noreferrer">ppppp-invite</a></p></li><li><p><a href="https://github.com/staltz/ppppp-set/blob/master/protospec.md" target="_blank" rel="noopener noreferrer">ppppp-set</a></p></li><li><p><a href="https://github.com/staltz/ppppp-dict/blob/master/protospec.md" target="_blank" rel="noopener noreferrer">ppppp-dict</a></p></li></ul></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="theme-doc-footer-edit-meta-row row"><div class="col"><a href="https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/guide/intro.md" target="_blank" rel="noreferrer noopener" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit_Z9Sw" aria-hidden="true"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"></path></g></svg>Edit this page</a></div><div class="col lastUpdated_vwxv"></div></div></footer></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--next" href="/guide/category/philosophy"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Philosophy</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#features" class="table-of-contents__link toc-highlight">Features</a><ul><li><a href="#how-pzp-is-different-from-ssb-secure-scuttlebutt" class="table-of-contents__link toc-highlight">How PZP is different from SSB (Secure Scuttlebutt)</a></li><li><a href="#how-pzp-is-different-from-nostr" class="table-of-contents__link toc-highlight">How PZP is different from Nostr</a></li></ul></li><li><a href="#tangles" class="table-of-contents__link toc-highlight">Tangles</a><ul><li><a href="#account-tangle" class="table-of-contents__link toc-highlight">Account Tangle</a></li><li><a href="#feed-tangle" class="table-of-contents__link toc-highlight">Feed Tangle</a></li><li><a href="#thread-tangle" class="table-of-contents__link toc-highlight">Thread Tangle</a></li></ul></li><li><a href="#messages" class="table-of-contents__link toc-highlight">Messages</a></li><li><a href="#rpc-methods" class="table-of-contents__link toc-highlight">RPC methods</a></li><li><a href="#other" class="table-of-contents__link toc-highlight">Other</a></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Guide</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/guide/intro">Guide</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://stackoverflow.com/questions/tagged/docusaurus" target="_blank" rel="noopener noreferrer" class="footer__link-item">Stack Overflow<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://discordapp.com/invite/docusaurus" target="_blank" rel="noopener noreferrer" class="footer__link-item">Discord<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/docusaurus" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/blog">Blog</a></li><li class="footer__item"><a href="https://codeberg.org/pzp" target="_blank" rel="noopener noreferrer" class="footer__link-item">Code<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2024 My Project, Inc. Built with Docusaurus.</div></div></div></footer></div>
<script src="/assets/js/runtime~main.891fd127.js"></script>
<script src="/assets/js/main.fb9073d5.js"></script>
</body>
</html>