From 48db50364858e2e1b0533f9984c9c40ddfa013a7 Mon Sep 17 00:00:00 2001 From: Jacob Karlsson Date: Thu, 23 May 2024 17:24:51 +0200 Subject: [PATCH] Deploy website - based on 5814d903a55a4d0cf504f6a2ae4d9bdd640fc13f --- 404.html | 4 ++-- assets/js/{840787a5.efd72543.js => 840787a5.fc37b393.js} | 2 +- .../{runtime~main.891fd127.js => runtime~main.39477c2d.js} | 2 +- blog/archive/index.html | 4 ++-- blog/first-blog-post/index.html | 4 ++-- blog/index.html | 4 ++-- blog/long-blog-post/index.html | 4 ++-- blog/mdx-blog-post/index.html | 4 ++-- blog/tags/docusaurus/index.html | 4 ++-- blog/tags/facebook/index.html | 4 ++-- blog/tags/hello/index.html | 4 ++-- blog/tags/hola/index.html | 4 ++-- blog/tags/index.html | 4 ++-- blog/welcome/index.html | 4 ++-- guide/category/concepts/index.html | 4 ++-- guide/category/philosophy/index.html | 4 ++-- guide/category/tutorial---basics/index.html | 4 ++-- guide/category/tutorial---extras/index.html | 4 ++-- guide/concepts/feed/index.html | 4 ++-- guide/concepts/glossary/index.html | 4 ++-- guide/concepts/hub/index.html | 4 ++-- guide/concepts/invite/index.html | 4 ++-- guide/concepts/message/index.html | 4 ++-- guide/concepts/overview/index.html | 4 ++-- guide/concepts/peer/index.html | 4 ++-- guide/concepts/replication/index.html | 4 ++-- guide/intro/index.html | 6 +++--- guide/philosophy/app-friendly/index.html | 4 ++-- guide/philosophy/regenerative/index.html | 4 ++-- guide/philosophy/sufficiency/index.html | 4 ++-- guide/philosophy/villages/index.html | 4 ++-- guide/tutorial-basics/congratulations/index.html | 4 ++-- guide/tutorial-basics/create-a-blog-post/index.html | 4 ++-- guide/tutorial-basics/create-a-document/index.html | 4 ++-- guide/tutorial-basics/create-a-page/index.html | 4 ++-- guide/tutorial-basics/deploy-your-site/index.html | 4 ++-- guide/tutorial-basics/markdown-features/index.html | 4 ++-- guide/tutorial-extras/manage-docs-versions/index.html | 4 ++-- guide/tutorial-extras/translate-your-site/index.html | 4 ++-- index.html | 4 ++-- markdown-page/index.html | 4 ++-- 41 files changed, 81 insertions(+), 81 deletions(-) rename assets/js/{840787a5.efd72543.js => 840787a5.fc37b393.js} (55%) rename assets/js/{runtime~main.891fd127.js => runtime~main.39477c2d.js} (98%) diff --git a/404.html b/404.html index af4f838..4e88d85 100644 --- a/404.html +++ b/404.html @@ -5,13 +5,13 @@ Page Not Found | PZP Wiki - +
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

