docs.waku.org/docs/guides/js-waku/run-waku-nodejs.md
LordGhostX b2e5396be5
add js-waku debug guide (#111)
* add debug guide

* add ws notes

* add NodeJS recommendations
2023-08-16 09:29:32 +01:00

2.4 KiB

title
Run @waku/sdk in a NodeJS Application

While the @waku/sdk package is primarily designed for browser environments, you can use it in a NodeJS application. However, there are certain limitations and considerations to keep in mind. This guide provides a comprehensive overview of using @waku/sdk in NodeJS.

Limitations

API Compatibility

@waku/sdk prioritises browser compatibility, avoiding NodeJS APIs for simpler bundling. This design choice enhances browser API compatibility but sacrifices NodeJS optimisation. While many browser APIs work in NodeJS, they might need better optimisation.

Protocol Implementation

@waku/sdk focuses on the client side of the Request/Response protocol. We'll have to replicate all the functionalities added to nwaku to implement extra features.

Codebase Complexity

Balancing browser and NodeJS compatibility while maintaining simplicity adds complexity. A potential fix is making a NodeJS package that wraps @waku/sdk for smoother NodeJS development.

Browser-Specific Logic

Certain features in @waku/sdk are tailored for browsers and might not translate seamlessly to NodeJS. For example, Relay protocol in browsers requires unique transport methods such as WebTransport or WebRTC, which might not align with NodeJS networking capabilities.

Peer Management

@waku/sdk default peer management caters to the browser's ephemeral nature, which is different for NodeJS. This is why DNS Discovery and Peer Exchange are the default discovery mechanisms for the browser but not for NodeJS and desktop applications.

Recommendations

Considering these limitations, consider your use case before opting for @waku/sdk in NodeJS. For a more optimised solution, we recommend running nwaku in a Docker container and consuming its JSON RPC API.

Future Developments

There are plans to release a NodeJS package based on nwaku to streamline the process of using Waku Network features in NodeJS applications. You can track the progress and updates here: https://github.com/waku-org/nwaku/issues/1332.