I'm excited to announce the release of @getmaapp/signal-wasm v0.1.0, a Rust crate compiled to WebAssembly that exposes the Signal Protocol (Double Ratchet, X3DH) to Browser JavaScript and TypeScript environments for E2EE messaging.
Repository: https://github.com/getmaapp/signal-wasm NPM: https://www.npmjs.com/package/@getmaapp/signal-wasm
Motivation The landscape of web applications is evolving rapidly, and secure communication is becoming more critical than ever. - Rise of Chat Features: More web apps are integrating chat directly into their products. - AI Chatbots: The proliferation of AI agents necessitates secure, private channels for sensitive data. - Security Threats: With the increase in hackers, fraud, and data breaches, reliance on cleartext or weak encryption is no longer sufficient. - Vendor Lock-in: Existing E2EE solutions function as "black boxes" or proprietary SaaS offerings, locking developers into specific ecosystems. - Open Source Foundation: The Signal Protocol is the gold standard for E2EE, but using it in a pure browser environment has historically been challenging due to WASM constraints (system time, randomness, etc.). - This project aims to provide a long-term open-source tool that makes the Signal Protocol accessible to any web developer, without the lock-in.
Implementation Details This library wraps the upstream libsignal Rust crates and solves several WASM-specific challenges: - Randomness: Replaces OsRng (which panics in WASM) with getrandom using the Web Crypto API. - Time: Handles SystemTime panics by bridging to js_sys::Date. - Async/Await: Exposes a clean async API for JavaScript, handling the synchronous Rust core.
Caveats & Disclaimers - I am not a Cryptographer: I am primarily a TypeScript/React full-stack developer (Effect-TS) with a background in Product Management. While this library binds the official Signal Rust crates, the bindings themselves have not been audited. - AI-Assisted Development: This project was built with significant assistance from AI coding agents (Google Antigravity, Claude Opus 4.5, Gemini 3). - Attribution: Huge credit belongs to the Signal Foundation and their engineering team for creating the cryptographic primitives and the libsignal Rust implementation that makes this possible. We are standing on the shoulders of giants.
Call to Action - This is v0.1.0. It works, it passes tests, and we have a working React demo in the repo. However, to make this the standard for web-based E2EE, we need community eyes on it. - Collaboration and contributions are highly welcome. Whether it's code review, improving the WASM bridge, or building cool demos, I'd love to see what you build.
About Me I'm a TypeScript/React developer and Product Manager.
LinkedIn: https://www.linkedin.com/in/thecannabisapp/ Github: https://github.com/thecannabisapp Email: jia@getma.app
Thanks!