- + \ No newline at end of file diff --git a/assets/js/840787a5.efd72543.js b/assets/js/840787a5.fc37b393.js similarity index 55% rename from assets/js/840787a5.efd72543.js rename to assets/js/840787a5.fc37b393.js index b2608fc..478faae 100644 --- a/assets/js/840787a5.efd72543.js +++ b/assets/js/840787a5.fc37b393.js @@ -1 +1 @@ -"use strict";(self.webpackChunkpzp_wiki=self.webpackChunkpzp_wiki||[]).push([[2385],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>h});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var o=n.createContext({}),p=function(e){var t=n.useContext(o),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},u=function(e){var t=p(e.components);return n.createElement(o.Provider,{value:t},e.children)},c="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,l=e.originalType,o=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),c=p(a),d=r,h=c["".concat(o,".").concat(d)]||c[d]||m[d]||l;return a?n.createElement(h,i(i({ref:t},u),{},{components:a})):n.createElement(h,i({ref:t},u))}));function h(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=a.length,i=new Array(l);i[0]=d;var s={};for(var o in t)hasOwnProperty.call(t,o)&&(s[o]=t[o]);s.originalType=e,s[c]="string"==typeof e?e:r,i[1]=s;for(var p=2;p{a.r(t),a.d(t,{assets:()=>o,contentTitle:()=>i,default:()=>m,frontMatter:()=>l,metadata:()=>s,toc:()=>p});var n=a(7462),r=(a(7294),a(3905));const l={sidebar_position:1},i="PZP Docs",s={unversionedId:"intro",id:"intro",title:"PZP Docs",description:'What is "PZP":',source:"@site/guide/intro.md",sourceDirName:".",slug:"/intro",permalink:"/guide/intro",draft:!1,editUrl:"https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/guide/intro.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",next:{title:"Philosophy",permalink:"/guide/category/philosophy"}},o={},p=[{value:"Features",id:"features",level:2},{value:"How PZP is different from SSB (Secure Scuttlebutt)",id:"how-pzp-is-different-from-ssb-secure-scuttlebutt",level:3},{value:"How PZP is different from Nostr",id:"how-pzp-is-different-from-nostr",level:3},{value:"Tangles",id:"tangles",level:2},{value:"Account Tangle",id:"account-tangle",level:3},{value:"Feed Tangle",id:"feed-tangle",level:3},{value:"Thread Tangle",id:"thread-tangle",level:3},{value:"Messages",id:"messages",level:2},{value:"RPC methods",id:"rpc-methods",level:2},{value:"Other",id:"other",level:2}],u={toc:p},c="wrapper";function m(e){let{components:t,...a}=e;return(0,r.kt)(c,(0,n.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"pzp-docs"},"PZP Docs"),(0,r.kt)("p",null,'What is "PZP":'),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"A local-first P2P protocol with 10 years of learnings baked in"),(0,r.kt)("li",{parentName:"ul"},"Message formats + Message validation + RPC methods"),(0,r.kt)("li",{parentName:"ul"},"If scuttlebutt is \ud83d\ude42 then pzp is \ud83d\ude0e ")),(0,r.kt)("p",null,"What it doesn't specify:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Disk storage")),(0,r.kt)("h2",{id:"features"},"Features"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"sig-chains - you know what the messages are"),(0,r.kt)("li",{parentName:"ul"},"first class multi-device support"),(0,r.kt)("li",{parentName:"ul"},"partial replication (using lipmaa links)"),(0,r.kt)("li",{parentName:"ul"},"message deletion (can leave nothing, or only metadata)")),(0,r.kt)("h3",{id:"how-pzp-is-different-from-ssb-secure-scuttlebutt"},"How PZP is different from SSB (Secure Scuttlebutt)"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Storage is designed to not grow indefinitely. By default (of course overridable) an app's storage shouldn't go above 100MB."),(0,r.kt)("li",{parentName:"ul"},"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."),(0,r.kt)("li",{parentName:"ul"},"One account or even keypair can post messages concurrently (forking) without problem. Because there aren't linear feeds, everything is in tangles."),(0,r.kt)("li",{parentName:"ul"},"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.")),(0,r.kt)("h3",{id:"how-pzp-is-different-from-nostr"},"How PZP is different from Nostr"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"keys are not shared across devices"),(0,r.kt)("li",{parentName:"ul"},"sig-chains - you know if you're missing content in PZP")),(0,r.kt)("h2",{id:"tangles"},"Tangles"),(0,r.kt)("p",null,"Tangles control how messages are organised. They provide a way to group, and causally sort (partially), which is important for replication."),(0,r.kt)("p",null,"Basics of tangles in PZP: it's a directed acyclic graph (DAG) which aims to be as linear as possible"),(0,r.kt)("mermaid",{value:"flowchart RL\n\nE --\x3e D --\x3e C --\x3e A\n D --\x3e B --\x3e A"}),(0,r.kt)("p",null,"There are 3 sorts of tangles:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Account - a tangle which weaves (device) keys and defines capabilities / permissions of these"),(0,r.kt)("li",{parentName:"ul"},"Feed - a tangle where all messages are from valid devices (as defined by an Account), and scoped to a particular domain",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},'e.g. all post messages from "mix"'),(0,r.kt)("li",{parentName:"ul"},'e.g. all chess messages from "happy0"'))),(0,r.kt)("li",{parentName:"ul"},"Thread - a tangle where multiple Accounts are collaborating on some state",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},'e.g. all the messages making up a "10th birthday gathering"'),(0,r.kt)("li",{parentName:"ul"},"e.g. all the messages in a discussion"),(0,r.kt)("li",{parentName:"ul"},"e.g. all the messages in a shared shopping list")))),(0,r.kt)("h3",{id:"account-tangle"},"Account Tangle"),(0,r.kt)("p",null,'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".'),(0,r.kt)("p",null,"Subsequent messages in this tangle may add / remove capabilities for existing / new keys."),(0,r.kt)("p",null,"Messages in this tangle are verified by checking state they're extending on"),(0,r.kt)("h3",{id:"feed-tangle"},"Feed Tangle"),(0,r.kt)("p",null,(0,r.kt)("em",{parentName:"p"},"Domain Tangle, AccountDomain Tangle")),(0,r.kt)("h3",{id:"thread-tangle"},"Thread Tangle"),(0,r.kt)("p",null,"All tangles have"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"a root / root message"),(0,r.kt)("li",{parentName:"ul"},"an ID (the id of the root message of the tangle)"),(0,r.kt)("li",{parentName:"ul"},"have tangle-data for causal ordering")),(0,r.kt)("p",null,"How the tangles differ"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"the Account tangle has strict validation of messages (it is only valid to write to it if you've been given permission to)"),(0,r.kt)("li",{parentName:"ul"},"a Feed root is deterministic! (only inputs are accountId + domain)")),(0,r.kt)("h2",{id:"messages"},"Messages"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https://github.com/staltz/ppppp-db/blob/master/protospec.md"},"https://github.com/staltz/ppppp-db/blob/master/protospec.md")),(0,r.kt)("h2",{id:"rpc-methods"},"RPC methods"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/staltz/ppppp-sync/blob/master/protospec.md"},"Replication"))),(0,r.kt)("h2",{id:"other"},"Other"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("a",{parentName:"p",href:"https://github.com/staltz/ppppp-invite/blob/master/protospec.md"},"ppppp-invite"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("a",{parentName:"p",href:"https://github.com/staltz/ppppp-set/blob/master/protospec.md"},"ppppp-set"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("a",{parentName:"p",href:"https://github.com/staltz/ppppp-dict/blob/master/protospec.md"},"ppppp-dict")))))}m.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkpzp_wiki=self.webpackChunkpzp_wiki||[]).push([[2385],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>h});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var o=n.createContext({}),p=function(e){var t=n.useContext(o),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},u=function(e){var t=p(e.components);return n.createElement(o.Provider,{value:t},e.children)},c="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,l=e.originalType,o=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),c=p(a),d=r,h=c["".concat(o,".").concat(d)]||c[d]||m[d]||l;return a?n.createElement(h,i(i({ref:t},u),{},{components:a})):n.createElement(h,i({ref:t},u))}));function h(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=a.length,i=new Array(l);i[0]=d;var s={};for(var o in t)hasOwnProperty.call(t,o)&&(s[o]=t[o]);s.originalType=e,s[c]="string"==typeof e?e:r,i[1]=s;for(var p=2;p{a.r(t),a.d(t,{assets:()=>o,contentTitle:()=>i,default:()=>m,frontMatter:()=>l,metadata:()=>s,toc:()=>p});var n=a(7462),r=(a(7294),a(3905));const l={sidebar_position:1},i="PZP Docs",s={unversionedId:"intro",id:"intro",title:"PZP Docs",description:'What is "PZP":',source:"@site/guide/intro.md",sourceDirName:".",slug:"/intro",permalink:"/guide/intro",draft:!1,editUrl:"https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/guide/intro.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",next:{title:"Philosophy",permalink:"/guide/category/philosophy"}},o={},p=[{value:"Features",id:"features",level:2},{value:"How PZP is different from SSB (Secure Scuttlebutt)",id:"how-pzp-is-different-from-ssb-secure-scuttlebutt",level:3},{value:"How PZP is different from Nostr",id:"how-pzp-is-different-from-nostr",level:3},{value:"Tangles",id:"tangles",level:2},{value:"Account Tangle",id:"account-tangle",level:3},{value:"Feed Tangle",id:"feed-tangle",level:3},{value:"Thread Tangle",id:"thread-tangle",level:3},{value:"Messages",id:"messages",level:2},{value:"RPC methods",id:"rpc-methods",level:2},{value:"Other",id:"other",level:2}],u={toc:p},c="wrapper";function m(e){let{components:t,...a}=e;return(0,r.kt)(c,(0,n.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"pzp-docs"},"PZP Docs"),(0,r.kt)("p",null,'What is "PZP":'),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"A local-first P2P protocol with 10 years of learnings baked in"),(0,r.kt)("li",{parentName:"ul"},"Message formats + Message validation + RPC methods"),(0,r.kt)("li",{parentName:"ul"},"If scuttlebutt is \ud83d\ude42 then pzp is \ud83d\ude0e ")),(0,r.kt)("p",null,"What it doesn't specify:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Disk storage")),(0,r.kt)("h2",{id:"features"},"Features"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"sig-chains - you know what the messages are"),(0,r.kt)("li",{parentName:"ul"},"first class multi-device support"),(0,r.kt)("li",{parentName:"ul"},"partial replication (using lipmaa links)"),(0,r.kt)("li",{parentName:"ul"},"message deletion (can leave nothing, or only metadata)")),(0,r.kt)("h3",{id:"how-pzp-is-different-from-ssb-secure-scuttlebutt"},"How PZP is different from SSB (Secure Scuttlebutt)"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Storage is designed to not grow indefinitely. By default (of course overridable) an app's storage shouldn't go above 100MB."),(0,r.kt)("li",{parentName:"ul"},"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."),(0,r.kt)("li",{parentName:"ul"},"One account or even keypair can post messages concurrently (forking) without problem. Because there aren't linear feeds, everything is in tangles."),(0,r.kt)("li",{parentName:"ul"},"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."),(0,r.kt)("li",{parentName:"ul"},"When messages are getting signed they get serialized according to ",(0,r.kt)("a",{parentName:"li",href:"https://tools.ietf.org/html/rfc8785"},"RFC 8785"),"."),(0,r.kt)("li",{parentName:"ul"},"Easy to use invites")),(0,r.kt)("h3",{id:"how-pzp-is-different-from-nostr"},"How PZP is different from Nostr"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"keys are not shared across devices"),(0,r.kt)("li",{parentName:"ul"},"sig-chains - you know if you're missing content in PZP"),(0,r.kt)("li",{parentName:"ul"},"trust based - invite only")),(0,r.kt)("h2",{id:"tangles"},"Tangles"),(0,r.kt)("p",null,"Tangles control how messages are organised. They provide a way to group, and causally sort (partially), which is important for replication."),(0,r.kt)("p",null,"Basics of tangles in PZP: it's a directed acyclic graph (DAG) which aims to be as linear as possible"),(0,r.kt)("mermaid",{value:"flowchart RL\n\nE --\x3e D --\x3e C --\x3e A\n D --\x3e B --\x3e A"}),(0,r.kt)("p",null,"There are 3 sorts of tangles:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Account - a tangle which weaves (device) keys and defines capabilities / permissions of these"),(0,r.kt)("li",{parentName:"ul"},"Feed - a tangle where all messages are from valid devices (as defined by an Account), and scoped to a particular domain",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},'e.g. all post messages from "mix"'),(0,r.kt)("li",{parentName:"ul"},'e.g. all chess messages from "happy0"'))),(0,r.kt)("li",{parentName:"ul"},"Thread - a tangle where multiple Accounts are collaborating on some state",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},'e.g. all the messages making up a "10th birthday gathering"'),(0,r.kt)("li",{parentName:"ul"},"e.g. all the messages in a discussion"),(0,r.kt)("li",{parentName:"ul"},"e.g. all the messages in a shared shopping list")))),(0,r.kt)("h3",{id:"account-tangle"},"Account Tangle"),(0,r.kt)("p",null,'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".'),(0,r.kt)("p",null,"Subsequent messages in this tangle may add / remove capabilities for existing / new keys."),(0,r.kt)("p",null,"Messages in this tangle are verified by checking state they're extending on"),(0,r.kt)("h3",{id:"feed-tangle"},"Feed Tangle"),(0,r.kt)("p",null,(0,r.kt)("em",{parentName:"p"},"Domain Tangle, AccountDomain Tangle")),(0,r.kt)("h3",{id:"thread-tangle"},"Thread Tangle"),(0,r.kt)("p",null,"All tangles have"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"a root / root message"),(0,r.kt)("li",{parentName:"ul"},"an ID (the id of the root message of the tangle)"),(0,r.kt)("li",{parentName:"ul"},"have tangle-data for causal ordering")),(0,r.kt)("p",null,"How the tangles differ"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"the Account tangle has strict validation of messages (it is only valid to write to it if you've been given permission to)"),(0,r.kt)("li",{parentName:"ul"},"a Feed root is deterministic! (only inputs are accountId + domain)")),(0,r.kt)("h2",{id:"messages"},"Messages"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https://github.com/staltz/ppppp-db/blob/master/protospec.md"},"https://github.com/staltz/ppppp-db/blob/master/protospec.md")),(0,r.kt)("h2",{id:"rpc-methods"},"RPC methods"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/staltz/ppppp-sync/blob/master/protospec.md"},"Replication"))),(0,r.kt)("h2",{id:"other"},"Other"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("a",{parentName:"p",href:"https://github.com/staltz/ppppp-invite/blob/master/protospec.md"},"ppppp-invite"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("a",{parentName:"p",href:"https://github.com/staltz/ppppp-set/blob/master/protospec.md"},"ppppp-set"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("a",{parentName:"p",href:"https://github.com/staltz/ppppp-dict/blob/master/protospec.md"},"ppppp-dict")))))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/runtime~main.891fd127.js b/assets/js/runtime~main.39477c2d.js similarity index 98% rename from assets/js/runtime~main.891fd127.js rename to assets/js/runtime~main.39477c2d.js index f835a80..3285b3f 100644 --- a/assets/js/runtime~main.891fd127.js +++ b/assets/js/runtime~main.39477c2d.js @@ -1 +1 @@ -(()=>{"use strict";var e,a,c,f,t,r={},b={};function d(e){var a=b[e];if(void 0!==a)return a.exports;var c=b[e]={id:e,loaded:!1,exports:{}};return r[e].call(c.exports,c,c.exports,d),c.loaded=!0,c.exports}d.m=r,d.c=b,e=[],d.O=(a,c,f,t)=>{if(!c){var r=1/0;for(i=0;i=t)&&Object.keys(d.O).every((e=>d.O[e](c[o])))?c.splice(o--,1):(b=!1,t0&&e[i-1][2]>t;i--)e[i]=e[i-1];e[i]=[c,f,t]},d.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return d.d(a,{a:a}),a},c=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,d.t=function(e,f){if(1&f&&(e=this(e)),8&f)return e;if("object"==typeof e&&e){if(4&f&&e.__esModule)return e;if(16&f&&"function"==typeof e.then)return e}var t=Object.create(null);d.r(t);var r={};a=a||[null,c({}),c([]),c(c)];for(var b=2&f&&e;"object"==typeof b&&!~a.indexOf(b);b=c(b))Object.getOwnPropertyNames(b).forEach((a=>r[a]=()=>e[a]));return r.default=()=>e,d.d(t,r),t},d.d=(e,a)=>{for(var c in a)d.o(a,c)&&!d.o(e,c)&&Object.defineProperty(e,c,{enumerable:!0,get:a[c]})},d.f={},d.e=e=>Promise.all(Object.keys(d.f).reduce(((a,c)=>(d.f[c](e,a),a)),[])),d.u=e=>"assets/js/"+({53:"935f2afb",110:"66406991",178:"3e522eca",453:"30a24c52",533:"b2b675dd",786:"b922ccdb",948:"8717b14a",1477:"b2f554cd",1633:"031793e1",1713:"a7023ddc",1914:"d9f32620",2267:"59362658",2284:"0cdaa55b",2345:"e78c887f",2362:"e273c56f",2385:"840787a5",2535:"814f3328",2793:"75e286b7",3085:"1f391b9e",3089:"a6aa9e1f",3205:"a80da1cf",3335:"3decf16c",3514:"73664a40",3608:"9e4087bc",4013:"01a85c17",4195:"c4f5d8e4",4264:"b83248e9",4443:"ed9eb515",4659:"9494e518",4933:"05bb0f37",5206:"1311eaab",5494:"50e4902a",5575:"a8b86472",5917:"a38a1c51",6103:"ccc49370",6653:"b7cb22e7",6759:"60d8c4f4",6910:"daabf0fa",6938:"608ae6a4",7178:"096bfee4",7183:"1218a5d9",7259:"42b12fd2",7334:"56cb3656",7414:"393be207",7918:"17896441",8433:"54d808ca",8453:"ae0e87b2",8520:"3cd99823",8610:"6875c492",8636:"f4f34a3a",8767:"75634d12",9003:"925b3f96",9025:"20e7ad22",9035:"4c9e35b1",9514:"1be78505",9642:"7661071f",9655:"bf3de0eb",9700:"e16015ca",9817:"14eb3368",9845:"d4eaec92"}[e]||e)+"."+{53:"8074f374",110:"02b9bcd8",178:"9fb35ae8",453:"b8563880",533:"d0e51c0b",786:"57c06ee0",948:"32f69a60",1098:"9aca60fd",1477:"708c83dc",1633:"05615ba2",1713:"72ad64f8",1914:"820c7a69",2267:"24f7170a",2284:"5966fae6",2345:"a9f19d2e",2362:"b12fefee",2385:"efd72543",2529:"91eba8a3",2535:"c0d03c3c",2793:"efb397d4",3085:"b6ce6bdf",3089:"ce36e511",3205:"a5c52db7",3335:"980239ae",3514:"61dfcd67",3608:"f893b5b5",4013:"51665f15",4195:"59a15a93",4264:"62e26509",4443:"a95dc353",4659:"c7839e45",4933:"150fde65",4972:"c780763b",5206:"00d9e8af",5494:"6aaf8a1d",5575:"997c6368",5917:"db6f3ff6",6103:"a0fa5d75",6316:"80f58ae5",6653:"819df13d",6759:"e263f17c",6910:"fbecd955",6938:"21c608eb",7178:"737df3ee",7183:"404cda30",7259:"44a5d6ca",7334:"e965f5ff",7414:"12ab491d",7724:"8621b178",7918:"6b263e02",8433:"fe03772e",8453:"b84efba8",8520:"8ab7c6f1",8610:"c6f13390",8636:"558e31ae",8767:"20df7f99",9003:"9c889689",9025:"3d58ab17",9035:"c73e2c7f",9487:"be350339",9514:"e6307cb1",9642:"2da89d70",9655:"79341678",9700:"356a3aad",9817:"436c177b",9845:"8c804d2b"}[e]+".js",d.miniCssF=e=>{},d.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),d.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),f={},t="pzp-wiki:",d.l=(e,a,c,r)=>{if(f[e])f[e].push(a);else{var b,o;if(void 0!==c)for(var n=document.getElementsByTagName("script"),i=0;i{b.onerror=b.onload=null,clearTimeout(s);var t=f[e];if(delete f[e],b.parentNode&&b.parentNode.removeChild(b),t&&t.forEach((e=>e(c))),a)return a(c)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:b}),12e4);b.onerror=l.bind(null,b.onerror),b.onload=l.bind(null,b.onload),o&&document.head.appendChild(b)}},d.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},d.p="/",d.gca=function(e){return e={17896441:"7918",59362658:"2267",66406991:"110","935f2afb":"53","3e522eca":"178","30a24c52":"453",b2b675dd:"533",b922ccdb:"786","8717b14a":"948",b2f554cd:"1477","031793e1":"1633",a7023ddc:"1713",d9f32620:"1914","0cdaa55b":"2284",e78c887f:"2345",e273c56f:"2362","840787a5":"2385","814f3328":"2535","75e286b7":"2793","1f391b9e":"3085",a6aa9e1f:"3089",a80da1cf:"3205","3decf16c":"3335","73664a40":"3514","9e4087bc":"3608","01a85c17":"4013",c4f5d8e4:"4195",b83248e9:"4264",ed9eb515:"4443","9494e518":"4659","05bb0f37":"4933","1311eaab":"5206","50e4902a":"5494",a8b86472:"5575",a38a1c51:"5917",ccc49370:"6103",b7cb22e7:"6653","60d8c4f4":"6759",daabf0fa:"6910","608ae6a4":"6938","096bfee4":"7178","1218a5d9":"7183","42b12fd2":"7259","56cb3656":"7334","393be207":"7414","54d808ca":"8433",ae0e87b2:"8453","3cd99823":"8520","6875c492":"8610",f4f34a3a:"8636","75634d12":"8767","925b3f96":"9003","20e7ad22":"9025","4c9e35b1":"9035","1be78505":"9514","7661071f":"9642",bf3de0eb:"9655",e16015ca:"9700","14eb3368":"9817",d4eaec92:"9845"}[e]||e,d.p+d.u(e)},(()=>{var e={1303:0,532:0};d.f.j=(a,c)=>{var f=d.o(e,a)?e[a]:void 0;if(0!==f)if(f)c.push(f[2]);else if(/^(1303|532)$/.test(a))e[a]=0;else{var t=new Promise(((c,t)=>f=e[a]=[c,t]));c.push(f[2]=t);var r=d.p+d.u(a),b=new Error;d.l(r,(c=>{if(d.o(e,a)&&(0!==(f=e[a])&&(e[a]=void 0),f)){var t=c&&("load"===c.type?"missing":c.type),r=c&&c.target&&c.target.src;b.message="Loading chunk "+a+" failed.\n("+t+": "+r+")",b.name="ChunkLoadError",b.type=t,b.request=r,f[1](b)}}),"chunk-"+a,a)}},d.O.j=a=>0===e[a];var a=(a,c)=>{var f,t,r=c[0],b=c[1],o=c[2],n=0;if(r.some((a=>0!==e[a]))){for(f in b)d.o(b,f)&&(d.m[f]=b[f]);if(o)var i=o(d)}for(a&&a(c);n{"use strict";var e,a,c,f,t,r={},b={};function d(e){var a=b[e];if(void 0!==a)return a.exports;var c=b[e]={id:e,loaded:!1,exports:{}};return r[e].call(c.exports,c,c.exports,d),c.loaded=!0,c.exports}d.m=r,d.c=b,e=[],d.O=(a,c,f,t)=>{if(!c){var r=1/0;for(i=0;i=t)&&Object.keys(d.O).every((e=>d.O[e](c[o])))?c.splice(o--,1):(b=!1,t0&&e[i-1][2]>t;i--)e[i]=e[i-1];e[i]=[c,f,t]},d.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return d.d(a,{a:a}),a},c=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,d.t=function(e,f){if(1&f&&(e=this(e)),8&f)return e;if("object"==typeof e&&e){if(4&f&&e.__esModule)return e;if(16&f&&"function"==typeof e.then)return e}var t=Object.create(null);d.r(t);var r={};a=a||[null,c({}),c([]),c(c)];for(var b=2&f&&e;"object"==typeof b&&!~a.indexOf(b);b=c(b))Object.getOwnPropertyNames(b).forEach((a=>r[a]=()=>e[a]));return r.default=()=>e,d.d(t,r),t},d.d=(e,a)=>{for(var c in a)d.o(a,c)&&!d.o(e,c)&&Object.defineProperty(e,c,{enumerable:!0,get:a[c]})},d.f={},d.e=e=>Promise.all(Object.keys(d.f).reduce(((a,c)=>(d.f[c](e,a),a)),[])),d.u=e=>"assets/js/"+({53:"935f2afb",110:"66406991",178:"3e522eca",453:"30a24c52",533:"b2b675dd",786:"b922ccdb",948:"8717b14a",1477:"b2f554cd",1633:"031793e1",1713:"a7023ddc",1914:"d9f32620",2267:"59362658",2284:"0cdaa55b",2345:"e78c887f",2362:"e273c56f",2385:"840787a5",2535:"814f3328",2793:"75e286b7",3085:"1f391b9e",3089:"a6aa9e1f",3205:"a80da1cf",3335:"3decf16c",3514:"73664a40",3608:"9e4087bc",4013:"01a85c17",4195:"c4f5d8e4",4264:"b83248e9",4443:"ed9eb515",4659:"9494e518",4933:"05bb0f37",5206:"1311eaab",5494:"50e4902a",5575:"a8b86472",5917:"a38a1c51",6103:"ccc49370",6653:"b7cb22e7",6759:"60d8c4f4",6910:"daabf0fa",6938:"608ae6a4",7178:"096bfee4",7183:"1218a5d9",7259:"42b12fd2",7334:"56cb3656",7414:"393be207",7918:"17896441",8433:"54d808ca",8453:"ae0e87b2",8520:"3cd99823",8610:"6875c492",8636:"f4f34a3a",8767:"75634d12",9003:"925b3f96",9025:"20e7ad22",9035:"4c9e35b1",9514:"1be78505",9642:"7661071f",9655:"bf3de0eb",9700:"e16015ca",9817:"14eb3368",9845:"d4eaec92"}[e]||e)+"."+{53:"8074f374",110:"02b9bcd8",178:"9fb35ae8",453:"b8563880",533:"d0e51c0b",786:"57c06ee0",948:"32f69a60",1098:"9aca60fd",1477:"708c83dc",1633:"05615ba2",1713:"72ad64f8",1914:"820c7a69",2267:"24f7170a",2284:"5966fae6",2345:"a9f19d2e",2362:"b12fefee",2385:"fc37b393",2529:"91eba8a3",2535:"c0d03c3c",2793:"efb397d4",3085:"b6ce6bdf",3089:"ce36e511",3205:"a5c52db7",3335:"980239ae",3514:"61dfcd67",3608:"f893b5b5",4013:"51665f15",4195:"59a15a93",4264:"62e26509",4443:"a95dc353",4659:"c7839e45",4933:"150fde65",4972:"c780763b",5206:"00d9e8af",5494:"6aaf8a1d",5575:"997c6368",5917:"db6f3ff6",6103:"a0fa5d75",6316:"80f58ae5",6653:"819df13d",6759:"e263f17c",6910:"fbecd955",6938:"21c608eb",7178:"737df3ee",7183:"404cda30",7259:"44a5d6ca",7334:"e965f5ff",7414:"12ab491d",7724:"8621b178",7918:"6b263e02",8433:"fe03772e",8453:"b84efba8",8520:"8ab7c6f1",8610:"c6f13390",8636:"558e31ae",8767:"20df7f99",9003:"9c889689",9025:"3d58ab17",9035:"c73e2c7f",9487:"be350339",9514:"e6307cb1",9642:"2da89d70",9655:"79341678",9700:"356a3aad",9817:"436c177b",9845:"8c804d2b"}[e]+".js",d.miniCssF=e=>{},d.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),d.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),f={},t="pzp-wiki:",d.l=(e,a,c,r)=>{if(f[e])f[e].push(a);else{var b,o;if(void 0!==c)for(var n=document.getElementsByTagName("script"),i=0;i{b.onerror=b.onload=null,clearTimeout(s);var t=f[e];if(delete f[e],b.parentNode&&b.parentNode.removeChild(b),t&&t.forEach((e=>e(c))),a)return a(c)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:b}),12e4);b.onerror=l.bind(null,b.onerror),b.onload=l.bind(null,b.onload),o&&document.head.appendChild(b)}},d.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},d.p="/",d.gca=function(e){return e={17896441:"7918",59362658:"2267",66406991:"110","935f2afb":"53","3e522eca":"178","30a24c52":"453",b2b675dd:"533",b922ccdb:"786","8717b14a":"948",b2f554cd:"1477","031793e1":"1633",a7023ddc:"1713",d9f32620:"1914","0cdaa55b":"2284",e78c887f:"2345",e273c56f:"2362","840787a5":"2385","814f3328":"2535","75e286b7":"2793","1f391b9e":"3085",a6aa9e1f:"3089",a80da1cf:"3205","3decf16c":"3335","73664a40":"3514","9e4087bc":"3608","01a85c17":"4013",c4f5d8e4:"4195",b83248e9:"4264",ed9eb515:"4443","9494e518":"4659","05bb0f37":"4933","1311eaab":"5206","50e4902a":"5494",a8b86472:"5575",a38a1c51:"5917",ccc49370:"6103",b7cb22e7:"6653","60d8c4f4":"6759",daabf0fa:"6910","608ae6a4":"6938","096bfee4":"7178","1218a5d9":"7183","42b12fd2":"7259","56cb3656":"7334","393be207":"7414","54d808ca":"8433",ae0e87b2:"8453","3cd99823":"8520","6875c492":"8610",f4f34a3a:"8636","75634d12":"8767","925b3f96":"9003","20e7ad22":"9025","4c9e35b1":"9035","1be78505":"9514","7661071f":"9642",bf3de0eb:"9655",e16015ca:"9700","14eb3368":"9817",d4eaec92:"9845"}[e]||e,d.p+d.u(e)},(()=>{var e={1303:0,532:0};d.f.j=(a,c)=>{var f=d.o(e,a)?e[a]:void 0;if(0!==f)if(f)c.push(f[2]);else if(/^(1303|532)$/.test(a))e[a]=0;else{var t=new Promise(((c,t)=>f=e[a]=[c,t]));c.push(f[2]=t);var r=d.p+d.u(a),b=new Error;d.l(r,(c=>{if(d.o(e,a)&&(0!==(f=e[a])&&(e[a]=void 0),f)){var t=c&&("load"===c.type?"missing":c.type),r=c&&c.target&&c.target.src;b.message="Loading chunk "+a+" failed.\n("+t+": "+r+")",b.name="ChunkLoadError",b.type=t,b.request=r,f[1](b)}}),"chunk-"+a,a)}},d.O.j=a=>0===e[a];var a=(a,c)=>{var f,t,r=c[0],b=c[1],o=c[2],n=0;if(r.some((a=>0!==e[a]))){for(f in b)d.o(b,f)&&(d.m[f]=b[f]);if(o)var i=o(d)}for(a&&a(c);n Archive | PZP Wiki - + - + \ No newline at end of file diff --git a/blog/first-blog-post/index.html b/blog/first-blog-post/index.html index 54115dc..7cb55c4 100644 --- a/blog/first-blog-post/index.html +++ b/blog/first-blog-post/index.html @@ -5,13 +5,13 @@ First Blog Post | PZP Wiki - +

First Blog Post

· One min read
Gao Wei

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

- + \ No newline at end of file diff --git a/blog/index.html b/blog/index.html index 1ec7d97..eff7d2f 100644 --- a/blog/index.html +++ b/blog/index.html @@ -5,13 +5,13 @@ Blog | PZP Wiki - +

· One min read
Sébastien Lorber
Yangshun Tay

Docusaurus blogging features are powered by the blog plugin.

Simply add Markdown files (or folders) to the blog directory.

Regular blog authors can be added to authors.yml.

The blog post date can be extracted from filenames, such as:

  • 2019-05-30-welcome.md
  • 2019-05-30-welcome/index.md

A blog post folder can be convenient to co-locate blog post images:

Docusaurus Plushie

The blog supports tags as well!

And if you don't want a blog: just delete this directory, and use blog: false in your Docusaurus config.

· One min read
Gao Wei

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

- + \ No newline at end of file diff --git a/blog/long-blog-post/index.html b/blog/long-blog-post/index.html index ff8960d..b8302e9 100644 --- a/blog/long-blog-post/index.html +++ b/blog/long-blog-post/index.html @@ -5,13 +5,13 @@ Long Blog Post | PZP Wiki - +

Long Blog Post

· 3 min read
Endilie Yacop Sucipto

This is the summary of a very long blog post,

Use a <!-- truncate --> comment to limit blog post size in the list view.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

- + \ No newline at end of file diff --git a/blog/mdx-blog-post/index.html b/blog/mdx-blog-post/index.html index 65252fe..56c80f2 100644 --- a/blog/mdx-blog-post/index.html +++ b/blog/mdx-blog-post/index.html @@ -5,13 +5,13 @@ MDX Blog Post | PZP Wiki - +
- + \ No newline at end of file diff --git a/blog/tags/docusaurus/index.html b/blog/tags/docusaurus/index.html index 9a7ef9b..2d9a13e 100644 --- a/blog/tags/docusaurus/index.html +++ b/blog/tags/docusaurus/index.html @@ -5,13 +5,13 @@ 4 posts tagged with "docusaurus" | PZP Wiki - +

4 posts tagged with "docusaurus"

View All Tags

· One min read
Sébastien Lorber
Yangshun Tay

Docusaurus blogging features are powered by the blog plugin.

Simply add Markdown files (or folders) to the blog directory.

Regular blog authors can be added to authors.yml.

The blog post date can be extracted from filenames, such as:

  • 2019-05-30-welcome.md
  • 2019-05-30-welcome/index.md

A blog post folder can be convenient to co-locate blog post images:

Docusaurus Plushie

The blog supports tags as well!

And if you don't want a blog: just delete this directory, and use blog: false in your Docusaurus config.

· One min read
Gao Wei

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

- + \ No newline at end of file diff --git a/blog/tags/facebook/index.html b/blog/tags/facebook/index.html index d798473..d3fd3c9 100644 --- a/blog/tags/facebook/index.html +++ b/blog/tags/facebook/index.html @@ -5,13 +5,13 @@ One post tagged with "facebook" | PZP Wiki - +

One post tagged with "facebook"

View All Tags

· One min read
Sébastien Lorber
Yangshun Tay

Docusaurus blogging features are powered by the blog plugin.

Simply add Markdown files (or folders) to the blog directory.

Regular blog authors can be added to authors.yml.

The blog post date can be extracted from filenames, such as:

  • 2019-05-30-welcome.md
  • 2019-05-30-welcome/index.md

A blog post folder can be convenient to co-locate blog post images:

Docusaurus Plushie

The blog supports tags as well!

And if you don't want a blog: just delete this directory, and use blog: false in your Docusaurus config.

- + \ No newline at end of file diff --git a/blog/tags/hello/index.html b/blog/tags/hello/index.html index f0360b0..46ddb12 100644 --- a/blog/tags/hello/index.html +++ b/blog/tags/hello/index.html @@ -5,13 +5,13 @@ 2 posts tagged with "hello" | PZP Wiki - +

2 posts tagged with "hello"

View All Tags

· One min read
Sébastien Lorber
Yangshun Tay

Docusaurus blogging features are powered by the blog plugin.

Simply add Markdown files (or folders) to the blog directory.

Regular blog authors can be added to authors.yml.

The blog post date can be extracted from filenames, such as:

  • 2019-05-30-welcome.md
  • 2019-05-30-welcome/index.md

A blog post folder can be convenient to co-locate blog post images:

Docusaurus Plushie

The blog supports tags as well!

And if you don't want a blog: just delete this directory, and use blog: false in your Docusaurus config.

- + \ No newline at end of file diff --git a/blog/tags/hola/index.html b/blog/tags/hola/index.html index 9467331..27bebfc 100644 --- a/blog/tags/hola/index.html +++ b/blog/tags/hola/index.html @@ -5,13 +5,13 @@ One post tagged with "hola" | PZP Wiki - +

One post tagged with "hola"

View All Tags

· One min read
Gao Wei

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

- + \ No newline at end of file diff --git a/blog/tags/index.html b/blog/tags/index.html index e98b587..2a6d5a8 100644 --- a/blog/tags/index.html +++ b/blog/tags/index.html @@ -5,13 +5,13 @@ Tags | PZP Wiki - + - + \ No newline at end of file diff --git a/blog/welcome/index.html b/blog/welcome/index.html index 18ea497..18e7def 100644 --- a/blog/welcome/index.html +++ b/blog/welcome/index.html @@ -5,13 +5,13 @@ Welcome | PZP Wiki - +

Welcome

· One min read
Sébastien Lorber
Yangshun Tay

Docusaurus blogging features are powered by the blog plugin.

Simply add Markdown files (or folders) to the blog directory.

Regular blog authors can be added to authors.yml.

The blog post date can be extracted from filenames, such as:

  • 2019-05-30-welcome.md
  • 2019-05-30-welcome/index.md

A blog post folder can be convenient to co-locate blog post images:

Docusaurus Plushie

The blog supports tags as well!

And if you don't want a blog: just delete this directory, and use blog: false in your Docusaurus config.

- + \ No newline at end of file diff --git a/guide/category/concepts/index.html b/guide/category/concepts/index.html index 32a0d0b..0026c1f 100644 --- a/guide/category/concepts/index.html +++ b/guide/category/concepts/index.html @@ -5,13 +5,13 @@ Concepts | PZP Wiki - + - + \ No newline at end of file diff --git a/guide/category/philosophy/index.html b/guide/category/philosophy/index.html index d5d5ddd..412c728 100644 --- a/guide/category/philosophy/index.html +++ b/guide/category/philosophy/index.html @@ -5,13 +5,13 @@ Philosophy | PZP Wiki - + - + \ No newline at end of file diff --git a/guide/category/tutorial---basics/index.html b/guide/category/tutorial---basics/index.html index 776cc71..242d1ce 100644 --- a/guide/category/tutorial---basics/index.html +++ b/guide/category/tutorial---basics/index.html @@ -5,13 +5,13 @@ Tutorial - Basics | PZP Wiki - + - + \ No newline at end of file diff --git a/guide/category/tutorial---extras/index.html b/guide/category/tutorial---extras/index.html index ecb91ab..1534d05 100644 --- a/guide/category/tutorial---extras/index.html +++ b/guide/category/tutorial---extras/index.html @@ -5,13 +5,13 @@ Tutorial - Extras | PZP Wiki - + - + \ No newline at end of file diff --git a/guide/concepts/feed/index.html b/guide/concepts/feed/index.html index 01532d7..1ce5313 100644 --- a/guide/concepts/feed/index.html +++ b/guide/concepts/feed/index.html @@ -5,13 +5,13 @@ Feed | PZP Wiki - +

Feed

Definition

A feed is an evolving set of interlinked messages intended for continuous replication in a gossip network.

In computer science terms, it's an Directed Acyclic Graph (DAG) with only one source node, where all the "nodes" are messages, and "edges" are references that each message contains of other messages.

The root is...

The tangle is identified by the hash of its root message.

Account

An account is a special type of tangle, where the messages describe which keypairs are part of the same "account".

Msgs in an account tangle are special because they have empty account and accountTips fields.

interface Msg {
data: AccountData
metadata: {
dataHash: ContentHash
dataSize: number
account: 'self' // MUST be the string 'self'
accountTips: null // MUST be null
tangles: {
[accountTangleId: string]: {
depth: number // maximum distance (positive integer) from this msg to the root
prev: Array<MsgHash> // list of msg hashes of existing msgs, unique set and ordered alphabetically
}
}
domain: string // alphanumeric string, at least 3 chars, max 100 chars
v: 3
}
pubkey: Pubkey
sig: Signature
}

type AccountData =
| { action: 'add', add: AccountAdd }
| { action: 'del', del: AccountDel }

// "add" means this keypair can validly add more keypairs to the account tangle
// "del" means this keypair can validly revoke other keypairs from the account
// "box" means the peer with this keypair should get access to the box keypair
type AccountPower = 'add' | 'del' | 'box'

type AccountAdd = {
key: Key
nonce?: string // nonce required only on the account tangle's root
consent?: string // base58 encoded signature of the string `:account-add:<ID>` where `<ID>` is the account's ID, required only on non-root msgs
accountPowers?: Array<AccountPower> // list of powers granted to this key, defaults to []
}

type AccountDel = {
key: Key
}

type Key =
| {
purpose: 'sig' // digital signatures
algorithm: 'ed25519' // libsodium crypto_sign_detached
bytes: string // base58 encoded string for the public key being added
}
| {
// WIP!!
purpose: 'box' // asymmetric encryption
algorithm: 'x25519-xsalsa20-poly1305' // libsodium crypto_box_easy
bytes: string // base58 encoded string of the public key
}

Examples of accountData:

  • Registering the first signing pubkey:
    {
    "action": "add",
    "add": {
    "key": {
    "purpose": "sig",
    "algorithm": "ed25519",
    "bytes": "3JrJiHEQzRFMzEqWawfBgq2DSZDyihP1NHXshqcL8pB9"
    },
    "nonce": "6GHR1ZFFSB3C5qAGwmSwVH8f7byNo8Cqwn5PcyG3qDvS"
    }
    }
  • Registering a subaccount:
    {
    "action": "add",
    "add": {
    "key": {
    "purpose": "subaccount",
    "algorithm": "tangle",
    "bytes": "6yqq7iwyJEKdofJ3xpRLEq"
    }
    }
    }
  • Revoking a signing pubkey:
    {
    "action": "del",
    "del": {
    "key": {
    "purpose": "sig",
    "algorithm": "ed25519",
    "bytes": "3JrJiHEQzRFMzEqWawfBgq2DSZDyihP1NHXshqcL8pB9"
    }
    }
    }

Moot feeds

A feed is a special type of tangle, where the root is a predictable (by any peer) message with no content.

Root:

interface Msg {
data: null // MUST be null
metadata: {
dataHash: null // MUST be null
dataSize: 0 // MUST be 0
account: string // MUST be an ID
accountTips: null // MUST be null
tangles: {} // MUST be empty object
domain: string
v: 2
}
pubkey: Pubkey
sig: Signature
}
- + \ No newline at end of file diff --git a/guide/concepts/glossary/index.html b/guide/concepts/glossary/index.html index 1f031d3..08220be 100644 --- a/guide/concepts/glossary/index.html +++ b/guide/concepts/glossary/index.html @@ -5,13 +5,13 @@ Glossary | PZP Wiki - +

Glossary

  • Msg = published data that is signed and shareable
  • Msg hash = hash(msg.metadata)
  • Tangle = any single-root DAG of msgs that can be replicated by peers
  • Tangle Root = the origin msg of a tangle
  • Tangle Affix = any msg in a tangle that is not the root
  • Tangle Tips = tangle msgs that are not yet referenced by any other msg in the tangle
  • Tangle ID = Msg hash of the tangle's root msg
  • Account tangle = tangle with msgs that add (or remove?) asymmetric-crypto public keys
  • Account ID = tangle ID of the account tangle, refers to a person or a group
  • Moot = the "virtual root" of a tangle. The moot is a msg that is deterministically predictable and empty, so to allow others to pre-know its hash. It never needs to be stored in disk nor transmitted via network, since it can be recreated on the fly
  • Feed = tangle with msgs authored by (any pubkey in) an account under a certain "domain", beginning from a moot
  • Feed ID = ID of a feed (Msg ID of the feed's moot)
- + \ No newline at end of file diff --git a/guide/concepts/hub/index.html b/guide/concepts/hub/index.html index 652f62b..9628502 100644 --- a/guide/concepts/hub/index.html +++ b/guide/concepts/hub/index.html @@ -5,13 +5,13 @@ Hub | PZP Wiki - +

Hub

Definition

A hub is a server that allow clients to communicate with each other via end-to-end encrypted tunnels. Hubs and clients form a fluid multi-star topology.

- + \ No newline at end of file diff --git a/guide/concepts/invite/index.html b/guide/concepts/invite/index.html index 73016d9..696b226 100644 --- a/guide/concepts/invite/index.html +++ b/guide/concepts/invite/index.html @@ -5,13 +5,13 @@ Invite | PZP Wiki - + - + \ No newline at end of file diff --git a/guide/concepts/message/index.html b/guide/concepts/message/index.html index fb0daae..2cd3121 100644 --- a/guide/concepts/message/index.html +++ b/guide/concepts/message/index.html @@ -5,13 +5,13 @@ Message | PZP Wiki - +

Message

Definition

A message is a JSON encoded data structure that is signed by a peer and intended for replication in a gossip network.

Data

Metadata

Public key

Signature

- + \ No newline at end of file diff --git a/guide/concepts/overview/index.html b/guide/concepts/overview/index.html index beb459e..49fdd49 100644 --- a/guide/concepts/overview/index.html +++ b/guide/concepts/overview/index.html @@ -5,13 +5,13 @@ Overview | PZP Wiki - +
- + \ No newline at end of file diff --git a/guide/concepts/peer/index.html b/guide/concepts/peer/index.html index 1df94db..5efb5d0 100644 --- a/guide/concepts/peer/index.html +++ b/guide/concepts/peer/index.html @@ -5,13 +5,13 @@ Peer | PZP Wiki - +

Peer

Definition

A peer is a participant in a gossip network, identified by a self-certifying cryptographic keypair.

Keypair for SHSe

Asymmetric cryptographic keypair that identifies the current peer.

- + \ No newline at end of file diff --git a/guide/concepts/replication/index.html b/guide/concepts/replication/index.html index 1a1e99a..38fdbf6 100644 --- a/guide/concepts/replication/index.html +++ b/guide/concepts/replication/index.html @@ -5,13 +5,13 @@ Replication | PZP Wiki - + - + \ No newline at end of file diff --git a/guide/intro/index.html b/guide/intro/index.html index f37fcc8..9b855f0 100644 --- a/guide/intro/index.html +++ b/guide/intro/index.html @@ -5,13 +5,13 @@ PZP Docs | PZP Wiki - +
-

PZP Docs

What is "PZP":

  • A local-first P2P protocol with 10 years of learnings baked in
  • Message formats + Message validation + RPC methods
  • If scuttlebutt is 🙂 then pzp is 😎

What it doesn't specify:

  • Disk storage

Features

  • sig-chains - you know what the messages are
  • first class multi-device support
  • partial replication (using lipmaa links)
  • message deletion (can leave nothing, or only metadata)

How PZP is different from SSB (Secure Scuttlebutt)

  • 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.
  • One account or even keypair can post messages concurrently (forking) without problem. Because there aren't linear feeds, everything is in tangles.
  • 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.

How PZP is different from Nostr

  • keys are not shared across devices
  • sig-chains - you know if you're missing content in PZP

Tangles

Tangles control how messages are organised. They provide a way to group, and causally sort (partially), which is important for replication.

Basics of tangles in PZP: it's a directed acyclic graph (DAG) which aims to be as linear as possible

There are 3 sorts of tangles:

  • Account - a tangle which weaves (device) keys and defines capabilities / permissions of these
  • Feed - a tangle where all messages are from valid devices (as defined by an Account), and scoped to a particular domain
    • e.g. all post messages from "mix"
    • e.g. all chess messages from "happy0"
  • Thread - a tangle where multiple Accounts are collaborating on some state
    • e.g. all the messages making up a "10th birthday gathering"
    • e.g. all the messages in a discussion
    • e.g. all the messages in a shared shopping list

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

Subsequent messages in this tangle may add / remove capabilities for existing / new keys.

Messages in this tangle are verified by checking state they're extending on

Feed Tangle

Domain Tangle, AccountDomain Tangle

Thread Tangle

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)

Messages

https://github.com/staltz/ppppp-db/blob/master/protospec.md

RPC methods

Other

- +

PZP Docs

What is "PZP":

  • A local-first P2P protocol with 10 years of learnings baked in
  • Message formats + Message validation + RPC methods
  • If scuttlebutt is 🙂 then pzp is 😎

What it doesn't specify:

  • Disk storage

Features

  • sig-chains - you know what the messages are
  • first class multi-device support
  • partial replication (using lipmaa links)
  • message deletion (can leave nothing, or only metadata)

How PZP is different from SSB (Secure Scuttlebutt)

  • 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.
  • One account or even keypair can post messages concurrently (forking) without problem. Because there aren't linear feeds, everything is in tangles.
  • 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.
  • Easy to use invites

How PZP is different from Nostr

  • keys are not shared across devices
  • sig-chains - you know if you're missing content in PZP
  • trust based - invite only

Tangles

Tangles control how messages are organised. They provide a way to group, and causally sort (partially), which is important for replication.

Basics of tangles in PZP: it's a directed acyclic graph (DAG) which aims to be as linear as possible

There are 3 sorts of tangles:

  • Account - a tangle which weaves (device) keys and defines capabilities / permissions of these
  • Feed - a tangle where all messages are from valid devices (as defined by an Account), and scoped to a particular domain
    • e.g. all post messages from "mix"
    • e.g. all chess messages from "happy0"
  • Thread - a tangle where multiple Accounts are collaborating on some state
    • e.g. all the messages making up a "10th birthday gathering"
    • e.g. all the messages in a discussion
    • e.g. all the messages in a shared shopping list

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

Subsequent messages in this tangle may add / remove capabilities for existing / new keys.

Messages in this tangle are verified by checking state they're extending on

Feed Tangle

Domain Tangle, AccountDomain Tangle

Thread Tangle

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)

