https://github.com/crossbario/autobahn-js
WAMP in JavaScript for Browsers and NodeJS
https://github.com/crossbario/autobahn-js
autobahn html5 javascript nodejs pubsub real-time rpc wamp websocket
Last synced: 3 months ago
JSON representation
WAMP in JavaScript for Browsers and NodeJS
- Host: GitHub
- URL: https://github.com/crossbario/autobahn-js
- Owner: crossbario
- License: mit
- Created: 2012-03-09T13:13:13.000Z (about 14 years ago)
- Default Branch: master
- Last Pushed: 2026-01-13T08:37:31.000Z (4 months ago)
- Last Synced: 2026-01-15T14:46:23.838Z (4 months ago)
- Topics: autobahn, html5, javascript, nodejs, pubsub, real-time, rpc, wamp, websocket
- Language: JavaScript
- Homepage: http://crossbar.io/autobahn
- Size: 6.49 MB
- Stars: 1,447
- Watchers: 53
- Forks: 235
- Open Issues: 89
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
# **Autobahn**|JS
WAMP for Browsers and NodeJS.
[](https://www.iana.org/assignments/websocket/websocket.xhtml)
[](https://github.com/crossbario/autobahn-js/actions/workflows/main.yml)
[](https://crossbario.github.io/autobahn-js/)
[](https://www.npmjs.com/package/autobahn)
[](https://www.npmjs.com/package/autobahn)
[](LICENSE)
[](https://nodei.co/npm/autobahn/)
**npm quicklinks:**
* [**autobahn**](https://www.npmjs.com/package/autobahn/) - Autobahn for NodeJS
* [**autobahn-browser**](https://www.npmjs.com/package/autobahn-browser/) - Autobahn for browsers
* [**autobahn-xbr**](https://www.npmjs.com/package/autobahn-xbr/) - Autobahn-[XBR](https://xbr.network/) for NodeJS
* [**autobahn-xbr-browser**](https://www.npmjs.com/package/autobahn-xbr-browser/) - Autobahn-[XBR](https://xbr.network/) for browsers
**XBR quicklinks:**
* [XBR Network](https://xbr.network/) - The XBR Network homepage.
* [XBR Protocol](https://github.com/crossbario/xbr-protocol) - The XBR Protocol source repository.
* [XBR Docs](https://xbr.network/docs/protocol/index.html) - XBR Protocol and APIs Documentation.
---
**Autobahn**|JS is a subproject of the [Autobahn project](https://autobahn.readthedocs.io) and provides an open-source implementation of the **[Web Application Messaging Protocol V2](http://wamp.ws/)** in JavaScript under the [MIT license](/LICENSE).
WAMP provides asynchronous **Remote Procedure Calls** and **Publish & Subscribe** for applications in *one* protocol running over [WebSocket](http://tools.ietf.org/html/rfc6455) (and fallback transports for old browsers).
**Autobahn**|JS runs on both **Web browsers** and **[Node.js](http://nodejs.org/)**.
## 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!**
```javascript
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](https://github.com/cujojs/when) (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](https://github.com/crossbario/autobahn-js-browser) 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](http://bower.io/)**. To install:
bower install autobahn
### Node.js Development
AutobahnJS is available via npm [here](https://www.npmjs.org/package/autobahn). To install:
```console
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](https://nodejs.org/en/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:
```console
node -e "var autobahn = require('autobahn'); console.log('AutobahnJS version:', autobahn.version);"
```
## More information
For more information, take a look at the [project documentation](/doc/README.md). This provides:
* [a quick 'Getting Started'](/doc/getting-started.md)
* [a basic introduction to programming with Autobahn|JS](/doc/programming.md)
* [a list of all examples in this repo](/doc/examples.md)
* [a full API reference](/doc/reference.md)
## Get in touch
Get in touch on our [user forum](https://crossbar.discourse.group/).
## Acknowledgements
**Autobahn**|JS includes code from the following open-source projects
* [when.js](https://github.com/cujojs/when) — Promise/A+ implementation with progress support
* [CryptoJS](http://code.google.com/p/crypto-js/) — Cryptographic functions for WAMP-CRA
Special thanks to the [Coders with an Unhealthy Javascript Obsession](http://cujojs.com/) 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](https://github.com/websockets/ws) library for WebSocket support in Node.js. With Node.js 22+ providing native WebSocket, this dependency is no longer needed.