2025-07-24 19:27:55 -04:00
---
title: WAKU-APP-QAKU
name: Waku App Qaku
category: Standards Track
tags: waku
editor:
contributors:
- Jimmy Debe < jimmy @status .im >
---
## Abstract
2025-08-21 18:36:12 -04:00
The document describes the different components of the Qaku web application.
Qaku is a Waku web applications that utilizes some Waku protocols to provide a private and
censorship-resistent question and answer service.
2025-07-24 19:27:55 -04:00
## Background
Waku is a family of robust,
2025-08-21 18:36:12 -04:00
censorship-resistant communication protocols designed to enable privacy-focused messaging for the decentralized web.
Current Q& A platforms are controlled by centralized organizations who have the ability to remove,
block and censor content published by any user.
This could cause a user to not express their ideas or ask reall questions with fear of prosecution by a thrid party.
Qaku aims to solve this by utilizing a few [10/WAKU]() protocols to create a Q& A forum.
The user can create a Q& A board with a wallet address,
send questions or answers directly to other peers without the need of storing and/or retrieving the content from a centralized server/domain.
Familiar features like upvoting, sharable links, and board moderation are also capable.
2025-07-24 19:27:55 -04:00
## Specification
The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”,
“SHOULD NOT”, “RECOMMENDED”, “NOT RECOMMENDED”, “MAY”, and
“OPTIONAL” in this document are to be interpreted as described in [RFC 2119 ](https://www.ietf.org/rfc/rfc2119.txt ).
2025-08-26 15:41:36 -04:00
Clients publish questions to a `content-topic` address which is held by the Waku Network.
A collection of questions are owned by the `content-topic` ,
while a collection of answers are owned by the questions.
All clients MUST have and identity recognized by the network to publish new content.
More on identity [below ](#identity ).
2025-07-24 19:27:55 -04:00
2025-08-26 15:41:36 -04:00
### Creating a New Board
2025-07-24 19:27:55 -04:00
2025-08-26 15:41:36 -04:00
A client creating a new Q& A board is identitied as the `owner` .
The `owner` MAY share the `content-topic` with other clients,
as the `owner` is the first client to know the `content-topic` for the new board.
At the time of creation, the `owner` SHOULD create a `ControlMessage` to configure a Q& A board
and publish to the Waku network.
#### Control Message
This message contains all initial Q& A board.
2025-07-24 19:27:55 -04:00
2025-08-21 18:36:12 -04:00
The `ControlMessage` is a JSON object:
- It MUST include a title name
2025-08-26 15:41:36 -04:00
- It MAY include a list of client public addresses identified as `admin` .
- It SHOULD include the public address of the `owner` , identity explianed [below ](#Identity ).
2025-08-21 18:36:12 -04:00
- It SHOULD include the start and end date for clients to publish a new post.
```js
{
"ControlMessage" : [
title: string,
id: string,
enabled: boolean,
timestamp: number, // time the ControlMessage is created
2025-08-26 15:41:36 -04:00
owner: string, // the public address of the owner
2025-08-21 18:36:12 -04:00
admins: string[], // a list of addresses
moderation: boolean, //
description: string,
updated: number,
startDate: number,
endDate?: number,
allowsParticipantsReplies: number,
delegationInfo?: DelegationInfo
]
}
```
`id` :
2025-08-26 15:41:36 -04:00
- MAY be generated from the `title` value, `timestamp` value, and the `owner` public address value.
- MAY be hexadecimal characters of SHA-256***
2025-08-21 18:36:12 -04:00
2025-08-26 15:41:36 -04:00
Clients subscribed to the Q& A board `content-topic` , using the [12/WAKU2-FILTER](),
MUST be able to view the `ControlMessage` .
2025-08-21 18:36:12 -04:00
### Identity
2025-08-26 15:41:36 -04:00
All clients MUST have `identity` consisting of a public address identifier in the form of a hexadecimal string.
Clients generate cryptographic key pair, public and private keys, and
the private key MAY be encrypt a password.
Public addresses are derived from the public keys as a hexadecimal string.
This address SHOULD be recongized by the other clients in the network to idenitify clients.
2025-07-29 13:48:43 -04:00
2025-08-26 15:41:36 -04:00
Each `identity` SHOULD be stored locally.
The address SHOULD be used to sign and verify messages.
2025-07-24 19:27:55 -04:00
### Messages
2025-07-29 13:48:43 -04:00
2025-07-29 11:59:16 -04:00
The Waku network processes real-time message updates, which enables new questions and
2025-08-26 15:41:36 -04:00
answers to be acceisble quickly.
2025-07-29 13:48:43 -04:00
A conec ulti
Messages are sent to a `content_topic` that are identified as a `message_type` .
The [13/WAKU-STORE]() nodes provide historical storage of the Qaku messages.
2025-07-29 11:59:16 -04:00
The following `message_type` s used in Qaku include:
2025-07-24 19:27:55 -04:00
- Question Message
- Answered Message
- Upvote Message
- Moderation Message
2025-08-21 18:36:12 -04:00
- Poll Message
2025-07-24 19:27:55 -04:00
#### Question Message
2025-07-29 13:48:43 -04:00
The `QuestionMessage` type is generated by any user asking a new question on a Qaku board.
-
2025-07-29 11:59:16 -04:00
2025-07-24 19:27:55 -04:00
```js
{
"QuestionMessage" : [
"question": string,
"timestamp": number,
"author?": identity,
"delegationInfo?": delegationInfo
]
}
```
#### Answered Message
2025-07-29 13:48:43 -04:00
The `AnswerMessage` type is generated by any sending an answer to the Qaku board.
-
2025-07-29 11:59:16 -04:00
2025-07-24 19:27:55 -04:00
```js
{
"AnswerMessage" : [
hash: string,
text: string,
timestamp: number,
delegationInfo?: delegationInfo
]
}
```
#### Upvote Message
```js
{
"UpVoteMessage" : [
questionId: string,
hash: string,
type: UpvoteType,
timestamp: number,
delegationInfo?: DelegationInfo;
]
}
```
2025-08-21 18:36:12 -04:00
The owner MUST be able to enable and disable questions added to the board.
2025-07-24 19:27:55 -04:00
When a new question is created, the interface SHOULD lis
2025-08-26 15:41:36 -04:00
Qaku uses the following [10/WAKU]() protocols:
- the [19/WAKU2-LIGHTPUSH ](https://github.com/vacp2p/rfc-index/blob/main/waku/standards/core/19/lightpush.md ) to push a message type to the Waku network.
- the [12/WAKU2-FILTER]() to subscribe to Waku `content_topic` and listen to messages published to that topic.
- the [13/WAKU-STORE]() to query and load old messages from the Waku network for users.
- A new `content_topic` is created when a new Q& A board is created.
- All questions and answer are pushed to the content_topic
2025-07-24 19:27:55 -04:00
## Copyright
Copyright and related rights waived via [CC0 ](https://creativecommons.org/publicdomain/zero/1.0/ ).
## References