Messages

https://github.com/staltz/ppppp-db/blob/master/protospec.md

RPC methods

Other

+ \ No newline at end of file diff --git a/guide/philosophy/app-friendly/index.html b/guide/philosophy/app-friendly/index.html index 4ca757e..d711bfa 100644 --- a/guide/philosophy/app-friendly/index.html +++ b/guide/philosophy/app-friendly/index.html @@ -5,13 +5,13 @@ App-friendly | PZP Wiki - + - + \ No newline at end of file diff --git a/guide/philosophy/regenerative/index.html b/guide/philosophy/regenerative/index.html index 683114c..e6f9194 100644 --- a/guide/philosophy/regenerative/index.html +++ b/guide/philosophy/regenerative/index.html @@ -5,13 +5,13 @@ Regenerative | PZP Wiki - + - + \ No newline at end of file diff --git a/guide/philosophy/sufficiency/index.html b/guide/philosophy/sufficiency/index.html index 4f3d399..b06f534 100644 --- a/guide/philosophy/sufficiency/index.html +++ b/guide/philosophy/sufficiency/index.html @@ -5,13 +5,13 @@ Sufficiency | PZP Wiki - +
- + \ No newline at end of file diff --git a/guide/philosophy/villages/index.html b/guide/philosophy/villages/index.html index c51e6e3..400ac70 100644 --- a/guide/philosophy/villages/index.html +++ b/guide/philosophy/villages/index.html @@ -5,13 +5,13 @@ Villages | PZP Wiki - +

