Merge pull request #53 from waku-org/docs-reorg

Docs Reorg
This commit is contained in:
LordGhostX 2023-05-31 12:07:39 +01:00 committed by GitHub
commit c3491d914c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
36 changed files with 726 additions and 360 deletions

View File

@ -31,7 +31,14 @@
"Dappnode",
"gameplay",
"Smol",
"Datagram"
"Datagram",
"Graphcast",
"permissionless",
"Royer",
"Secureum",
"Oskar",
"Thorén",
"autoplay"
],
"flagWords": [],
"ignorePaths": [

View File

@ -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

View File

@ -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`.

View File

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

View File

@ -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`.

21
docs/community.md Normal file
View File

@ -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!

31
docs/contribute.md Normal file
View File

@ -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 <https://vac.dev/open-problems>.

View File

@ -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.
:::

View File

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

View File

@ -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

View File

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

View File

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

View File

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

View File

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

View File

@ -0,0 +1,7 @@
---
title: Glossary
---
# Waku Docs Glossary
Definitions and usage of the terminology used in the Waku ecosystem.

View File

@ -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: <https://examples.waku.org/rln-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: <https://github.com/vacp2p/research/issues/148>.
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: <https://github.com/vacp2p/research/issues/148>.
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: <https://vac.dev/building-privacy-protecting-infrastructure>

View File

@ -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: <https://github.com/vacp2p/research/issues/148>.
Ongoing research is being conducted, including developing [Rate Limit Nullifiers (RLN)](/getting-started/concepts/protocols#rln-relay), which can be explored further at: <https://github.com/vacp2p/research/issues/148>.
## [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.
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.

View File

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

View File

@ -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:

View File

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

View File

@ -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 | |

View File

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

View File

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

View File

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

View File

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

40
docs/powered-by-waku.mdx Normal file
View File

@ -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";
<div className="powered-by-card-container">
<PoweredByCard
appLink="https://status.im"
logoSrc="/img/status-logo.svg"
appName="Status"
>
Status is a secure messaging app, crypto wallet, and Web3 browser built with state-of-the-art technology.
</PoweredByCard>
<PoweredByCard
appLink="https://xmtp.org"
logoSrc="/img/xmtp-logo.svg"
appName="XMTP"
>
XMTP uses the Waku network to enable secure Web3 messaging in their open protocol and network.
</PoweredByCard>
<PoweredByCard
appLink="https://railgun.org/"
logoSrc="/img/railgun-logo.png"
appName="RAILGUN"
>
RAILGUN uses Waku to offer private gas payments to users, ensuring anonymity and privacy for their transactions.
</PoweredByCard>
<PoweredByCard
appLink="https://thegraph.com/"
logoSrc="/img/the-graph-logo.svg"
appName="The Graph"
>
Waku powers the Graphcast SDK, enabling the development of gossip-powered applications within The Graph ecosystem.
</PoweredByCard>
</div>
```

39
docs/presentations.md Normal file
View File

@ -0,0 +1,39 @@
---
title: Watch Our Presentations
---
## Using ZKP for Better p2p Messaging With Waku
<iframe class="yt-video" src="https://www.youtube.com/embed/eJwX1JpcKQk" title="Using ZKP for better p2p messaging with Waku by Oskar Thorén" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
## How to Ethically Build Public Good Infrastructure
<iframe class="yt-video" src="https://www.youtube.com/embed/yi7nS0g0Yno" title="How to Ethically Build Public Good Infrastructure by Corey Petty" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
## Building Privacy-Protecting Infrastructure
<iframe class="yt-video" src="https://www.youtube.com/embed/CW1DYJifdhs" title="Building Privacy-Protecting Infrastructure by Oskar Thorén" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
## Secureum TrustX - Waku: Enabling a New Dimension for dApps
<iframe class="yt-video" src="https://www.youtube.com/embed/GXU5Fd6gMVw" title="Secureum TrustX - Waku: Enabling a New Dimension for dApps by Corey Petty" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
## Waku: Enabling a New Dimension for dApps
<iframe class="yt-video" src="https://www.youtube.com/embed/OdXtMD-hgdg" title="Waku: enabling a new dimension for dApps by Corey Petty" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
## The Next Level of Decentralization Messaging in Web3
<iframe class="yt-video" src="https://www.youtube.com/embed/1QjxqrLO8WA" title="The Next Level of Decentralization Messaging in Web3 by Franck Royer" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
## Build with Waku &amp; DappConnect
<iframe class="yt-video" src="https://www.youtube.com/embed/ooRyn4aXsrM" title="EthOnline Status Bounty - Build with Waku &amp; DappConnect by Franck Royer" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
## DappConnect: Enabling Decentralized Communications Using Waku
<iframe class="yt-video" src="https://www.youtube.com/embed/rQOp3qoDF0g" title="DappConnect: Enabling decentralized communications using Waku by Franck Royer" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
## DappConnect: Decentralized Communication Using Waku
<iframe class="yt-video" src="https://www.youtube.com/embed/CBknF-6Z-Ds" title="DappConnect: Decentralized communication using Waku" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>

View File

@ -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 <a href='/overview/who-is-using-waku'>Status, XMTP and Railgun</a>. Join our <a href='https://discord.gg/Nrac59MfSX'>Discord Community</a> 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: "<link rel='stylesheet' href='/custom.css' />"
}
]
}
]
},
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;

View File

@ -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;

View File

@ -0,0 +1,53 @@
import React from "react";
const PoweredByCard = ({ appLink, logoSrc, appName, children }) => (
<div
style={{
width: "100%",
border: "1px solid #666",
borderRadius: "8px",
padding: "1.5rem"
}}
>
<div style={{
display: "flex",
flexDirection: "column",
alignItems: "center",
backgroundColor: "#fff",
marginBottom: "1rem"
}}>
<img
src={logoSrc}
alt={appName + " logo"}
style={{
height: "55px",
padding: "5px"
}}
/>
</div>
<p>{children}</p>
<a href={appLink} target="_blank" rel="noopener noreferrer">
<button
style={{
width: "100%",
padding: "1rem",
borderRadius: "8px",
backgroundColor: "#e6f6ff",
border: "1px solid #666",
fontSize: "16px",
fontWeight: 700,
cursor: "pointer",
color: "#3578e5"
}}
>
Visit { appName }&nbsp;
<svg width="16" height="16" aria-hidden="true" viewBox="0 0 24 24">
<path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z">
</path>
</svg>
</button>
</a>
</div>
);
export default PoweredByCard;

41
static/custom.css Normal file
View File

@ -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;
}

View File

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

BIN
static/img/railgun-logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

View File

@ -0,0 +1,10 @@
<svg width="118" height="45" viewBox="0 0 118 45" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M22.4762 0C10.0629 0 0 10.0737 0 22.5C0 34.9264 10.0629 45 22.4762 45C34.8895 45 44.9524 34.9264 44.9524 22.5C44.9524 10.0737 34.8895 0 22.4762 0Z" fill="#4360DF"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M23.2309 21.5138C24.3595 21.6314 25.4882 21.749 26.8757 21.6716C30.6352 21.4618 32.9125 19.5302 32.7509 16.6428C32.5862 13.7052 29.5565 11.8953 26.5251 12.0645C21.5849 12.34 17.9521 16.6819 17.543 21.6444C18.2139 21.4871 18.9201 21.3932 19.586 21.356C20.9737 21.2787 22.1023 21.3962 23.2309 21.5138ZM13.5465 27.936C13.7024 30.6289 16.5727 32.288 19.4446 32.1328C24.1247 31.8802 27.5665 27.9002 27.954 23.3511C27.3184 23.4954 26.6495 23.5816 26.0185 23.6156C24.7039 23.6866 23.6346 23.5788 22.5653 23.471C21.4961 23.3632 20.4268 23.2554 19.1122 23.3264C15.5508 23.5187 13.3932 25.2893 13.5465 27.936Z" fill="white"/>
<path d="M53.6992 26.2361H56.9481C56.9481 26.7871 57.1033 27.1825 57.4137 27.4227C57.7241 27.6628 58.1228 27.7828 58.6096 27.7828C59.0117 27.7828 59.3398 27.7087 59.5938 27.5604C59.8548 27.405 59.9853 27.1543 59.9853 26.8082C59.9853 26.6034 59.9289 26.4374 59.816 26.3103C59.7102 26.1761 59.5444 26.0596 59.3187 25.9607C59.0929 25.8547 58.8036 25.7488 58.4508 25.6428C58.0981 25.5369 57.6748 25.4027 57.1809 25.2403C56.7365 25.0991 56.3167 24.9543 55.9216 24.8059C55.5335 24.6506 55.1914 24.4599 54.895 24.2339C54.5987 24.0079 54.366 23.7324 54.1966 23.4076C54.0344 23.0827 53.9532 22.6801 53.9532 22.1999C53.9532 21.6489 54.0625 21.1723 54.2813 20.7697C54.4999 20.3671 54.8069 20.0351 55.202 19.7738C55.597 19.5125 56.0697 19.3183 56.6201 19.1911C57.1703 19.0569 57.7771 18.9898 58.4402 18.9898C59.2516 18.9898 59.9501 19.0817 60.5357 19.2653C61.1213 19.4489 61.601 19.6996 61.975 20.0174C62.3489 20.3353 62.624 20.7096 62.8004 21.1404C62.9838 21.5712 63.0755 22.0338 63.0755 22.5283H59.8054C59.8054 22.0974 59.6926 21.7619 59.4668 21.5218C59.2481 21.2817 58.913 21.1617 58.4614 21.1617C58.1157 21.1617 57.8194 21.2394 57.5725 21.3947C57.3256 21.543 57.2021 21.769 57.2021 22.0727C57.2021 22.2775 57.2586 22.4435 57.3714 22.5706C57.4914 22.6907 57.6642 22.8001 57.89 22.8991C58.1157 22.9979 58.3944 23.1003 58.726 23.2063C59.0576 23.3052 59.4386 23.4252 59.8689 23.5664C60.3346 23.6936 60.7685 23.8348 61.1706 23.9902C61.5728 24.1456 61.9255 24.3363 62.2289 24.5623C62.5393 24.7813 62.7827 25.0602 62.9591 25.3992C63.1425 25.7312 63.2343 26.1549 63.2343 26.6705C63.2343 27.2779 63.1073 27.797 62.8533 28.2278C62.5993 28.6516 62.2571 28.9976 61.8268 29.266C61.4034 29.5344 60.9096 29.7251 60.3452 29.8381C59.7808 29.9581 59.1881 30.0182 58.5672 30.0182C57.0222 30.0182 55.8228 29.6969 54.9691 29.0541C54.1225 28.4044 53.6992 27.465 53.6992 26.2361Z" fill="black"/>
<path d="M64.0598 21.7443V19.2759H65.7002V16.1719H69.002V19.2759H71.3831V21.7443H69.002V25.484C69.002 25.8724 69.0372 26.1832 69.1078 26.4162C69.1784 26.6423 69.2771 26.8223 69.4041 26.9565C69.5381 27.0837 69.6969 27.1684 69.8803 27.2108C70.0708 27.2461 70.2825 27.2637 70.5153 27.2637C70.6564 27.2637 70.8363 27.2602 71.055 27.2531C71.2737 27.2391 71.4642 27.2178 71.6265 27.1896V29.7321C71.3796 29.7745 71.0692 29.8134 70.6952 29.8487C70.3283 29.884 69.8945 29.9016 69.3936 29.9016C69.0055 29.9016 68.5963 29.8734 68.166 29.8169C67.7356 29.7604 67.3369 29.6121 66.9701 29.372C66.6032 29.1318 66.2999 28.7646 66.06 28.2702C65.8201 27.7687 65.7002 27.0837 65.7002 26.2149V21.7443H64.0598Z" fill="black"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M72.9492 22.3164C72.7023 22.9873 72.5789 23.7148 72.5789 24.4987C72.5789 25.2827 72.7023 26.0102 72.9492 26.6811C73.2032 27.352 73.5525 27.9312 73.9969 28.4185C74.4485 28.9058 74.9741 29.2907 75.5738 29.5732C76.1805 29.8557 76.8296 29.997 77.5211 29.997C78.3253 29.997 79.0167 29.8275 79.5952 29.4885C80.1737 29.1495 80.5932 28.7398 80.8549 28.2596V29.7321H84.1669V19.2759H80.8549V20.7697C80.5651 20.2612 80.1314 19.8409 79.5529 19.5089C78.9814 19.177 78.3041 19.0111 77.5211 19.0111C76.8225 19.0111 76.1734 19.1523 75.5738 19.4348C74.9741 19.7173 74.4485 20.1022 73.9969 20.5896C73.5525 21.0698 73.2032 21.6454 72.9492 22.3164ZM76.05 25.5369C75.9301 25.205 75.8701 24.8589 75.8701 24.4987C75.8701 24.1386 75.9301 23.7995 76.05 23.4817C76.177 23.1639 76.3463 22.8814 76.5579 22.6342C76.7767 22.387 77.0377 22.1928 77.3411 22.0515C77.6445 21.9103 77.9831 21.8396 78.3571 21.8396C78.7381 21.8396 79.0802 21.9103 79.3836 22.0515C79.687 22.1928 79.9445 22.387 80.1561 22.6342C80.3749 22.8814 80.5443 23.1639 80.6639 23.4817C80.7907 23.7995 80.8549 24.1386 80.8549 24.4987C80.8549 24.866 80.7907 25.2121 80.6639 25.5369C80.5443 25.8618 80.3749 26.1444 80.1561 26.3845C79.9445 26.6175 79.6834 26.8082 79.373 26.9565C79.0697 27.0978 78.731 27.1684 78.3571 27.1684C77.9831 27.1684 77.6445 27.0978 77.3411 26.9565C77.0377 26.8082 76.7767 26.6175 76.5579 26.3845C76.3463 26.1444 76.177 25.8618 76.05 25.5369Z" fill="black"/>
<path d="M85.9448 21.7443V19.2759H87.5848V16.1719H90.8872V19.2759H93.268V21.7443H90.8872V25.484C90.8872 25.8724 90.9225 26.1832 90.9923 26.4162C91.063 26.6423 91.1617 26.8223 91.2893 26.9565C91.4234 27.0837 91.5815 27.1684 91.7654 27.2108C91.9556 27.2461 92.1675 27.2637 92.4003 27.2637C92.5416 27.2637 92.7214 27.2602 92.9397 27.2531C93.1589 27.2391 93.3491 27.2178 93.5113 27.1896V29.7321C93.2648 29.7745 92.9542 29.8134 92.5801 29.8487C92.2133 29.884 91.779 29.9016 91.2781 29.9016C90.8904 29.9016 90.481 29.8734 90.0507 29.8169C89.6205 29.7604 89.2215 29.6121 88.8547 29.372C88.4878 29.1318 88.1844 28.7646 87.9452 28.2702C87.7052 27.7687 87.5848 27.0837 87.5848 26.2149V21.7443H85.9448Z" fill="black"/>
<path d="M95.1521 25.484V19.2759H98.4433V24.6365C98.4433 25.3851 98.5773 25.996 98.8454 26.4692C99.1135 26.9353 99.5928 27.1684 100.285 27.1684C100.976 27.1684 101.484 26.9318 101.808 26.4586C102.14 25.9783 102.306 25.3321 102.306 24.5199V19.2759H105.618V29.7321H102.306V28.2384C102.016 28.7893 101.575 29.2201 100.983 29.5308C100.39 29.8416 99.6811 29.997 98.8559 29.997C98.1358 29.997 97.5434 29.884 97.0778 29.658C96.6195 29.432 96.2454 29.1459 95.9564 28.7998C95.6241 28.3973 95.4058 27.9312 95.2998 27.4015C95.2011 26.8717 95.1521 26.2326 95.1521 25.484Z" fill="black"/>
<path d="M107.756 26.2361H111.005C111.005 26.7871 111.16 27.1825 111.471 27.4227C111.78 27.6628 112.179 27.7828 112.666 27.7828C113.068 27.7828 113.396 27.7087 113.651 27.5604C113.912 27.405 114.042 27.1543 114.042 26.8082C114.042 26.6034 113.986 26.4374 113.872 26.3103C113.767 26.1761 113.601 26.0596 113.375 25.9607C113.15 25.8547 112.86 25.7488 112.508 25.6428C112.155 25.5369 111.731 25.4027 111.238 25.2403C110.793 25.0991 110.373 24.9543 109.978 24.8059C109.59 24.6506 109.248 24.4599 108.952 24.2339C108.655 24.0079 108.423 23.7324 108.253 23.4076C108.091 23.0827 108.01 22.6801 108.01 22.1999C108.01 21.6489 108.119 21.1723 108.338 20.7697C108.557 20.3671 108.863 20.0351 109.258 19.7738C109.654 19.5125 110.126 19.3183 110.677 19.1911C111.227 19.0569 111.833 18.9898 112.497 18.9898C113.308 18.9898 114.006 19.0817 114.592 19.2653C115.178 19.4489 115.658 19.6996 116.032 20.0174C116.406 20.3353 116.68 20.7096 116.857 21.1404C117.041 21.5712 117.132 22.0338 117.132 22.5283H113.862C113.862 22.0974 113.75 21.7619 113.523 21.5218C113.305 21.2817 112.969 21.1617 112.518 21.1617C112.172 21.1617 111.876 21.2394 111.629 21.3947C111.382 21.543 111.259 21.769 111.259 22.0727C111.259 22.2775 111.315 22.4435 111.428 22.5706C111.548 22.6907 111.721 22.8001 111.947 22.8991C112.172 22.9979 112.451 23.1003 112.782 23.2063C113.115 23.3052 113.495 23.4252 113.925 23.5664C114.391 23.6936 114.825 23.8348 115.227 23.9902C115.63 24.1456 115.982 24.3363 116.285 24.5623C116.596 24.7813 116.839 25.0602 117.016 25.3992C117.199 25.7312 117.291 26.1549 117.291 26.6705C117.291 27.2779 117.164 27.797 116.91 28.2278C116.656 28.6516 116.313 28.9976 115.883 29.266C115.46 29.5344 114.966 29.7251 114.402 29.8381C113.837 29.9581 113.245 30.0182 112.624 30.0182C111.079 30.0182 109.88 29.6969 109.026 29.0541C108.179 28.4044 107.756 27.465 107.756 26.2361Z" fill="black"/>
</svg>

After

Width:  |  Height:  |  Size: 8.0 KiB

View File

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<svg viewBox="0 0 129 32" xmlns="http://www.w3.org/2000/svg">
<g id="The-Graph" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="The-Graph---Assets" transform="translate(-1041.000000, -488.000000)">
<g id="Logo-/-Purple-/-The-Graph-Logo-white" transform="translate(1041.000000, 488.000000)">
<path d="M46.03,22.5 L46.03,12.204 L49.468,12.204 L49.468,9.72 L40,9.72 L40,12.204 L43.402,12.204 L43.402,22.5 L46.03,22.5 Z M53.338,22.5 L53.338,18.108 C53.338,16.38 54.202,15.552 55.336,15.552 C56.362,15.552 56.92,16.344 56.92,17.64 L56.92,22.5 L59.386,22.5 L59.386,17.226 C59.386,14.886 58.09,13.302 55.912,13.302 C54.742,13.302 53.806,13.806 53.338,14.526 L53.338,9 L50.872,9 L50.872,22.5 L53.338,22.5 Z M65.794,22.698 C68.08,22.698 69.862,21.384 70.402,19.566 L67.828,19.566 C67.54,20.178 66.784,20.556 65.92,20.556 C64.39,20.556 63.598,19.638 63.49,18.576 L70.51,18.576 C70.636,15.192 68.458,13.302 65.812,13.302 C63.076,13.302 61.078,15.3 61.078,17.982 C61.078,20.718 63.04,22.698 65.794,22.698 Z M67.81,16.956 L63.58,16.956 C63.814,15.966 64.606,15.3 65.74,15.3 C66.586,15.3 67.504,15.75 67.81,16.956 Z M82.642,22.716 C86.44,22.716 89.518,20.106 88.942,14.85 L82.336,14.85 L82.336,17.298 L86.242,17.298 C85.954,19.062 84.712,20.196 82.642,20.196 C80.158,20.196 78.538,18.396 78.538,16.11 C78.538,13.824 80.158,12.024 82.606,12.024 C83.83,12.024 85.018,12.564 85.648,13.5 L88.636,13.5 C87.772,11.088 85.288,9.504 82.606,9.504 C78.736,9.504 75.91,12.402 75.91,16.11 C75.91,19.818 78.736,22.716 82.642,22.716 Z M93.244,22.5 L93.244,18.198 C93.244,16.722 94.018,15.804 95.188,15.804 C95.584,15.804 95.926,15.876 96.304,16.002 L96.304,13.5 C95.998,13.41 95.728,13.392 95.476,13.392 C94.468,13.392 93.55,14.058 93.244,14.94 L93.244,13.5 L90.778,13.5 L90.778,22.5 L93.244,22.5 Z M101.218,22.698 C102.46,22.698 103.414,22.068 103.81,21.492 L103.81,22.5 L106.276,22.5 L106.276,13.5 L103.81,13.5 L103.81,14.508 C103.414,13.932 102.46,13.302 101.218,13.302 C98.824,13.302 96.988,15.444 96.988,18 C96.988,20.556 98.824,22.698 101.218,22.698 Z M101.74,20.448 C100.39,20.448 99.472,19.404 99.472,18 C99.472,16.596 100.39,15.552 101.74,15.552 C103.09,15.552 104.008,16.596 104.008,18 C104.008,19.404 103.09,20.448 101.74,20.448 Z M111.136,26.262 L111.136,21.492 C111.55,22.068 112.504,22.698 113.746,22.698 C116.14,22.698 117.976,20.556 117.976,18 C117.976,15.444 116.14,13.302 113.746,13.302 C112.504,13.302 111.55,13.932 111.136,14.508 L111.136,13.5 L108.67,13.5 L108.67,26.262 L111.136,26.262 Z M113.206,20.448 C111.856,20.448 110.938,19.404 110.938,18 C110.938,16.596 111.856,15.552 113.206,15.552 C114.556,15.552 115.474,16.596 115.474,18 C115.474,19.404 114.556,20.448 113.206,20.448 Z M122.242,22.5 L122.242,18.108 C122.242,16.38 123.106,15.552 124.24,15.552 C125.266,15.552 125.824,16.344 125.824,17.64 L125.824,22.5 L128.29,22.5 L128.29,17.226 C128.29,14.886 126.994,13.302 124.816,13.302 C123.646,13.302 122.71,13.806 122.242,14.526 L122.242,9 L119.776,9 L119.776,22.5 L122.242,22.5 Z" id="TheGraph" fill-rule="nonzero" style="fill: rgb(0, 0, 0);"/>
<g id="Group">
<g id="Clipping-mask">
<circle cx="16" cy="16" r="16" transform="matrix(1, 0, 0, 1, 0, 0)" fill="#6F4CFF"/>
<circle cx="16" cy="16" r="16" transform="matrix(1, 0, 0, 1, 0, 0)" fill-opacity="0.08" fill="#0C0A1D"/>
</g>
<g id="Logos-/-The-Graph" mask="url(#mask-2)" fill="#FFFFFF">
<g transform="translate(9.166667, 6.000000)" id="g">
<path d="M12.7010417,14.5214743 C13.0906064,14.9093063 13.1184325,15.5207943 12.7845198,15.9405772 L12.7010417,16.0338581 L8.40403646,20.3117511 C7.98450521,20.7294163 7.30442708,20.7294163 6.88489583,20.3117511 C6.4953311,19.923919 6.46750505,19.312431 6.80141768,18.8926481 L6.88489583,18.7993673 L11.181901,14.5214743 C11.6014323,14.103809 12.2815104,14.103809 12.7010417,14.5214743 Z M6.5703125,1.375 C10.1299479,1.375 13.015625,4.24784218 13.015625,7.79164506 C13.015625,11.3354479 10.1299479,14.2082901 6.5703125,14.2082901 C3.01067708,14.2082901 0.125,11.3354479 0.125,7.79164506 C0.125,4.24784218 3.01067708,1.375 6.5703125,1.375 Z M6.5703125,3.51388169 C4.19726563,3.51388169 2.2734375,5.42902339 2.2734375,7.79164506 C2.2734375,10.1542667 4.19726563,12.0694084 6.5703125,12.0694084 C8.94348958,12.0694084 10.8671875,10.1542667 10.8671875,7.79164506 C10.8671875,5.42902339 8.94348958,3.51388169 6.5703125,3.51388169 Z M14.089974,1.375 C14.6832031,1.375 15.1640625,1.85372061 15.1640625,2.44444084 C15.1640625,3.03516108 14.6832031,3.51388169 14.089974,3.51388169 C13.4966146,3.51388169 13.0157552,3.03516108 13.0157552,2.44444084 C13.0157552,1.85372061 13.4966146,1.375 14.089974,1.375 Z"/>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.7 KiB

7
static/img/xmtp-logo.svg Normal file
View File

@ -0,0 +1,7 @@
<svg width="1058" height="248" viewBox="0 0 1058 248" fill="black" xmlns="http://www.w3.org/2000/svg">
<path d="M401.245 122.658L461.097 42.1385H414.665L377.359 96.0866L339.515 42.1385H290.937L349.983 124.537L287.716 208.814H333.879L374.138 151.913L414.128 208.814H462.976L401.245 122.658Z" fill="#000"/>
<path d="M591.535 158.087H590.998L553.189 42.1385H489.815V209.082H529V86.1558H530.073L571.406 209.082H608.175L649.239 86.1558H650.313V209.082H692.182V42.1385H629.647L591.535 158.087Z" fill="#000"/>
<path d="M720.095 41.8701V77.0303H779.018L778.873 208.814H821.01L821.093 77.0303H879.788V41.8701H720.095Z" fill="#000"/>
<path d="M990.365 41.8701H907.164V208.814H949.301V156.745H989.56C1032.32 156.745 1058 136.234 1058 98.5022C1058 61.2281 1032.27 42.1093 990.428 42.1093L990.365 41.8701ZM949.301 122.121V77.0303H986.339C1003.95 77.0303 1015.59 82.9222 1015.59 99.8442C1015.59 116.537 1004.06 121.853 985.534 121.853L949.301 122.121Z" fill="#000"/>
<path d="M0 124C0 55.5167 55.5153 0 123.997 0C192.434 0 245.31 54.4848 246.92 123.463C246.92 145.472 239.405 163.991 220.618 181.437C204.742 196.18 177.675 198.346 157.816 187.342C143.641 179.165 132.717 161.751 123.46 148.961L106.283 175.264H69.2451L104.136 123.461L70.3186 72.4675H108.43L123.729 98.7706L138.758 72.4675H177.139L142.248 123.463C142.248 123.463 158.888 148.961 168.013 158.892C177.139 168.823 193.779 169.091 204.514 158.355C216.318 146.551 218.96 137.152 219.008 123.463C219.192 70.4783 177.107 27.9134 123.997 27.9134C70.9311 27.9134 27.9127 70.9328 27.9127 124C27.9127 177.067 70.9311 220.087 123.997 220.087C131.337 220.087 138.372 219.47 145.2 217.939L151.105 245.048C141.389 247.226 133.54 248 123.997 248C55.5153 248 0 192.483 0 124Z" fill="#FC4F37"/>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB