Skip to main content

JavaScript Waku SDK

caution

Currently, the JavaScript Waku SDK (@waku/sdk) is NOT compatible with React Native. We plan to add support for React Native in the future.

The JavaScript Waku SDK (@waku/sdk) provides a TypeScript implementation of the Waku protocol designed for web browser environments. Developers can seamlessly integrate Waku functionalities into web applications, enabling efficient communication and collaboration among users using the @waku/sdk package.

Installation

Install the @waku/sdk package using your preferred package manager:

npm install @waku/sdk

You can also use the @waku/sdk package via a CDN without installing it on your system:

import * as waku from "https://unpkg.com/@waku/sdk@latest/bundle/index.js";

Message structure

We recommend creating a message structure for your application using Protocol Buffers for the following reasons:

  1. Consistency: Ensures uniform message format for easy parsing and processing.
  2. Interoperability: Facilitates effective communication between different parts of your application.
  3. Compatibility: Allows smooth communication between older and newer app versions.
  4. Payload Size: Minimizes payload overhead, especially for byte arrays, unlike JSON which adds significant overhead.

To get started, install the protobufjs package using your preferred package manager:

npm install protobufjs

You can also use the protobufjs package via a CDN without installing it on your system:

// Import the CDN
import "https://cdn.jsdelivr.net/npm/protobufjs@latest/dist/protobuf.min.js";
<!-- Or include the protobufjs script -->
<script src="https://cdn.jsdelivr.net/npm/protobufjs@latest/dist/protobuf.min.js"></script>

Getting started

Have a look at the quick start guide and comprehensive tutorials to learn how to build applications using @waku/sdk:

GuideDescription
Send and Receive Messages Using Light Push and FilterLearn how to send and receive messages on light nodes using the Light Push and Filter protocols
Retrieve Messages Using Store ProtocolLearn how to retrieve and filter historical messages on light nodes using the Store protocol
Encrypt, Decrypt, and Sign Your MessagesLearn how to use the @waku/message-encryption package to encrypt, decrypt, and sign your messages
Build React DApps Using @waku/reactLearn how to use the @waku/react package seamlessly integrate @waku/sdk into a React application
Scaffold DApps Using @waku/create-appLearn how to use the @waku/create-app package to bootstrap your next @waku/sdk project from various example templates
Bootstrap Nodes and Discover PeersLearn how to bootstrap your node using Static Peers and discover peers using DNS Discovery
Run @waku/sdk in a NodeJS ApplicationLearn our suggested approach for using the @waku/sdk package within a NodeJS application
Debug Your Waku DApp and WebSocketLearn how to troubleshoot your Waku DApp using debug logs and check WebSocket connections in nwaku
Manage Your Filter SubscriptionsLearn how to manage filter subscriptions and handle node disconnections in your application
tip

Until node incentivisation is in place, you should operate extra nodes alongside the ones provided by the Waku Network. When running a node, we recommend using the DNS Discovery and Static Peers configuration to connect to both the Waku Network and your node.

Get help and report issues

To engage in general discussions, seek assistance, or stay updated with the latest news, visit the #support and #js-waku-contribute channels on the Waku Discord.

If you discover bugs or want to suggest new features, do not hesitate to open an issue in the js-waku repository. Your feedback and contributions are highly valued and will help improve the @waku/sdk package.