Villages

We are not trying to fix social media, we are trying to make it less central in our lives. As a replacement, we want to increase the role of villages, networks of friends, and small communities in society.

Small (dozens)Medium (hundreds)Large (thousands+)
PZP
TelegramDiscourseTwitter / X
SignalMastodonMastodon
WhatsAppDiscordFacebook
MessengerSlackInstagram
BriarMatrixThreads
SSBSSB
Bluesky
Nostr
- + \ No newline at end of file diff --git a/guide/tutorial-basics/congratulations/index.html b/guide/tutorial-basics/congratulations/index.html index ecd8d6d..0ec414f 100644 --- a/guide/tutorial-basics/congratulations/index.html +++ b/guide/tutorial-basics/congratulations/index.html @@ -5,13 +5,13 @@ Congratulations! | PZP Wiki - +

Congratulations!

You have just learned the basics of Docusaurus and made some changes to the initial template.

Docusaurus has much more to offer!

Have 5 more minutes? Take a look at versioning and i18n.

Anything unclear or buggy in this tutorial? Please report it!

What's next?

- + \ No newline at end of file diff --git a/guide/tutorial-basics/create-a-blog-post/index.html b/guide/tutorial-basics/create-a-blog-post/index.html index 8e598d3..8fbab3a 100644 --- a/guide/tutorial-basics/create-a-blog-post/index.html +++ b/guide/tutorial-basics/create-a-blog-post/index.html @@ -5,13 +5,13 @@ Create a Blog Post | PZP Wiki - +

