Skip to main content
Version: v1.0.2 (stable)

Webassembly client

The Nym webassembly client allows any webassembly-capable runtime to build and send Sphinx packets to the Nym network.

You can install @nymproject/nym-client-wasm via npm from its package page, or with:

npm i @nymproject/nym-client-wasm

The nym-client-wasm package allows easy creation of Sphinx packets from within mobile apps and browser-based client-side apps (including Electron or similar). Browser extensions should also work.

The webassembly client lets you deliver web apps that build and send Sphinx packets solely in a web browser window. However, note that all the normal constraints of browser-based key storage and same-origin rules (which are there for good reason) make it difficult to structure pure webapps apps securely. We are still assessing what can be done here.

Building apps with nym-client-wasm​

There are two example applications located in the directory clients/webassembly in the main Nym platform codebase. The js-example is a simple, bare-bones JavaScript app.

note

Example code coming very soon!

Think about what you're sending!​

caution

Think about what information your app sends. That goes for whatever you put into your Sphinx packet messages as well as what your app's environment may leak.

Whenever you write client PEAPs using HTML/JavaScript, we recommend that you do not load external resources from CDNs. Webapp developers do this all the time, to save load time for common resources, or just for convenience. But when you're writing privacy apps it's better not to make these kinds of requests. Pack everything locally.

If you use only local resources within your Electron app or your browser extensions, explicitly encoding request data in a Sphinx packet does protect you from the normal leakage that gets sent in a browser HTTP request. There's a lot of stuff that leaks when you make an HTTP request from a browser window. Luckily, all that metadata and request leakage doesn't happen in Nym, because you're choosing very explicitly what to encode into Sphinx packets, instead of sending a whole browser environment by default.