#browser #async-api #server-api #data-exchange #rpc #client-server


WebSocket crate (client and server) providing an async Rust API that functions uniformly in native and in browser (WASM32) environments. This crate allows you to develop WebSocket-driven data exchange that function uniformly in web and desktop applications.

26 releases (9 breaking)

0.11.0 Feb 25, 2024
0.10.2 Dec 24, 2023
0.8.1 Nov 1, 2023
0.3.17 May 28, 2023
0.1.2 Sep 21, 2022

#20 in WebSocket

Download history 317/week @ 2023-12-13 287/week @ 2023-12-20 361/week @ 2023-12-27 423/week @ 2024-01-03 177/week @ 2024-01-10 453/week @ 2024-01-17 295/week @ 2024-01-24 211/week @ 2024-01-31 123/week @ 2024-02-07 213/week @ 2024-02-14 331/week @ 2024-02-21 212/week @ 2024-02-28 166/week @ 2024-03-06 138/week @ 2024-03-13 153/week @ 2024-03-20 165/week @ 2024-03-27

638 downloads per month
Used in 17 crates (2 directly)


6.5K SLoC


Part of the workflow-rs application framework.

github crates.io docs.rs license

Platform-neutral WebSocket Client and native Server.


  • Uniform async Rust WebSocket client API that functions in the browser environment (backed by browser WebSocket class) as well as on native platforms (backed by Tungstenite client).
  • Trait-based WebSocket server API backed by Tungstenite server.

This crate allows you to develop a WebSocket client that will work uniformly in in hte native environment and in-browser.

Workflow-WebSocket crate is currently (as of Q3 2022) one of the few available async Rust client-side in-browser WebSocket implementations.

This web socket crate offers an async message send API as well as provides access to Receiver and Sender async_std channels ([async_channel])(https://docs.rs/async-channel/latest/async_channel/) that can be used to send and receive WebSocket messages asynchronously.

To use workflow-websocket in the Node.js environment, you need to introduce a W3C WebSocket object before loading the WASM32 library to simulate the global WebSocket object available in Web Browsers. The WebSocket NPM module provides W3C WebSocket compatible implementation and can be used as follows:

// WebSocket
globalThis.WebSocket = require('websocket').w3cwebsocket;
// Load WASM32 library ...


~524K SLoC