Create a Blog Post

Docusaurus creates a page for each blog post, but also a blog index page, a tag system, an RSS feed...

Create your first Post

Create a file at blog/2021-02-28-greetings.md:

blog/2021-02-28-greetings.md
---
slug: greetings
title: Greetings!
authors:
- name: Joel Marcey
title: Co-creator of Docusaurus 1
url: https://github.com/JoelMarcey
image_url: https://github.com/JoelMarcey.png
- name: Sébastien Lorber
title: Docusaurus maintainer
url: https://sebastienlorber.com
image_url: https://github.com/slorber.png
tags: [greetings]
---

Congratulations, you have made your first post!

Feel free to play around and edit this post as much you like.

A new blog post is now available at http://localhost:3000/blog/greetings.

- + \ No newline at end of file diff --git a/guide/tutorial-basics/create-a-document/index.html b/guide/tutorial-basics/create-a-document/index.html index 225c66d..205fcba 100644 --- a/guide/tutorial-basics/create-a-document/index.html +++ b/guide/tutorial-basics/create-a-document/index.html @@ -5,13 +5,13 @@ Create a Document | PZP Wiki - +

Create a Document

Documents are groups of pages connected through:

  • a sidebar
  • previous/next navigation
  • versioning

Create your first Doc

Create a Markdown file at docs/hello.md:

