MCPcopy Index your code
hub / github.com/crossbario/autobahn-js

github.com/crossbario/autobahn-js @v26.3.1

Chat with this repo
repository ↗ · DeepWiki ↗ · release v26.3.1 ↗ · + Follow
277 symbols 821 edges 77 files 6 documented · 2%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Autobahn|JS

WAMP for Browsers and NodeJS.

IANA WAMP CI Docs npm version npm downloads License

NPM

npm quicklinks:

XBR quicklinks:


Autobahn|JS is a subproject of the Autobahn project and provides an open-source implementation of the Web Application Messaging Protocol V2 in JavaScript under the MIT license.

WAMP provides asynchronous Remote Procedure Calls and Publish & Subscribe for applications in one protocol running over WebSocket (and fallback transports for old browsers).

Autobahn|JS runs on both Web browsers and Node.js.

Platform Requirements

Autobahn|JS targets:

  • Node.js 22+ (uses native WebSocket, no external dependencies)
  • Modern browsers: Chrome, Firefox, Edge, Safari (all current versions)

For older Node.js versions (< 22), use AutobahnJS v20.x which includes the ws library.

What can I do with this stuff?

Autobahn|JS makes distributed, realtime Web applications easy: it provides the infrastructure for both distributing live updates to all connected clients (using the PubSub messaging pattern) and for calling remote procedures in different backend components (using RPC).

It is ideal for distributed, multi-client and server applications, such as multi-user database-drive business applications, real-time charts, sensor networks (IoT), instant messaging or MMOGs (massively multi-player online games).

The protocol that Autobahn|JS uses, WAMP, enables application architectures with application code distributed freely across processes and devices according to functional aspects. All WAMP clients are equal in that they can publish events and subscribe to them, can offer a procedure for remote calling and call remote procedures.

Since WAMP implementations exist for multiple languages, this extends beyond JavaScript clients: WAMP applications can be polyglot. Application components can be implemented in a language and run on a device which best fit the particular use case. Applications can span the range from embedded IoT sensors right to mobile clients or the browser - using the same protocol.

Show me some code

The following example implements all four roles that Autobahn|JS offers

  • Publisher
  • Subscriber
  • Caller (calls a remote procedure)
  • Callee (offers a remote procedure)

The code runs unaltered in the browser or Node.js!

try {
   // for Node.js
   var autobahn = require('autobahn');
} catch (e) {
   // for browsers (where AutobahnJS is available globally)
}

var connection = new autobahn.Connection({url: 'ws://127.0.0.1:9000/', realm: 'realm1'});

connection.onopen = function (session) {

   // 1) subscribe to a topic
   function onevent(args) {
      console.log("Event:", args[0]);
   }
   session.subscribe('com.myapp.hello', onevent);

   // 2) publish an event
   session.publish('com.myapp.hello', ['Hello, world!']);

   // 3) register a procedure for remoting
   function add2(args) {
      return args[0] + args[1];
   }
   session.register('com.myapp.add2', add2);

   // 4) call a remote procedure
   session.call('com.myapp.add2', [2, 3]).then(
      function (res) {
         console.log("Result:", res);
      }
   );
};

connection.open();

Features

  • supports WAMP v2, works with any WAMP server
  • works both in the browser and Node.js
  • provides asynchronous RPC and PubSub messaging patterns
  • uses WebSocket or HTTP long-poll as transport
  • easy to use Promise-based API
  • pluggable promises/deferreds: uses when.js (built-in) with progress support for WAMP progressive calls
  • minimal dependencies (when.js for promises, CryptoJS for WAMP-CRA auth)
  • small size (~250kB source, ~110kB minified, ~35kB gzipped)
  • Open-Source (MIT License)

Get it

Browser Development

The latest built release of AutobahnJS can be retrieved by cloning this repository. You can then host the library wherever you need to.

This also contains a complete history of previous releases and can be used with Bower. To install:

bower install autobahn

Node.js Development

AutobahnJS is available via npm here. To install:

npm install autobahn

Supported Node.js Versions

AutobahnJS is tested and supported on the following Node.js versions:

Version Status Support Until
22.x Maintenance LTS Apr 2027
24.x Active LTS "Krypton" Apr 2028
25.x Current

Recommendation: Use Node.js 24.x (Active LTS) for production deployments.

For the latest Node.js release schedule, see nodejs.org/about/previous-releases.

WebSocket Support

Node.js 22+ includes native WebSocket support. AutobahnJS uses this native implementation directly—no external WebSocket library is required.

Quick Check

Verify your installation:

node -e "var autobahn = require('autobahn'); console.log('AutobahnJS version:', autobahn.version);"

More information

For more information, take a look at the project documentation. This provides:

Get in touch

Get in touch on our user forum.

Acknowledgements

Autobahn|JS includes code from the following open-source projects

  • when.js — Promise/A+ implementation with progress support
  • CryptoJS — Cryptographic functions for WAMP-CRA

Special thanks to the Coders with an Unhealthy Javascript Obsession for creating when.js - A lightweight Promise and when() implementation, plus other async goodies.

Historical note: Prior to v26.x, AutobahnJS used the excellent ws library for WebSocket support in Node.js. With Node.js 22+ providing native WebSocket, this dependency is no longer needed.

Core symbols most depended-on inside this repo

add
called by 31
packages/autobahn-xbr/lib/seller.js
ToUint32
called by 28
packages/autobahn/lib/polyfill/typedarray.js
Error
called by 16
packages/autobahn/lib/session.js
ToInt32
called by 11
packages/autobahn/lib/polyfill/typedarray.js
IsCallable
called by 10
packages/autobahn/lib/polyfill/typedarray.js
makeTypedArray
called by 9
packages/autobahn/lib/polyfill/typedarray.js
makeXWire
called by 9
packages/autobahn/test/test_rawsocket_protocol.vitest.js
makeGetter
called by 8
packages/autobahn/lib/polyfill/typedarray.js

Shape

Function 254
Method 19
Class 4

Languages

TypeScript100%

Modules by API surface

packages/autobahn-xbr/test/web3.min.js63 symbols
packages/autobahn/lib/polyfill/typedarray.js40 symbols
packages/autobahn/lib/util.js19 symbols
packages/autobahn-xbr/test/onchain/main.js14 symbols
packages/autobahn-xbr/lib/buyer.js13 symbols
packages/autobahn-xbr/lib/seller.js11 symbols
packages/autobahn/lib/session.js8 symbols
packages/autobahn/test/test_rawsocket_protocol.vitest.js7 symbols
packages/autobahn/test/test_pubsub_excludeme.vitest.js6 symbols
packages/autobahn/test/test_pubsub_exclude.vitest.js6 symbols
packages/autobahn/test/test_pubsub_eligible.vitest.js6 symbols
packages/autobahn/lib/auth/cryptosign.js6 symbols

For agents

$ claude mcp add autobahn-js \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page