diff --git a/src/app/docs/layers/documents/page.mdx b/src/app/docs/layers/documents/page.mdx index 9ac558b5..c3d3b287 100644 --- a/src/app/docs/layers/documents/page.mdx +++ b/src/app/docs/layers/documents/page.mdx @@ -14,7 +14,7 @@ Authors create and join documents: mutable key-value stores that multiple users /> -## Documents +## Document Namespaces A document is a _namespace_ that is uniquely identified by a keypair. @@ -49,14 +49,24 @@ ktrygcpxealfdtfmohw66nb2keivu52opk65cyj4j7jy7wior7ea Document IDs are base32-lower serialization of the public key of the document. They do _not_ change as the document changes. -{/* -## Permissions +## Syncronizing Documents -## Multiple Writers +When an author wants to sync with a document, they first find the document's current state, then they perform a [range-based set reconciliation](https://arxiv.org/abs/2212.13567) to fill in any changes in the keyspace. -## Collaging +When two nodes want to sync, they perform a range-based set reconciliation to fill in any changes in the keyspace. Any node with the read key (document ID) can read & sync the latest state of the document. Having the read key denotes read access. All entries in the document are double-signed, once with an authorID (keypair) and the write key of the document. -## Subscriptions + +Check out our [youtube video](https://www.youtube.com/watch?v=_D_tbAMqADM) on how range-based set reconciliation works! + -## Revocations & Key Rotations -*/} +After this synchronization step, we know the hashes of all the content the document references. By default iroh documents will fetch all content associated with the document. + +## Document PubSub + +Every document is it's own pubsub swarm, keyed by the public key of the document. Iroh pubsub swarms implement techniques described in [HyParView](https://asc.di.fct.unl.pt/~jleitao/pdf/dsn07-leitao.pdf?ref=bartoszsypytkowski.com) & PlumTree to keep a bounded number of active nodes any one node in the swarm needs to push to. + + +Bartosz Sypytkowski has a great [blog post](https://www.bartoszsypytkowski.com/hyparview/) on HyParView & Plumtree, well worth reading. + + +As authors write to a document, they publish these changes as pubsub messages that other peers pick up on & apply to their local state. diff --git a/src/components/BlogPostLayout.jsx b/src/components/BlogPostLayout.jsx index e514895a..437c895d 100644 --- a/src/components/BlogPostLayout.jsx +++ b/src/components/BlogPostLayout.jsx @@ -47,13 +47,12 @@ export function BlogPostLayout({ article, references = [], children }) {

{article.title}

- - by {article.author} + + + {' '}by {article.author} + {children} diff --git a/src/components/GithubStars.jsx b/src/components/GithubStars.jsx index 415f1cf0..e04add46 100644 --- a/src/components/GithubStars.jsx +++ b/src/components/GithubStars.jsx @@ -6,7 +6,7 @@ export default function GithubStars(props) { return ( - 1.4k + 1.5k ) } \ No newline at end of file diff --git a/src/components/Header.jsx b/src/components/Header.jsx index dc3feca3..d12c7d94 100644 --- a/src/components/Header.jsx +++ b/src/components/Header.jsx @@ -17,6 +17,7 @@ import {ThemeToggle} from '@/components/ThemeToggle'; import GithubStars from './GithubStars'; export const navItems = [ + {content: 'Blog', href: '/blog'}, {content: 'Docs', href: '/docs'}, {content: 'YouTube', href: 'https://www.youtube.com/@n0computer'}, ]; @@ -26,7 +27,7 @@ export function TopLevelNavItem({href, children}) {
  • {children} diff --git a/src/components/Navigation.jsx b/src/components/Navigation.jsx index 2ab11e37..8d9f81a5 100644 --- a/src/components/Navigation.jsx +++ b/src/components/Navigation.jsx @@ -221,6 +221,7 @@ export function Navigation(props) { return (