docs/hello.md
# Hello

This is my **first Docusaurus document**!

A new document is now available at http://localhost:3000/docs/hello.

Configure the Sidebar

Docusaurus automatically creates a sidebar from the docs folder.

Add metadata to customize the sidebar label and position:

docs/hello.md
---
sidebar_label: 'Hi!'
sidebar_position: 3
---

# Hello

This is my **first Docusaurus document**!

It is also possible to create your sidebar explicitly in sidebars.js:

sidebars.js
module.exports = {
tutorialSidebar: [
'intro',
'hello',
{
type: 'category',
label: 'Tutorial',
items: ['tutorial-basics/create-a-document'],
},
],
};
- + \ No newline at end of file diff --git a/guide/tutorial-basics/create-a-page/index.html b/guide/tutorial-basics/create-a-page/index.html index 51e9dad..8f49b5e 100644 --- a/guide/tutorial-basics/create-a-page/index.html +++ b/guide/tutorial-basics/create-a-page/index.html @@ -5,13 +5,13 @@ Create a Page | PZP Wiki - +

Create a Page

Add Markdown or React files to src/pages to create a standalone page:

  • src/pages/index.jslocalhost:3000/
  • src/pages/foo.mdlocalhost:3000/foo
  • src/pages/foo/bar.jslocalhost:3000/foo/bar

