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-07-29 11:59:16 -04:00
The document describes the functions of a Waku Web application Qaku.
The use of Waku protocols in the Qaku questions and
answers web application allow for a secure , trustless environment.
2025-07-24 19:27:55 -04:00
## Background
Waku is a family of robust,
censorship-resistant communication protocols designed to enable privacy-focused messaging for web3 apps.
2025-07-29 11:59:16 -04:00
Qaku is a questions and answers Waku web application.
It allows the user to create a Q& A board,
2025-07-24 19:27:55 -04:00
share a link and let users post questions.
Users can upvote questions which move to the top of the list on the board.
## 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 ).
The Q& A board is created and maintained by an owner,
who SHOULD support an accessible interface for its users.
### Identity
- Users and an owner MUST generate a private key
- The owner MUST generate a private key to before becoming the owner of the Q& A board.
- The owner address, derived from the public key, SHOULD be made public as the owner of Qaku.
- A `paasword` SHOULD be used to encrypt the private key
The public key is used to sign and verify messages.
The owner MUST be able to enable and disable questions added to the board.
### Node
2025-07-29 13:48:43 -04:00
The Qaku application SHOULD connect to the default Waku `pubsub_topic` .
When a user accesses the Qaku app,
the user joins a new session that SHOULD create a new `content_topic` .
When the user exits the Qaku app,
the session ends but the `content_topic` remians available on the Waku network for other users to connect to.
2025-07-29 11:59:16 -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.
2025-07-29 13:48:43 -04:00
- the [13/WAKU-STORE]() to query and load old messages from the Waku network for users.
2025-07-24 19:27:55 -04:00
- A new `content_topic` is created when a new Q& A board is created.
- All questions and answer are pushed to the content_topic
### 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
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
- Control Message
- Upvote Message
- Moderation Message
- Poll messag
#### 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
]
}
```
#### Control Message
```js
{
"ControlMessage" : [
title: string,
id: string,
enabled: boolean,
timestamp: number,
owner: string,
admins: string[],
moderation: boolean,
description: string,
updated: number,
startDate: number,
endDate?: number,
allowsParticipantsReplies: number,
delegationInfo?: DelegationInfo
]
}
```
#### Upvote Message
```js
{
"UpVoteMessage" : [
questionId: string,
hash: string,
type: UpvoteType,
timestamp: number,
delegationInfo?: DelegationInfo;
]
}
```
When a new question is created, the interface SHOULD lis
## Copyright
Copyright and related rights waived via [CC0 ](https://creativecommons.org/publicdomain/zero/1.0/ ).
## References