diff --git a/.cspell.json b/.cspell.json index 4690b49..0eab76b 100644 --- a/.cspell.json +++ b/.cspell.json @@ -31,7 +31,14 @@ "Dappnode", "gameplay", "Smol", - "Datagram" + "Datagram", + "Graphcast", + "permissionless", + "Royer", + "Secureum", + "Oskar", + "ThorĂ©n", + "autoplay" ], "flagWords": [], "ignorePaths": [ diff --git a/README.md b/README.md index 8443f08..02c548f 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ -# Waku Documentation Portal +# Waku Docs Portal -[![Waku Documentation Portal](https://img.shields.io/badge/waku.guide-black)](https://waku.guide/) +[![Waku Docs Portal](https://img.shields.io/badge/waku.guide-black)](https://waku.guide/) -The Waku Documentation Portal can be accessed at [waku.guide](https://waku.guide) and was built using [Docusaurus 2](https://docusaurus.io/), a modern static website generator. +The Waku Docs Portal can be accessed at [waku.guide](https://waku.guide) and was built using [Docusaurus 2](https://docusaurus.io/), a modern static website generator. ## Prerequisites @@ -36,7 +36,17 @@ yarn start Check for spelling errors before deploying: ```bash -npm run check:spell +yarn check:spell +``` + +Create a production build locally to check for errors: + +```bash +yarn build + +# test the build + +yarn serve ``` ## Configuration diff --git a/docs/browser/build-chat-app.mdx b/docs/clients/js-waku/build-chat-app.mdx similarity index 98% rename from docs/browser/build-chat-app.mdx rename to docs/clients/js-waku/build-chat-app.mdx index c85977f..464e988 100644 --- a/docs/browser/build-chat-app.mdx +++ b/docs/clients/js-waku/build-chat-app.mdx @@ -121,7 +121,7 @@ await waku.waitForRemotePeer(wakuNode) The `contentTopic` is a metadata `string` used for categorizing messages on the Waku network. Depending on your use case, you can create one or more new `contentTopic`(s). -Refer to our [How to Choose a Content Topic](/overview/concepts/content-topics) guide more details. +Refer to our [How to Choose a Content Topic](/) guide more details. For this guide, we'll use `/chat-app-guide/1/message/utf8`. Note that our payload will be encoded using `utf-8`. diff --git a/docs/browser/introduction.mdx b/docs/clients/js-waku/index.md similarity index 93% rename from docs/browser/introduction.mdx rename to docs/clients/js-waku/index.md index 8d7ea6e..e5762b4 100644 --- a/docs/browser/introduction.mdx +++ b/docs/clients/js-waku/index.md @@ -1,5 +1,6 @@ --- title: Introduction +slug: /clients/js-waku --- # JS-Waku Documentation @@ -16,8 +17,8 @@ If you wish to use Waku with a NodeJS application, you can either: ::: -To get started, the [Quick Start](./quick-start) guide offers a simple way to integrate Waku into your web app. -For a more comprehensive tutorial, follow the [Build a Chat App](./build-chat-app) guide, +To get started, the [Quick Start](/) guide offers a simple way to integrate Waku into your web app. +For a more comprehensive tutorial, follow the [Build a Chat App](/) guide, which demonstrates how to create a chat app from scratch. Explore the [js-waku-examples repository](https://github.com/waku-org/js-waku-examples) to find various working Proof-of-Concepts that showcase how to use JS-Waku effectively. diff --git a/docs/browser/quick-start.mdx b/docs/clients/js-waku/quick-start.mdx similarity index 96% rename from docs/browser/quick-start.mdx rename to docs/clients/js-waku/quick-start.mdx index 06ff46f..23836b9 100644 --- a/docs/browser/quick-start.mdx +++ b/docs/clients/js-waku/quick-start.mdx @@ -49,7 +49,7 @@ await waku.waitForRemotePeer(wakuNode) The `contentTopic` is a metadata `string` used for categorizing messages on the Waku network. Depending on your use case, you can create one or more new `contentTopic`(s). -Refer to our [How to Choose a Content Topic](/overview/concepts/content-topics) guide more details. +Refer to our [How to Choose a Content Topic](/) guide more details. For this guide, we'll use `/quick-start/1/message/utf8`. Note that our payload will be encoded using `utf-8`. diff --git a/docs/community.md b/docs/community.md new file mode 100644 index 0000000..37ba2bb --- /dev/null +++ b/docs/community.md @@ -0,0 +1,21 @@ +--- +title: Join Our Community +--- + +Welcome to the Waku Community! Whether you're interested in building with Waku, contributing to the network, expanding your knowledge, or staying up-to-date with our progress, we have something for everyone. + +## [Discord](https://discord.waku.org/) + +Connect with like-minded individuals in the Waku ecosystem! Introduce yourself, join developer conversations, or seek assistance. Join the [Waku Discord](https://discord.waku.org/) today! + +## [Twitter](https://twitter.com/waku_org) + +Stay informed and updated with the latest news and insights from Waku. [Follow us on Twitter](https://twitter.com/waku_org) now for all the exciting updates! + +## [Telegram](https://t.me/waku_org) + +Join the [Waku Telegram Group](https://t.me/waku_org) now and become part of the thriving community! Stay informed, share ideas, and connect with fellow enthusiasts. + +## [Vac Forum](https://forum.vac.dev/) + +Have you got questions, or are you eager to discuss Waku? Head to the [Vac Forum](https://forum.vac.dev/) and join the conversation! \ No newline at end of file diff --git a/docs/contribute.md b/docs/contribute.md new file mode 100644 index 0000000..01cc3f4 --- /dev/null +++ b/docs/contribute.md @@ -0,0 +1,31 @@ +--- +title: Contribute to Waku +--- + +Get involved in Waku's open-source initiatives to improve the protocols, SDKs, developer tools and examples, and documentation. + +## Build a Waku Application + +By integrating Waku into your application, you can contribute by: + +- [Operating a node](/guides/sdks-and-nodes#operate-a-waku-node) within your application. +- Reporting bugs and suggesting missing features to the development team. +- Inspiring other developers to explore and utilize Waku for [various use cases](/getting-started/use-cases). + +Begin your journey by visiting the [SDKs and Nodes](/guides/sdks-and-nodes) guide and start building today! + +## Report a Bug + +To report a bug, create an issue in the appropriate [GitHub repository](https://github.com/waku-org). Ensure no issue exists about the bug and include detailed steps to reproduce the bug. + +## Request a Feature + +To request a new feature, create an issue in the appropriate [GitHub repository](https://github.com/waku-org). Ensure no issue exists about the feature and specify the use cases the feature can enable, allowing us to investigate and prioritize accordingly. + +## Make Pull Requests + +Community pull requests (PRs) are highly encouraged, but we recommend beginning with a feature request or posting on the [Waku Discord](https://discord.waku.org/) to gauge interest and gather feedback before proceeding with a PR. + +## Contribute to Waku Research + +[Vac](https://vac.dev/) drives Waku research, advancing through ongoing R&D. Vac is dedicated to developing modular p2p protocols for private, secure, and censorship-resistant communication. Explore Vac's open problems at . \ No newline at end of file diff --git a/docs/overview/concepts/content-topics.md b/docs/getting-started/concepts/content-topics.md similarity index 59% rename from docs/overview/concepts/content-topics.md rename to docs/getting-started/concepts/content-topics.md index a7a69a1..10de916 100644 --- a/docs/overview/concepts/content-topics.md +++ b/docs/getting-started/concepts/content-topics.md @@ -2,7 +2,7 @@ title: Content Topics --- -`Content Topics` are metadata strings set by developers on outgoing messages to facilitate protocol-level features like selectively processing incoming messages ([Relay](/overview/concepts/protocols#waku-relay) or [Filter](/overview/concepts/protocols#waku-filter)) and retrieving historical messages ([Store](/overview/concepts/protocols#waku-store)) that meet specific filtering criteria. Please refer to the [WAKU2-TOPICS](https://rfc.vac.dev/spec/23/#content-topics) specification to learn more. +`Content Topics` are metadata strings set by developers on outgoing messages to facilitate protocol-level features like selectively processing incoming messages ([Relay](/getting-started/concepts/protocols#relay) or [Filter](/getting-started/concepts/protocols#filter)) and retrieving historical messages ([Store](/getting-started/concepts/protocols#store)) that meet specific filtering criteria. Please refer to the [WAKU2-TOPICS](https://rfc.vac.dev/spec/23/#content-topics) specification to learn more. ## Content Topic Format @@ -13,9 +13,13 @@ Here is the recommended format for content topics: - `application-name`: This is the unique name of your decentralized application (dApp) to prevent conflicts with other dApps. - `version`: Typically starting at 1, this field helps track breaking changes in your messages. - `content-topic-name`: The specific name of the content topic used for filtering. If your dApp utilizes Waku for multiple features, it is advisable to have a separate content topic for each feature. -- `encoding`: The message serialization/encoding format, with [Protobuf](https://protobuf.dev/) (`proto`) being the commonly used choice. +- `encoding`: The message serialization/encoding format, with [Protocol Buffers](https://protobuf.dev/) (`proto`) being the commonly used choice. For instance, if your dApp is called `SuperCrypto` and it allows users to receive notifications and send private messages, you can consider utilizing the following content topics: - `/supercrypto/1/notification/proto` - `/supercrypto/1/private-message/proto` + +:::info +While you can choose any encoding format for your `Content Topic`, we highly recommend using [Protocol Buffers](https://protobuf.dev/) (`proto`) because of its efficiency. Choosing a lightweight format ensures optimal performance of your dApp. +::: \ No newline at end of file diff --git a/docs/overview/concepts/network-domains.md b/docs/getting-started/concepts/network-domains.md similarity index 58% rename from docs/overview/concepts/network-domains.md rename to docs/getting-started/concepts/network-domains.md index eef3c86..acea4b2 100644 --- a/docs/overview/concepts/network-domains.md +++ b/docs/getting-started/concepts/network-domains.md @@ -1,24 +1,26 @@ --- -title: Network Interaction Domains +title: Network Domains --- Waku is a unified and cohesive entity that offers a rich ecosystem with three distinct network interaction domains. These domains serve specialized purposes and contribute to the robust functionality of Waku, forming its foundation. ## Discovery Domain -Node discovery in Waku facilitates locating other nodes within the network. As a modular protocol, Waku incorporates various discovery mechanisms, such as [`Discv5`](/overview/concepts/node-discovery#discv5) and [`Peer Exchange`](/overview/concepts/node-discovery#peer-exchange). These mechanisms allow developers to choose the most suitable option(s) for their specific use cases and user environments, including mobile phones, desktop browsers, servers, and more. +Peer discovery in Waku facilitates locating other peers within the network. As a modular protocol, Waku incorporates various discovery mechanisms, such as [Discv5](/getting-started/concepts/peer-discovery#discv5) and [Peer Exchange](/getting-started/concepts/peer-discovery#peer-exchange). These mechanisms allow developers to choose the most suitable option(s) for their specific use cases and user environments, including mobile phones, desktop browsers, servers, and more. ## Gossip Domain Gossipsub derives its name from the practice within Pub/Sub networks where peers gossip about the messages they have encountered, thus establishing a message delivery network. -Waku employs gossiping through [`Waku Relay`](/overview/concepts/protocols#waku-relay) to distribute messages across the network. Additionally, Waku introduces [`Waku RLN Relay`](/overview/concepts/protocols#waku-rln-relay), an experimental mechanism that combines privacy preservation and economic spam protection. +Waku employs gossiping through [Relay](/getting-started/concepts/protocols#relay) to distribute messages across the network. Additionally, Waku introduces [RLN Relay](/getting-started/concepts/protocols#rln-relay), an experimental mechanism that combines privacy preservation and economic spam protection. ## Request/Reply Domain -Waku provides a set of Request/Reply protocols to optimize its performance in resource-restricted environments like low bandwidth or offline scenarios. +Waku provides a set of protocols to optimize its performance in resource-limited environments like low bandwidth or offline scenarios for multiple purposes. -These protocols serve multiple purposes. [`Waku Store`](/overview/concepts/protocols#waku-store) enables the retrieval of historical messages, [`Waku Filter`](/overview/concepts/protocols#waku-filter) efficiently retrieves a subset of messages to conserve bandwidth, and [`Waku Light Push`](/overview/concepts/protocols#waku-light-push) facilitates message publication for nodes with limited bandwidth and short connection windows. +- [Store](/getting-started/concepts/protocols#store) enables the retrieval of historical messages. +- [Filter](/getting-started/concepts/protocols#filter) efficiently retrieves a subset of messages to conserve bandwidth. +- [Light Push](/getting-started/concepts/protocols#light-push) facilitates message publication for nodes with limited bandwidth and short connection windows. ## Overview of Protocol Interaction @@ -46,9 +48,9 @@ E ->> D: HistoryQuery(pubtopic1, contentTopic1) (6) D ->> E: HistoryResponse(msg1, ...) (6) ``` -The Pub/Sub topic `pubtopic1` serves as a means of routing messages (the network employs a default pubsub topic) and indicates that it is subscribed to messages on that topic for a relay. In the context of Waku Store, Node D is responsible for persisting these messages. +The Pub/Sub topic `pubtopic1` serves as a means of routing messages (the network employs a default pubsub topic) and indicates that it is subscribed to messages on that topic for a relay. Node D serves as a `Store` and is responsible for persisting messages. -1. Node A creates a WakuMessage `msg1` with a [ContentTopic](/overview/concepts/content-topics) `contentTopic1`. +1. Node A creates a WakuMessage `msg1` with a [ContentTopic](/getting-started/concepts/content-topics) `contentTopic1`. 2. Node F requests to get messages filtered by Pub/Sub topic `pubtopic1` and ContentTopic `contentTopic1`. Node D subscribes F to this filter and will forward messages that match that filter in the future. 3. Node A publishes `msg1` on `pubtopic1`. The message is sent from Node A to Node B and then forwarded to Node D. 4. Node D, upon receiving `msg1` both stores the message for future retrieval by other nodes and forwards it to Node C. diff --git a/docs/overview/concepts/node-discovery.md b/docs/getting-started/concepts/peer-discovery.md similarity index 69% rename from docs/overview/concepts/node-discovery.md rename to docs/getting-started/concepts/peer-discovery.md index d5a1e15..cc51234 100644 --- a/docs/overview/concepts/node-discovery.md +++ b/docs/getting-started/concepts/peer-discovery.md @@ -1,18 +1,18 @@ --- -title: Node Discovery Mechanisms +title: Peer Discovery --- -When initializing a Waku node, it must connect with other nodes to enable message sending, receiving, and retrieval. To achieve this, a discovery mechanism is employed to locate and connect with other nodes. This process is known as bootstrapping. +When initializing a Waku node, it must connect with other peers to enable message sending, receiving, and retrieval. To achieve this, a discovery mechanism is employed to locate and connect with other peers. This process is known as bootstrapping. -After establishing a connection, the node must actively seek out additional peers to have: +Once a connection is established, the node must actively seek out additional peers to have: -- Sufficient peers in the [Waku Relay](/overview/concepts/protocols#waku-relay) mesh: The goal is to have at least 6 peers in the mesh. This ensures a robust network where messages can be efficiently relayed. +- Sufficient peers in the [Relay](/getting-started/concepts/protocols#relay) mesh: The goal is to have at least 6 peers in the mesh. This ensures a robust network where messages can be efficiently relayed. - Reserve peers for backup: It is essential to have a surplus of peers available as reserves. These reserves are backups when the current peers become overloaded or experience unexpected disconnections. -- Peers with specific Waku capabilities: The node seeks out peers with specific Waku capabilities, such as [Store](/overview/concepts/protocols#waku-store), [Light Push](/overview/concepts/protocols#waku-light-push), or [Filter](/overview/concepts/protocols#waku-filter). This allows for targeted interactions and enhanced functionality based on the desired capabilities. +- Peers with specific capabilities: The node seeks out peers with specific capabilities, such as [Store](/getting-started/concepts/protocols#store), [Light Push](/getting-started/concepts/protocols#light-push), or [Filter](/getting-started/concepts/protocols#filter). This allows for targeted interactions and enhanced functionality based on the desired capabilities. -## Predefined Bootstrap Nodes +## Predefined Nodes -Waku applications have the flexibility to embed bootstrap node addresses directly into their codebase. Developers can opt to utilize either the [pre-deployed nodes by Status](https://github.com/waku-org/js-waku/blob/master/packages/core/src/lib/predefined_bootstrap_nodes.ts#L45) or [set up their nodes](https://github.com/waku-org/nwaku/tree/master/docs/operators) per their preference. +Waku applications have the flexibility to embed bootstrap node addresses directly into their codebase. Developers can opt to utilize either the [predefined nodes by Status](https://github.com/waku-org/js-waku/blob/master/packages/core/src/lib/predefined_bootstrap_nodes.ts#L45) or [operate a node](/guides/sdks-and-nodes#operate-a-waku-node) per their preference. #### Pros @@ -58,7 +58,7 @@ This bootstrapping method allows anyone to register and publish a domain name fo ## [Peer Exchange](https://rfc.vac.dev/spec/34/) -The primary objective of this protocol is to facilitate peer connectivity for resource-restricted devices. The peer exchange protocol enables lightweight nodes to request peers from other nodes within the network. Light nodes can bootstrap and expand their mesh independently without relying on [Discv5](#discv5). +The primary objective of this protocol is to facilitate peer connectivity for resource-limited devices. The peer exchange protocol enables lightweight nodes to request peers from other nodes within the network. Light nodes can bootstrap and expand their mesh independently without relying on `Discv5`. #### Pros diff --git a/docs/getting-started/concepts/protocols.md b/docs/getting-started/concepts/protocols.md new file mode 100644 index 0000000..9b5ba55 --- /dev/null +++ b/docs/getting-started/concepts/protocols.md @@ -0,0 +1,43 @@ +--- +title: Protocols +--- + +Waku takes a modular approach, providing a range of protocols that enable applications to control the trade-offs involved in the [Anonymity Trilemma](https://eprint.iacr.org/2017/954.pdf). This flexibility empowers applications to make informed choices regarding the desired balance between anonymity, scalability, and latency. Here are the main protocols provided by Waku: + +## [Relay](https://rfc.vac.dev/spec/11/) + +`Relay` protocol employs a Pub/Sub architecture to facilitate message routing among peers. It extends the [libp2p GossipSub protocol](https://github.com/libp2p/specs/blob/master/pubsub/gossipsub/README.md) to create a privacy-focused peer-to-peer messaging protocol that enables secure communication channels, encryption, and protection against censorship. + +## [RLN Relay](https://rfc.vac.dev/spec/17/) + +`RLN Relay` protocol extends the `Relay` protocol by using [Rate Limit Nullifiers (RLN)](https://rfc.vac.dev/spec/32/) to provide efficient and economic spam prevention. It caps the bandwidth usage for all peers on the network, effectively preventing spam, and imposes financial penalties and network removal for spammers. You can find more details in the [RLN Relay blog post](https://vac.dev/rln-relay). + +## [Filter](https://rfc.vac.dev/spec/12/) + +`Filter` protocol allows light nodes to selectively subscribe to specific messages transmitted by other peers. It is designed to be a lightweight alternative to the `Relay` protocol, particularly tailored for devices with limited bandwidth. + +## [Store](https://rfc.vac.dev/spec/13/) + +`Store` protocol is responsible for storing messages relayed on the network, making it possible to query and retrieve them later. This functionality benefits offline peers by enabling them to retrieve missed messages upon reconnection. + +:::info +Using `Relay` and `Filter` protocols is recommended when a node is online, as `Store` does not guarantee data availability. The `Store` protocol is suitable for retrieving messages when connecting to the network, like when a dApp starts. +::: + +## [Light Push](https://rfc.vac.dev/spec/19/) + +`Light Push` is a [Request/Reply](/getting-started/concepts/network-domains#requestreply-domain) protocol for nodes with limited bandwidth and short connection windows. It allows a client to receive an acknowledgment when sending messages, indicating that at least one peer has received them. + +:::info +While the `Light Push` protocol acknowledges the receipt by the remote peer, it does not guarantee network-wide propagation. +::: + +## [Waku Message](https://rfc.vac.dev/spec/14) + +`Waku Message` specifies the message structure used in the Waku network. It defines the attributes and metadata fields that accompany a message, including the following: + +- `content_topic` attribute for [content-based filtering](/getting-started/concepts/content-topics). +- `payload` attribute containing the message data payload to be sent. +- `meta` attribute for conveying additional details to various protocols for application-specific processing. +- `timestamp` attribute signifying the time at which the message was generated by its sender. +- `ephemeral` attribute specifying whether the network should not persist the message. \ No newline at end of file diff --git a/docs/overview/concepts/transports.md b/docs/getting-started/concepts/transports.md similarity index 95% rename from docs/overview/concepts/transports.md rename to docs/getting-started/concepts/transports.md index 836e09c..3959e4d 100644 --- a/docs/overview/concepts/transports.md +++ b/docs/getting-started/concepts/transports.md @@ -1,12 +1,12 @@ --- -title: Transports in Waku +title: Transports --- Transports help move data packets across a network by establishing connections between members. They define the rules and protocols to ensure efficient network transmission, routing, and data delivery. Waku is a transport-agnostic framework that allows developers to choose and support multiple protocols according to their requirements. For Waku nodes, the following transports are recommended: -- **TCP:** By default, Waku nodes utilize TCP for communication. Service nodes should employ TCP for listening to and connecting with other nodes. +- **TCP:** By default, Waku nodes utilize TCP for communication. Service nodes should employ TCP for listening to and connecting with other peers. - **Secure WebSocket:** In browser environments, secure WebSocket is used. Service nodes are encouraged to set up SSL certificates to enable incoming connections from browsers and serve them securely. - Other protocols like [WebRTC](https://github.com/waku-org/js-waku/issues/20), [WebTransport](https://github.com/waku-org/js-waku/issues/697), and QUIC have been researched and studied for potential integration. diff --git a/docs/getting-started/history.md b/docs/getting-started/history.md new file mode 100644 index 0000000..3920749 --- /dev/null +++ b/docs/getting-started/history.md @@ -0,0 +1,57 @@ +--- +title: History of Waku +--- + +`Waku v1` was a fork of Whisper with some added tweaks for efficiency. `Waku v2` introduces a fully revamped suite of protocols designed to address the goals set out [previously](/#motivation-and-goals). + +```mermaid +%%{init: { 'logLevel': 'debug', 'theme': 'base', 'gitGraph': {'showBranches': true, 'showCommitLabel':true,'mainBranchName': 'HISTORY'}} }%% +gitGraph + commit id:"2013" + commit id:"2015" tag:"R&D" + commit id:"2018" tag:"R&D" type: HIGHLIGHT + branch v1 + checkout v1 + commit id:"2020" tag:"release" + checkout HISTORY + merge v1 + branch v2 + checkout v2 + commit id:"2021" tag:"release" + checkout HISTORY + merge v2 + commit id:"đŸ”¥" +``` + +### 2013 + +The Ethereum White Paper was published, unveiling the holy trinity of Web3, comprising: + +- Ethereum for consensus. +- Swarm for decentralized storage. +- Whisper for peer-to-peer messaging. + +### 2015-2018 + +The development of the Whisper protocol lagged behind the advancements made by the Ethereum EVM and Swarm, primarily because there was no dedicated team working on building the protocol. + +### 2018 + +Due to the lack of progress made on Whisper and growing concerns around scalability, [Vac](https://vac.dev/) was established to focus on researching and developing more scalable peer-to-peer messaging solutions. + +### 2020 + +`Waku v1` replaces Whisper as the messaging protocol in Status, resulting in the following: + +- Enhanced performance. +- Better scalability. +- Ability to work in resource-limited environments. +- And many more. + +### 2021 + +`Waku v2` releases with a fully revamped suite of protocols that not only supersedes but also surpasses the performance of `Waku v1`. + +### Present Day + +Waku has continued to evolve and enhance itself, solidifying its position as the standard for Web3 communication. \ No newline at end of file diff --git a/docs/overview/what-is-waku.md b/docs/getting-started/index.md similarity index 60% rename from docs/overview/what-is-waku.md rename to docs/getting-started/index.md index b022b47..584966b 100644 --- a/docs/overview/what-is-waku.md +++ b/docs/getting-started/index.md @@ -3,9 +3,13 @@ title: What is Waku? slug: / --- -Waku is a family of peer-to-peer protocols that offer secure and private communication in a decentralized environment, making it suitable for various decentralized applications (dApps). It is designed to operate in resource-limited environments but can also be used as a node or desktop application. +:::caution +Waku has risks and limitations as it is still developing and preparing for extensive adoption. However, it is already demonstrating its capabilities by [powering various applications](/powered-by-waku). [Join our community](/community) to stay updated on our progress. +::: -Waku protocols ensure that users communication remains censorship-resistant and privacy-preserving, giving them complete control over their data. By incorporating Waku into your dApp, you can add decentralized communication features to your application without compromising security or privacy. +Waku, the standard of Web3 communication, is a family of protocols that offer secure, private, and peer-to-peer communication in a decentralized environment. It is designed to operate in resource-limited environments but can also be used as a node or desktop application. + +Waku protocols ensure that users communication remains censorship-resistant and privacy-preserving, giving them complete control over their data. By integrating Waku into your dApp, you can add decentralized communication features to your application without compromising security or privacy. ## Motivation and Goals @@ -25,7 +29,7 @@ Waku is suitable for applications that require a peer-to-peer approach, offering ### Platform Agnostic -Waku can run on any platform or environment, even in restricted settings with limited resources like bandwidth, CPU, memory, disk, battery, etc. It can also function when the nodes are not publicly connected or are primarily offline. +Waku can run on any platform or environment, even settings with limited resources like bandwidth, CPU, memory, disk, battery, etc. It can also function when the nodes are not publicly connected or are primarily offline. ### Privacy-Preserving @@ -33,7 +37,7 @@ Waku can cater to applications that require privacy guarantees, such as: - Pseudonymity and not being tied to any Personally Identifiable Information (PII). - Metadata protection in transit. -- Various forms of [unlinkability](overview/reference/security-features#anonymityunlinkability). +- Various forms of [unlinkability](/getting-started/reference/security-features#anonymityunlinkability). ### Modular Design @@ -47,13 +51,13 @@ These options are part of the [Anonymity Trilemma](https://eprint.iacr.org/2017/ ## How Does Waku Work? -The [Waku Relay](overview/concepts/protocols#waku-relay) protocol is the foundation of the Waku network, which employs a Pub/Sub architecture built on the [libp2p GossipSub protocol](https://github.com/libp2p/specs/blob/master/pubsub/gossipsub/README.md). Additionally, various other Waku protocols have been created to facilitate specific functionalities, including but not limited to: +The [Relay](/getting-started/concepts/protocols#relay) protocol is the foundation of the Waku network, which employs a Pub/Sub architecture built on the [libp2p GossipSub protocol](https://github.com/libp2p/specs/blob/master/pubsub/gossipsub/README.md). Additionally, various other Waku protocols have been created to facilitate specific functionalities, including but not limited to: 1. Facilitating the retrieval of historical messages for primarily offline devices. 2. Providing solutions for encrypted communication, such as symmetric encryption, ECIES/asymmetric encryption, and noise handshake-based key turns. 3. Preserving bandwidth usage for resource-limited environments. 4. Implementing economic spam protection (rate limits) while ensuring privacy. 5. Developing methods to protect against mass deanonymization (currently being researched). -6. Designing strategies to scale `Waku Relay/GossipSub` securely. +6. Designing strategies to scale `Relay/GossipSub` securely. If you want to learn more about how Waku operates, the [WAKU2 RFC](https://rfc.vac.dev/spec/10/) provides an in-depth look under the hood. diff --git a/docs/getting-started/reference/glossary.md b/docs/getting-started/reference/glossary.md new file mode 100644 index 0000000..3bd3fac --- /dev/null +++ b/docs/getting-started/reference/glossary.md @@ -0,0 +1,7 @@ +--- +title: Glossary +--- + +# Waku Docs Glossary + +Definitions and usage of the terminology used in the Waku ecosystem. \ No newline at end of file diff --git a/docs/overview/reference/research-in-progress.md b/docs/getting-started/reference/research-in-progress.md similarity index 66% rename from docs/overview/reference/research-in-progress.md rename to docs/getting-started/reference/research-in-progress.md index 46a26fb..8b23ad5 100644 --- a/docs/overview/reference/research-in-progress.md +++ b/docs/getting-started/reference/research-in-progress.md @@ -6,15 +6,15 @@ The following features are currently experimental and under research and initial ## Economic Spam Resistance -We aim to enable an incentivized spam protection technique to enhance `Waku Relay` by using rate limiting nullifiers. More details on this can be found in [WAKU2-RLN-RELAY](https://rfc.vac.dev/spec/17). In this advanced method, peers are limited to a certain rate of messaging per epoch and an immediate financial penalty is enforced for spammers who break this rate. +We aim to enable an incentivized spam protection technique to enhance `Relay` by using [Rate Limit Nullifiers (RLN)](https://rfc.vac.dev/spec/32/). In this advanced method, peers are limited to a certain messaging rate per epoch, and an immediate financial penalty is enforced for spammers who break this rate. You can find more details in the [RLN Relay blog post](https://vac.dev/rln-relay). We have prepared a PoC implementation of this method in JS: ## Prevention of Denial of Service (DoS) and Node Incentivization -Denial of service signifies the case where an adversarial node exhausts another node's service capacity (e.g., by making a large number of requests) and makes it unavailable to the rest of the system. RnD on DoS attack mitigation can tracked from here: . +Denial of service signifies the case where an adversarial peer exhausts another peer's service capacity (e.g., by making a large number of requests) and makes it unavailable to the rest of the system. RnD on DoS attack mitigation can tracked from here: . -In a nutshell, peers have to pay for the service they obtain from each other. In addition to incentivizing the service provider, accounting also makes DoS attacks costly for malicious peers. The accounting model can be used in `Waku Store` and `Waku Filter` to protect against DoS attacks. +In a nutshell, peers have to pay for the service they obtain from each other. In addition to incentivizing the service provider, accounting also makes DoS attacks costly for malicious peers. The accounting model can be used in `Store` and `Filter` to protect against DoS attacks. Additionally, along with RLN, this gives node operators who provide a useful service to the network an incentive to perform that service. Read more here: diff --git a/docs/overview/reference/security-features.md b/docs/getting-started/reference/security-features.md similarity index 57% rename from docs/overview/reference/security-features.md rename to docs/getting-started/reference/security-features.md index ae7d623..d218eff 100644 --- a/docs/overview/reference/security-features.md +++ b/docs/getting-started/reference/security-features.md @@ -14,19 +14,19 @@ Waku ensures pseudonymity across its protocol layers, using libp2p `PeerID` as i Anonymity means an adversary cannot connect an actor to their actions or data. To achieve anonymity, avoiding linking activities with actors or their Personally Identifiable Information (PII) is crucial. In Waku, the following anonymity features are provided: -- [Publisher-Message Unlinkability](https://rfc.vac.dev/spec/11/#security-analysis): Ensures that the publisher of messages in the `Waku Relay` protocol cannot be linked to their published messages. -- [Subscriber-Topic Unlinkability](https://rfc.vac.dev/spec/11/#security-analysis): Ensures that the subscriber of topics in the `Waku Relay` protocol cannot be linked to the topics they have subscribed to. +- [Publisher-Message Unlinkability](https://rfc.vac.dev/spec/11/#security-analysis): Ensures that the publisher of messages in the `Relay` protocol cannot be linked to their published messages. +- [Subscriber-Topic Unlinkability](https://rfc.vac.dev/spec/11/#security-analysis): Ensures that the subscriber of topics in the `Relay` protocol cannot be linked to the topics they have subscribed to. ## [Spam Protection](https://rfc.vac.dev/spec/10/#spam-protection) -The spam protection feature in `Waku Relay` ensures that no adversary can flood the system with many messages, intentionally or not, regardless of the content's validity or usefulness. This protection is achieved through the [scoring mechanism](https://github.com/libp2p/specs/blob/master/pubsub/gossipsub/gossipsub-v1.1.md#spam-protection-measures) of `GossipSub v1.1`. Peers assign scores to their connections based on their behavior and remove peers with low scores. +The spam protection feature in `Relay` ensures that no adversary can flood the system with many messages, intentionally or not, regardless of the content's validity or usefulness. This protection is achieved through the [scoring mechanism](https://github.com/libp2p/specs/blob/master/pubsub/gossipsub/gossipsub-v1.1.md#spam-protection-measures) of `GossipSub v1.1`. Peers assign scores to their connections based on their behavior and remove peers with low scores. -Ongoing research is being conducted, including developing [Rate Limiting Nullifiers (RLN)](overview/concepts/protocols#waku-rln-relay), which can be explored further at: . +Ongoing research is being conducted, including developing [Rate Limit Nullifiers (RLN)](/getting-started/concepts/protocols#rln-relay), which can be explored further at: . ## [Data Confidentiality, Integrity, and Authenticity](https://rfc.vac.dev/spec/10/#data-confidentiality-integrity-and-authenticity) -Confidentiality in Waku is ensured through data encryption, while integrity and authenticity are achieved through digital signatures. These security measures are available in [Waku Message (version 1)](https://rfc.vac.dev/spec/14#version-1) and [Waku Noise](https://rfc.vac.dev/spec/35/) protocols, which offer payload encryption and encrypted signatures. [Waku Noise](https://rfc.vac.dev/spec/35/) also facilitates secure channel negotiation within the Waku network. +Confidentiality in Waku is ensured through data encryption, while integrity and authenticity are achieved through digital signatures. These security measures are available in [Waku Message (version 1)](https://rfc.vac.dev/spec/14#version-1) and [Noise](https://rfc.vac.dev/spec/35/) protocols, which offer payload encryption and encrypted signatures. [Noise](https://rfc.vac.dev/spec/35/) protocols also facilitate secure channel negotiation within the Waku network. ## [Security Considerations](https://rfc.vac.dev/spec/10/#security-considerations) -In protocols like `Waku Store` and `Waku Filter`, where direct connections are required for the designated service, anonymity or unlinkability is not guaranteed. This is because peers use their `PeerID` to identify each other during direct connections, making the service obtained in these protocols linkable to the beneficiary's `PeerID`, considered Personally Identifiable Information (PII). In `Waku Store`, the queried node can link the querying node's `PeerID` to the topics being queried. Similarly, in `Waku Filter`, a full node can link the `PeerID` of a light node to its content filter. \ No newline at end of file +In protocols like `Store` and `Filter`, where direct connections are required for the designated service, anonymity or unlinkability is not guaranteed. This is because nodes use their `PeerID` to identify each other during direct connections, making the service obtained in these protocols linkable to the beneficiary's `PeerID`, considered Personally Identifiable Information (PII). In `Store`, the queried node can link the querying node's `PeerID` to the topics being queried. Similarly, in `Filter`, a node can link the `PeerID` of a light node to its content filter. \ No newline at end of file diff --git a/docs/overview/reference/waku-vs-libp2p.md b/docs/getting-started/reference/waku-vs-libp2p.md similarity index 52% rename from docs/overview/reference/waku-vs-libp2p.md rename to docs/getting-started/reference/waku-vs-libp2p.md index e993f5f..cede5a9 100644 --- a/docs/overview/reference/waku-vs-libp2p.md +++ b/docs/getting-started/reference/waku-vs-libp2p.md @@ -1,21 +1,19 @@ --- -title: Waku vs. libp2p - What's the Difference? +title: Comparing Waku and libp2p --- Since Waku is built on top of libp2p, they share a lot of concepts and terminologies between them. However, there are key differences between them that are worth noting. ## Waku as a Service Network -Waku intends to incentivize mechanisms to run nodes, but it's not part of libp2p's scope. Additionally, users or developers do not have to deploy their infra as a prerequisite to use Waku. It is a service network. - -However, you are encouraged to [run your node](https://github.com/waku-org/nwaku/tree/master/docs/operators) to support and decentralize the network. +Waku intends to incentivize mechanisms to run nodes, but it's not part of libp2p's scope. Additionally, users or developers do not have to deploy their infra as a prerequisite to use Waku. It is a service network. However, you are encouraged to [operate a node](/guides/sdks-and-nodes#operate-a-waku-node) to support and decentralize the network. ## Waku as a Keyturn Solution Waku includes various protocols covering the following domains: privacy preservation, censorship resistance, and platform agnosticism, allowing it to run on any platform or environment. -libp2p does not provide out-of-the-box protocols to enable mostly offline/resource-restricted devices, [Waku Store](/overview/concepts/protocols#waku-store)/[Waku Light Push](/overview/concepts/protocols#waku-light-push)/[Waku Filter](/overview/concepts/protocols#waku-filter) caters to those use cases. +libp2p does not provide out-of-the-box protocols to enable mostly offline/resource-limited devices, [Store](/getting-started/concepts/protocols#store)/[Light Push](/getting-started/concepts/protocols#light-push)/[Filter](/getting-started/concepts/protocols#filter) caters to those use cases. ## Economic Spam Protection -libp2p does not have strong spam protection guarantees, [RLN (Rate Limit Nullifier)](/overview/concepts/protocols#waku-rln-relay) is a protocol being developed by the Waku team towards this goal. +libp2p does not have strong spam protection guarantees, [RLN Relay](/getting-started/concepts/protocols#rln-relay) is a protocol being developed by the Waku team towards this goal. diff --git a/docs/overview/use-cases.md b/docs/getting-started/use-cases.md similarity index 99% rename from docs/overview/use-cases.md rename to docs/getting-started/use-cases.md index 6bb1fc5..31f9272 100644 --- a/docs/overview/use-cases.md +++ b/docs/getting-started/use-cases.md @@ -1,5 +1,5 @@ --- -title: Waku Use Cases +title: Use Cases --- Waku is a decentralized communication network, facilitating secure and private person-to-person and machine-to-machine communication without a central authority. It supports various use cases, including but not limited to: diff --git a/docs/overview/why-waku.md b/docs/getting-started/why-waku.md similarity index 90% rename from docs/overview/why-waku.md rename to docs/getting-started/why-waku.md index d5f3974..59cf28b 100644 --- a/docs/overview/why-waku.md +++ b/docs/getting-started/why-waku.md @@ -11,13 +11,13 @@ Waku is intended to empower individuals by returning control of communication to - It is not confined to a particular blockchain. - It is modular, adaptable, and can cater to various use cases. - It allows developers to decentralize communication in their dApps or move actions off-chain while maintaining decentralization. -- It can run on various platforms, including mobile devices, cloud environments, web browsers, native desktop apps, or even a [Dappnode](https://dappnode.com/)! +- It can run on various platforms, including mobile devices, cloud environments, web browsers, desktop apps, or even a [Dappnode](https://dappnode.com/)! ## Why Waku is Necessary | | Whisper | Waku | | - | - | - | -| **Scalability** | Whisper doesn't scale very well, specifically when it comes to bandwidth usage on mobile devices. | Uses gossipsub and content topics. | +| **Scalability** | Whisper doesn't scale very well, specifically when it comes to bandwidth usage on mobile devices. | Uses GossipSub and Content Topics. | | **Spam Resistance** | Proof of work requires too much battery and compute power making it a poor mechanism for heterogeneous nodes. | Uses innovative p2p economic spam protection mechanism RLN Relay. | | **Incentivization Infrastructure** | There is no incentive to run a Whisper node. | Research in progress to design incentivization for node operators. | | **Formal Specification/Documentation** | Lack of formal and unambiguous specification. | The specs and docs are open-source and licensed under CC0, making them freely available for anyone to read, modify and improve without restrictions. | diff --git a/docs/guides/sdks-and-nodes.md b/docs/guides/sdks-and-nodes.md new file mode 100644 index 0000000..5587e86 --- /dev/null +++ b/docs/guides/sdks-and-nodes.md @@ -0,0 +1,42 @@ +--- +title: SDKs and Nodes +--- + +:::caution +Waku has risks and limitations as it is still developing and preparing for extensive adoption. However, it is already demonstrating its capabilities by [powering various applications](/powered-by-waku). [Join our community](/community) to stay updated on our progress. +::: + +Ready to integrate Waku into your application for private, secure, censorship-free communication? Explore the available SDKs and contribute by operating a node. + +## Operate a Waku Node + +The Waku network is permissionless and decentralized, consisting of nodes. It is open for anyone to run a node, use the network, and contribute to its support. Please visit the [nwaku guide](https://github.com/waku-org/nwaku/tree/master/docs/operators) or [go-waku guide](https://github.com/waku-org/go-waku/tree/master/docs/operators) for operators to learn more. + +## Integrate Using SDKs + +Waku is implemented in multiple SDKs, allowing it to easily integrate with different languages and address various use cases. + +| SDK | Description | Documentation | +| - | - | - | +| [js-waku](https://github.com/waku-org/js-waku) | JavaScript/TypeScript SDK designed for browser environments | | +| [nwaku](https://github.com/waku-org/nwaku) | Nim SDK recommended for operating a node and interacting with Waku | | +| [go-waku](https://github.com/waku-org/go-waku) | Golang SDK designed for integration in Golang applications, includes C bindings for usage in C/C++, C#/Unity, Swift, and Kotlin | | +| [waku-rust-bindings](https://github.com/waku-org/waku-rust-bindings) | Rust wrapper using `go-waku` bindings designed for integration in Rust applications | | +| [waku-ui](https://github.com/waku-org/waku-ui) | React components and UI adapters designed for seamless integration with `js-waku` | | + +## Run on Mobile Devices + +Waku provides integrations tailored for mobile applications, enabling Waku to operate efficiently on mobile devices. + +| Language | Description | Documentation | +| - | - | - | +| [React Native](https://github.com/waku-org/waku-react-native) | React Native wrapper using `go-waku` bindings designed for native mobile integration | | +| Swift (iOS) | `go-waku` bindings for Swift applications to seamlessly integrate Waku | | +| Kotlin (Android) | `go-waku` bindings for Kotlin applications to seamlessly integrate Waku | | + +## More Integrations + +| Platform | Description | Documentation | +| - | - | - | +| JSON-RPC API | `JSON-RPC` API interface provided by nodes for seamless integration with Waku | | +| [@waku/create-app](https://www.npmjs.com/package/@waku/create-app) | Starter kit to bootstrap your next Waku project from various example templates | | \ No newline at end of file diff --git a/docs/overview/concepts/protocols.md b/docs/overview/concepts/protocols.md deleted file mode 100644 index e42de26..0000000 --- a/docs/overview/concepts/protocols.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: Protocols in Waku ---- - -Waku takes a modular approach, providing a range of protocols that enable applications to control the trade-offs involved in the [Anonymity Trilemma](https://eprint.iacr.org/2017/954.pdf). This flexibility empowers applications to make informed choices regarding the desired balance between anonymity, scalability, and latency. Here are the main protocols provided by Waku: - -### [Waku Relay](https://rfc.vac.dev/spec/11/) - -`Waku Relay` is a privacy-focused peer-to-peer messaging protocol that extends the [libp2p GossipSub protocol](https://github.com/libp2p/specs/blob/master/pubsub/gossipsub/README.md). It utilizes a Pub/Sub architecture to enable secure communication channels, encryption, and protection against censorship. With a strong emphasis on privacy, `Waku Relay` ensures scalability, allowing many peers and messages to coexist within the network. - -### [Waku Filter](https://rfc.vac.dev/spec/12/) - -`Waku Filter` is a protocol enabling peers to subscribe to specific messages from other peers. It is designed for devices with limited bandwidth, serving as a lighter alternative to [Waku Relay](#waku-relay). Unlike relay nodes, `Waku Filter` allows light nodes to subscribe to service nodes and receive only the messages they are interested in. This optimizes bandwidth consumption but may involve privacy compromises. Nonetheless, `Waku Filter` efficiently delivers desired messages within bandwidth constraints. - -### [Waku Store](https://rfc.vac.dev/spec/13/) - -`Waku Store` is a protocol that allows the querying of messages received through the relay protocol and stored by nodes. It supports retrieving historical messages with pagination. Unlike [Waku Relay](#waku-relay), which doesn't save messages for offline users, `Waku Store` peers retain relayed messages for later retrieval. - -:::info -Data availability is not guaranteed with `Waku Store`. [Waku Relay](#waku-relay) or [Waku Filter](#waku-filter) are preferred for online usage, while `Waku Store` is suitable for retrieving messages after reconnecting to the network, like when a dApp starts. -::: - -### [Waku Light Push](https://rfc.vac.dev/spec/19/) - -`Waku Light Push` is a [Request/Reply](/overview/concepts/network-domains#requestreply-domain) protocol for Waku's light nodes with limited bandwidth and short connection windows. It enables clients to receive a confirmation when sending messages, indicating that at least one node has received them. However, using `Waku Light Push` compromises privacy as the remote peer becomes aware of the message originator. - -:::info -Please note that `Waku Light Push` confirms receipt by the remote peer but doesn't guarantee network-wide propagation. -::: - -## Additional Protocols - -### [Waku Message](https://rfc.vac.dev/spec/14) - -`Waku Message` specifies the message structure used in the Waku network. It defines metadata fields, such as content topics and timestamps, that other Waku protocols can use. - -### [Waku Payload](https://rfc.vac.dev/spec/26) - -`Waku Payload` provides guidelines for implementing secure and private communication in the Waku network. It covers encryption, decryption, and signing methods for message payloads, focusing on confidentiality, authenticity, integrity, and unlinkability. - -### [Waku RLN Relay](https://rfc.vac.dev/spec/17/) - -The `Waku RLN Relay` protocol extends the [Waku Relay](#waku-relay) protocol by adding spam protection using [Rate Limiting Nullifiers (RLN)](https://rfc.vac.dev/spec/32/). It enforces a global messaging rate for all peers to prevent spam in the Waku network. Spammers face financial penalties and removal from the system. This protocol provides efficient and economic spam prevention suitable for resource-constrained environments. \ No newline at end of file diff --git a/docs/overview/history.md b/docs/overview/history.md deleted file mode 100644 index a98450a..0000000 --- a/docs/overview/history.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: The Story of Waku ---- - -Waku v1 was a fork of Whisper with some added tweaks for efficiency. Waku v2 is a completely redesigned suite of protocols designed to address the goals set out [previously](/#motivation-and-goals). - -```mermaid -%%{init: { 'logLevel': 'debug', 'theme': 'base', 'gitGraph': {'showBranches': true, 'showCommitLabel':true,'mainBranchName': 'HISTORY'}} }%% -gitGraph - commit id:"2013" - commit id:"2015" tag:"R&D" - commit id:"2018" tag:"R&D" type: HIGHLIGHT - branch v1 - checkout v1 - commit id:"2020" tag:"release" - checkout HISTORY - merge v1 - branch v2 - checkout v2 - commit id:"2021" tag:"release" - checkout HISTORY - merge v2 - commit id:"đŸ”¥" -``` - -### 2013 - -The introduction of the Ethereum White Paper marked the unveiling of the Holy Trinity, which comprises Ethereum for consensus, Swarm for decentralized storage, and Whisper for peer-to-peer messaging. - -### 2015-2018 - -The development of the Whisper protocol lagged behind the advancements made by the Ethereum EVM and Swarm, primarily because there was no dedicated team working on building the protocol. - -### 2018 - -Due to the lack of progress made on Whisper and growing concerns around scalability, Vac was established to focus on researching and developing more scalable peer-to-peer messaging solutions. - -### 2020 - -Status introduced Waku v1 as its messaging protocol, which replaced Whisper. - -### 2021 - -Waku v2 supersedes Waku v1. diff --git a/docs/overview/implementations.md b/docs/overview/implementations.md deleted file mode 100644 index a0aa58b..0000000 --- a/docs/overview/implementations.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: Waku Implementations ---- - -Waku has been implemented in multiple programming languages to address various use cases. The Waku team builds and maintains each implementation, ensuring that updates are provided automatically. - -### [nwaku](https://github.com/waku-org/nwaku) - -The Nim implementation of the Waku protocol is the reference implementation recommended for deploying a node in the cloud or at home. - -### [js-waku](https://github.com/waku-org/js-waku/) - -The JavaScript/TypeScript implementation of the Waku protocol designed for use in browser environments. - -### [go-waku](https://github.com/waku-org/go-waku) - -The Golang implementation of the Waku protocol designed for native integration in Golang applications, includes C bindings with examples available in C#, Swift, and Kotlin. - -### [@waku/react-native](https://github.com/waku-org/waku-react-native) - -The React Native wrapper of the Waku protocol uses bindings provided by [go-waku](https://github.com/waku-org/go-waku) and is designed for native mobile integration. - -### [waku-rust-bindings](https://github.com/waku-org/waku-rust-bindings) - -The Rust wrapper of the Waku protocol uses bindings provided by [go-waku](https://github.com/waku-org/go-waku) and is designed for Rust applications. \ No newline at end of file diff --git a/docs/overview/who-is-using-waku.md b/docs/overview/who-is-using-waku.md deleted file mode 100644 index 658bda9..0000000 --- a/docs/overview/who-is-using-waku.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: Who is Using Waku? ---- - -### Status - -[Status](https://status.im/) is a secure messaging app, crypto wallet, and Web3 browser built with state-of-the-art technology. - -### XMTP - -[XMTP](https://xmtp.org/) uses Waku to enable secure Web3 messaging in their open protocol and network. - -### RAILGUN - -[RAILGUN](https://railgun.org/) uses Waku to offer private ETH gas payments to users, ensuring anonymity and privacy for their stablecoin and token transactions. diff --git a/docs/powered-by-waku.mdx b/docs/powered-by-waku.mdx new file mode 100644 index 0000000..16aa885 --- /dev/null +++ b/docs/powered-by-waku.mdx @@ -0,0 +1,40 @@ +--- +title: Powered by Waku +--- + +Leap into the future with Waku! Revolutionize communication, collaboration, and connectivity. Join us and create something extraordinary! + +```mdx-code-block +import PoweredByCard from "@site/src/components/PoweredByCard"; + +
+ + Status is a secure messaging app, crypto wallet, and Web3 browser built with state-of-the-art technology. + + + XMTP uses the Waku network to enable secure Web3 messaging in their open protocol and network. + + + RAILGUN uses Waku to offer private gas payments to users, ensuring anonymity and privacy for their transactions. + + + Waku powers the Graphcast SDK, enabling the development of gossip-powered applications within The Graph ecosystem. + +
+``` \ No newline at end of file diff --git a/docs/presentations.md b/docs/presentations.md new file mode 100644 index 0000000..5b3cff6 --- /dev/null +++ b/docs/presentations.md @@ -0,0 +1,39 @@ +--- +title: Watch Our Presentations +--- + +## Using ZKP for Better p2p Messaging With Waku + + + +## How to Ethically Build Public Good Infrastructure + + + +## Building Privacy-Protecting Infrastructure + + + +## Secureum TrustX - Waku: Enabling a New Dimension for dApps + + + +## Waku: Enabling a New Dimension for dApps + + + +## The Next Level of Decentralization Messaging in Web3 + + + +## Build with Waku & DappConnect + + + +## DappConnect: Enabling Decentralized Communications Using Waku + + + +## DappConnect: Decentralized Communication Using Waku + + \ No newline at end of file diff --git a/docusaurus.config.js b/docusaurus.config.js index 5df8e75..d46560d 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -2,148 +2,191 @@ // Note: type annotations allow type checking and IDEs autocompletion require("dotenv").config(); -/** @type {import('@docusaurus/types').Config} */ +/** @type {import("@docusaurus/types").Config} */ const config = { - title: "Waku Documentation Portal", - url: "https://waku.guide/", - baseUrl: "/", - onBrokenLinks: "throw", - onBrokenMarkdownLinks: "warn", + title: "Waku Docs Portal", + url: "https://waku.guide/", + baseUrl: "/", + onBrokenLinks: "throw", + onBrokenMarkdownLinks: "warn", - // Even if you don't use internalization, you can use this field to set useful - // metadata like html lang. For example, if your site is Chinese, you may want - // to replace "en" with "zh-Hans". - i18n: { - defaultLocale: "en", - locales: ["en"], - }, - - presets: [ - [ - "@acid-info/logos-docusaurus-preset", - /** @type {import('@acid-info/logos-docusaurus-preset').PluginOptions} */ - ({ - businessUnit: "Waku", - customSiteConfig: true, - docs: { - routeBasePath: "/", - sidebarPath: require.resolve("./sidebars.js"), - editUrl: "https://github.com/waku-org/waku.guide/tree/develop/", - }, - theme: { - name: "docusaurus-default", - options: { - customCss: [require.resolve("./src/css/custom.scss")], - }, - }, - }), - ], - ], - staticDirectories: ["static"], - themeConfig: - /** @type {import('@acid-info/logos-docusaurus-preset').ThemeConfig} */ - ({ - navbar: { - title: "Waku", - logo: { - srcDark: "logo_white.svg", - }, - items: [ - { - type: 'docSidebar', - position: 'left', - sidebarId: 'main', - label: 'Getting Started', - }, - ], - }, - announcementBar: { - content: - "While Waku is still in development and needs to prepare for extensive adoption, it is already being used by Status, XMTP and Railgun. Join our Discord Community to stay updated on our progress.", - backgroundColor: "#EBEDF0", - textColor: "#1B1B1D", - isCloseable: true, - }, - footer: { - links: [ - { - title: "Legal", - items: [ - { - href: "https://waku.org/terms-of-use", - label: "Terms of Use", - }, - { - href: "https://waku.org/privacy-policy", - label: "Privacy Policy", - }, - ], - }, - { - title: "Community", - items: [ - { - href: "https://forum.vac.dev/", - label: "Discourse", - }, - { - href: "https://discord.gg/Nrac59MfSX", - label: "Discord", - }, - { - href: "https://twitter.com/waku_org", - label: "Twitter", - }, - { - href: "https://t.me/waku_org", - label: "Telegram", - }, - ], - }, - { - title: "Resources", - items: [ - { - href: "https://github.com/waku-org", - label: "GitHub", - }, - { - href: "https://vac.dev/research", - label: "Blog", - }, - { - href: "https://vac.dev/", - label: "Vac", - }, - { - href: "https://rfc.vac.dev/", - label: "Vac RFCs", - }, - ], - }, - ], - }, - colorMode: { - defaultMode: "light", - disableSwitch: false, - respectPrefersColorScheme: false, - }, - }), - - plugins: [ - [ - "@easyops-cn/docusaurus-search-local", - { - hashed: true, - indexDocs: true, - indexPages: true, - }, - ], - ], - themes: ["@docusaurus/theme-mermaid"], - markdown: { - mermaid: true, - }, + // Even if you don't use internalization, you can use this field to set useful + // metadata like html lang. For example, if your site is Chinese, you may want + // to replace "en" with "zh-Hans". + i18n: { + defaultLocale: "en", + locales: ["en"] + }, + presets: [ + [ + "@acid-info/logos-docusaurus-preset", + ({ + businessUnit: "Waku", + customSiteConfig: true, + docs: { + routeBasePath: "/", + sidebarPath: require.resolve("./sidebars.js"), + editUrl: "https://github.com/waku-org/waku.guide/tree/develop/" + }, + theme: { + name: "docusaurus-default", + options: { + customCss: [require.resolve("./src/css/custom.scss")] + } + } + }) + ] + ], + staticDirectories: ["static"], + themeConfig: ({ + docs: { + sidebar: { + hideable: false + } + }, + navbar: { + title: "Waku", + logo: { + srcDark: "img/logo_white.svg" + }, + hideOnScroll: true, + items: [ + { + type: "docSidebar", + position: "right", + sidebarId: "main", + label: "Getting Started" + }, + { + type: "dropdown", + label: "Guides", + position: "right", + items: [ + { + label: "SDKs and Nodes", + to: "/guides/sdks-and-nodes" + } + ] + }, + { + to: "/powered-by-waku", + label: "Powered by Waku", + position: "right" + }, + { + type: "dropdown", + label: "Community", + position: "right", + items: [ + { + label: "Join Our Community", + to: "/community" + }, + { + label: "Contribute to Waku", + to: "/contribute" + }, + { + label: "Watch Our Presentations", + to: "/presentations" + } + ] + }, + { + href: "https://github.com/waku-org", + position: "right", + className: "header-github-link", + title: "Waku GitHub repository" + }, + ] + }, + footer: { + links: [ + { + title: "Guides", + items: [ + { + to: "/guides/sdks-and-nodes", + label: "SDKs and Nodes" + } + ] + }, + { + title: "Community", + items: [ + { + href: "https://discord.waku.org/", + label: "Discord" + }, + { + href: "https://twitter.com/waku_org", + label: "Twitter" + }, + { + href: "https://t.me/waku_org", + label: "Telegram" + }, + { + href: "https://forum.vac.dev/", + label: "Vac Forum" + } + ] + }, + { + title: "Resources", + items: [ + { + href: "https://github.com/waku-org", + label: "GitHub" + }, + { + href: "https://vac.dev/research", + label: "Blog" + }, + { + href: "https://rfc.vac.dev/", + label: "Vac RFCs" + } + ] + }, + { + title: "Legal", + items: [ + { + href: "https://waku.org/terms-of-use", + label: "Terms of Use" + }, + { + href: "https://waku.org/privacy-policy", + label: "Privacy Policy" + }, + { + html: "" + } + ] + } + ] + }, + colorMode: { + defaultMode: "light", + disableSwitch: false, + respectPrefersColorScheme: false + } + }), + plugins: [ + [ + "@easyops-cn/docusaurus-search-local", + { + hashed: true, + indexDocs: true, + indexPages: true + } + ] + ], + themes: ["@docusaurus/theme-mermaid"], + markdown: { + mermaid: true + } }; -module.exports = config; +module.exports = config; \ No newline at end of file diff --git a/sidebars.js b/sidebars.js index f5376f0..10886e8 100644 --- a/sidebars.js +++ b/sidebars.js @@ -1,45 +1,57 @@ // @ts-check -/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */ - +/** @type {import("@docusaurus/plugin-content-docs").SidebarsConfig} */ const sidebars = { - main: [ - "overview/what-is-waku", - "overview/history", - "overview/why-waku", - "overview/use-cases", - "overview/who-is-using-waku", - "overview/implementations", - { - type: "category", - label: "Waku Concepts", - collapsed: false, - collapsible: true, - items: [ - "overview/concepts/protocols", - "overview/concepts/network-domains", - "overview/concepts/node-discovery", - "overview/concepts/content-topics", - "overview/concepts/transports", - ], - }, - { - type: "category", - label: "Reference", - collapsed: true, - collapsible: true, - items: [ - "overview/reference/security-features", - "overview/reference/research-in-progress", - "overview/reference/waku-vs-libp2p", - ], - }, - ], - browser: [ - "browser/introduction", - "browser/quick-start", - "browser/build-chat-app", - ] + main: [ + "getting-started/index", + "getting-started/history", + "getting-started/why-waku", + "getting-started/use-cases", + { + type: "link", + label: "SDKs and Nodes", + href: "/guides/sdks-and-nodes" + }, + { + type: "link", + label: "Video Presentations", + href: "/presentations" + }, + { + type: "category", + label: "Concepts", + collapsed: false, + collapsible: true, + items: [ + "getting-started/concepts/protocols", + "getting-started/concepts/peer-discovery", + "getting-started/concepts/network-domains", + "getting-started/concepts/content-topics", + "getting-started/concepts/transports" + ] + }, + { + type: "category", + label: "Reference", + collapsed: false, + collapsible: true, + items: [ + "getting-started/reference/glossary", + "getting-started/reference/security-features", + "getting-started/reference/research-in-progress", + "getting-started/reference/waku-vs-libp2p" + ] + } + ], + guides: [ + "guides/sdks-and-nodes" + ], + community: [ + "powered-by-waku", + "community", + "contribute", + "presentations" + ] }; -module.exports = sidebars; +module.exports = sidebars; \ No newline at end of file diff --git a/src/components/PoweredByCard.js b/src/components/PoweredByCard.js new file mode 100644 index 0000000..e9ce012 --- /dev/null +++ b/src/components/PoweredByCard.js @@ -0,0 +1,53 @@ +import React from "react"; + +const PoweredByCard = ({ appLink, logoSrc, appName, children }) => ( + +); + +export default PoweredByCard; diff --git a/static/custom.css b/static/custom.css new file mode 100644 index 0000000..4fa2003 --- /dev/null +++ b/static/custom.css @@ -0,0 +1,41 @@ +.powered-by-card-container { + display: grid; + gap: 1rem; + justify-content: center; +} + +@media (max-width: 767px) { + .powered-by-card-container { + grid-template-columns: 1fr; + } +} + +@media (min-width: 768px) { + .powered-by-card-container { + grid-template-columns: repeat(2, 1fr); + } +} + +.header-github-link:hover { + opacity: 0.6; +} + +.header-github-link:before { + content: ''; + width: 24px; + height: 24px; + display: flex; + background: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E") + no-repeat; +} + +html[data-theme='dark'] .header-github-link:before { + background: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='white' d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E") + no-repeat; +} + +.yt-video { + max-width: 100%; + width: 640px; + height: 360px; +} \ No newline at end of file diff --git a/static/logo_white.svg b/static/img/logo_white.svg similarity index 100% rename from static/logo_white.svg rename to static/img/logo_white.svg diff --git a/static/img/railgun-logo.png b/static/img/railgun-logo.png new file mode 100644 index 0000000..62ed163 Binary files /dev/null and b/static/img/railgun-logo.png differ diff --git a/static/img/status-logo.svg b/static/img/status-logo.svg new file mode 100644 index 0000000..799e00e --- /dev/null +++ b/static/img/status-logo.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/static/img/the-graph-logo.svg b/static/img/the-graph-logo.svg new file mode 100644 index 0000000..b6ed0c5 --- /dev/null +++ b/static/img/the-graph-logo.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/static/img/xmtp-logo.svg b/static/img/xmtp-logo.svg new file mode 100644 index 0000000..9ce73b7 --- /dev/null +++ b/static/img/xmtp-logo.svg @@ -0,0 +1,7 @@ + + + + + + +