Create your first React Page

Create a file at src/pages/my-react-page.js:

src/pages/my-react-page.js
import React from 'react';
import Layout from '@theme/Layout';

export default function MyReactPage() {
return (
<Layout>
<h1>My React page</h1>
<p>This is a React page</p>
</Layout>
);
}

A new page is now available at http://localhost:3000/my-react-page.

Create your first Markdown Page

Create a file at src/pages/my-markdown-page.md:

src/pages/my-markdown-page.md
# My Markdown page

This is a Markdown page

A new page is now available at http://localhost:3000/my-markdown-page.

- + \ No newline at end of file diff --git a/guide/tutorial-basics/deploy-your-site/index.html b/guide/tutorial-basics/deploy-your-site/index.html index a51e013..840278b 100644 --- a/guide/tutorial-basics/deploy-your-site/index.html +++ b/guide/tutorial-basics/deploy-your-site/index.html @@ -5,13 +5,13 @@ Deploy your site | PZP Wiki - +

Deploy your site

Docusaurus is a static-site-generator (also called Jamstack).

It builds your site as simple static HTML, JavaScript and CSS files.

Build your site

Build your site for production:

npm run build

The static files are generated in the build folder.

Deploy your site

Test your production build locally:

npm run serve

The build folder is now served at http://localhost:3000/.

You can now deploy the build folder almost anywhere easily, for free or very small cost (read the Deployment Guide).

- + \ No newline at end of file diff --git a/guide/tutorial-basics/markdown-features/index.html b/guide/tutorial-basics/markdown-features/index.html index 4292089..93088f3 100644 --- a/guide/tutorial-basics/markdown-features/index.html +++ b/guide/tutorial-basics/markdown-features/index.html @@ -5,13 +5,13 @@ Markdown Features | PZP Wiki - +

Markdown Features

Docusaurus supports Markdown and a few additional features.

Front Matter

Markdown documents have metadata at the top called Front Matter:

my-doc.md
---
id: my-doc-id
title: My document title
description: My document description
slug: /my-custom-url
---

## Markdown heading

Markdown text with [links](./hello.md)

Regular Markdown links are supported, using url paths or relative file paths.

Let's see how to [Create a page](/create-a-page).
Let's see how to [Create a page](./create-a-page.md).

Result: Let's see how to Create a page.

Images

Regular Markdown images are supported.

You can use absolute paths to reference images in the static directory (static/img/docusaurus.png):

![Docusaurus logo](/img/docusaurus.png)

Docusaurus logo

You can reference images relative to the current file as well. This is particularly useful to colocate images close to the Markdown files using them:

![Docusaurus logo](./img/docusaurus.png)

Code Blocks

Markdown code blocks are supported with Syntax highlighting.

```jsx title="src/components/HelloDocusaurus.js"
function HelloDocusaurus() {
return (
<h1>Hello, Docusaurus!</h1>
)
}
```
src/components/HelloDocusaurus.js
function HelloDocusaurus() {
return <h1>Hello, Docusaurus!</h1>;
}

Admonitions

Docusaurus has a special syntax to create admonitions and callouts:

:::tip My tip

Use this awesome feature option

:::

:::danger Take care

This action is dangerous

:::
My tip

Use this awesome feature option

Take care

This action is dangerous

MDX and React Components

MDX can make your documentation more interactive and allows using any React components inside Markdown:

export const Highlight = ({children, color}) => (
<span
style={{
backgroundColor: color,
borderRadius: '20px',
color: '#fff',
padding: '10px',
cursor: 'pointer',
}}
onClick={() => {
alert(`You clicked the color ${color} with label ${children}`)
}}>
{children}
</span>
);

This is <Highlight color="#25c2a0">Docusaurus green</Highlight> !

This is <Highlight color="#1877F2">Facebook blue</Highlight> !

This is Docusaurus green !

This is Facebook blue !

- + \ No newline at end of file diff --git a/guide/tutorial-extras/manage-docs-versions/index.html b/guide/tutorial-extras/manage-docs-versions/index.html index 8215b75..0888171 100644 --- a/guide/tutorial-extras/manage-docs-versions/index.html +++ b/guide/tutorial-extras/manage-docs-versions/index.html @@ -5,13 +5,13 @@ Manage Docs Versions | PZP Wiki - +

Manage Docs Versions

Docusaurus can manage multiple versions of your docs.

Create a docs version

Release a version 1.0 of your project:

npm run docusaurus docs:version 1.0

The docs folder is copied into versioned_docs/version-1.0 and versions.json is created.

Your docs now have 2 versions:

  • 1.0 at http://localhost:3000/docs/ for the version 1.0 docs
  • current at http://localhost:3000/docs/next/ for the upcoming, unreleased docs

Add a Version Dropdown

To navigate seamlessly across versions, add a version dropdown.

Modify the docusaurus.config.js file:

docusaurus.config.js
module.exports = {
themeConfig: {
navbar: {
items: [
{
type: 'docsVersionDropdown',
},
],
},
},
};

The docs version dropdown appears in your navbar:

Docs Version Dropdown

Update an existing version

It is possible to edit versioned docs in their respective folder:

  • versioned_docs/version-1.0/hello.md updates http://localhost:3000/docs/hello
  • docs/hello.md updates http://localhost:3000/docs/next/hello
- + \ No newline at end of file diff --git a/guide/tutorial-extras/translate-your-site/index.html b/guide/tutorial-extras/translate-your-site/index.html index d716e1b..05f217a 100644 --- a/guide/tutorial-extras/translate-your-site/index.html +++ b/guide/tutorial-extras/translate-your-site/index.html @@ -5,13 +5,13 @@ Translate your site | PZP Wiki - +

Translate your site

Let's translate docs/intro.md to French.

Configure i18n

Modify docusaurus.config.js to add support for the fr locale:

docusaurus.config.js
module.exports = {
i18n: {
defaultLocale: 'en',
locales: ['en', 'fr'],
},
};

Translate a doc

Copy the docs/intro.md file to the i18n/fr folder:

mkdir -p i18n/fr/docusaurus-plugin-content-docs/current/

cp docs/intro.md i18n/fr/docusaurus-plugin-content-docs/current/intro.md

Translate i18n/fr/docusaurus-plugin-content-docs/current/intro.md in French.

Start your localized site

Start your site on the French locale:

npm run start -- --locale fr

Your localized site is accessible at http://localhost:3000/fr/ and the Getting Started page is translated.

caution

In development, you can only use one locale at a same time.

Add a Locale Dropdown

To navigate seamlessly across languages, add a locale dropdown.

Modify the docusaurus.config.js file:

docusaurus.config.js
module.exports = {
themeConfig: {
navbar: {
items: [
{
type: 'localeDropdown',
},
],
},
},
};

The locale dropdown now appears in your navbar:

Locale Dropdown

Build your localized site

Build your site for a specific locale:

npm run build -- --locale fr

Or build your site to include all the locales at once:

npm run build
- + \ No newline at end of file diff --git a/index.html b/index.html index dd1d4e3..8355522 100644 --- a/index.html +++ b/index.html @@ -5,13 +5,13 @@ PZP Wiki | PZP Wiki - +

PZP Wiki

A rad p2p protocol

Easy to Use

Easy to Use

Docusaurus was designed from the ground up to be easily installed and used to get your website up and running quickly.

Focus on What Matters

Focus on What Matters

Docusaurus lets you focus on your docs, and we'll do the chores. Go ahead and move your docs into the docs directory.

Powered by React

Powered by React

Extend or customize your website layout by reusing React. Docusaurus can be extended while reusing the same header and footer.

- + \ No newline at end of file diff --git a/markdown-page/index.html b/markdown-page/index.html index 504c701..cea7c59 100644 --- a/markdown-page/index.html +++ b/markdown-page/index.html @@ -5,13 +5,13 @@ Markdown page example | PZP Wiki - +

Markdown page example

You don't need React to write simple standalone pages.

- + \ No newline at end of file