Converse.js
Web-based XMPP/Jabber chat written in JavaScript
[Converse](https://conversejs.org) is a modern, feature-rich and 100% client-side [XMPP](https://xmpp.org) chat app that runs in a web browser. It can be used as a standalone web app or seamlessly integrated into existing websites. The project is written primarily in JavaScript, distributed under the Mozilla Public License 2.0 license, first published in 2012. It has gained significant community traction with 3,267 stars and 828 forks on GitHub. Key topics include: chat, jabber, lit, omemo, xmpp.
Converse is a modern, feature-rich and 100% client-side XMPP chat app that runs in a web browser.
It can be used as a standalone web app or seamlessly integrated into existing websites.
Join our chat room (XMPP URL: discuss@conference.conversejs.org).
Quick Start
Try the hosted app at conversejs.org.
You can also download and install Converse Desktop or Converse Tauri.
Or set up your own instance:
bashgit clone git@github.com:conversejs/converse.js.git cd converse.js git clone https://github.com/conversejs/media.git media; // To see images like sponsorship logos npm install npm run build npm run serve -- -p 8008
You can then open http://localhost:8008/dev.html in your browser to access Converse.
See our quickstart guide for more details.
Screenshots
<details> <summary>Click to view screenshots</summary>Overlay Mode

Fullpage Mode

Embedded Mode

Live Demos
- Main App: Try the full application
- Anonymous Login: Test without creating an account
- Embedded Chat Room: See how to embed a single chat room
Documentation
Comprehensive documentation is available at conversejs.org/docs, including:
Key Features
- Multiple UI Options: Overlay chat boxes, full-page application, or embedded components
- Rich Messaging: Message styling, corrections, reactions, and URL previews
- Privacy-Focused: End-to-end encryption with OMEMO
- User Status: Custom status messages and availability indicators
- Notifications: Desktop notifications for new messages
- File Sharing: HTTP File Upload support
- Extensible: Plugin architecture based on pluggable.js
- Internationalized: Translated into 40+ languages
- Anonymous Login: Use without registration (server permitting)
- Responsive: Works on desktop and mobile devices
Display Modes
Converse adapts to your needs with multiple display options:
| Mode | Description |
|---|---|
| Fullpage (default) | Functions as a single-page application covering the entire viewport |
| Overlay | Chat boxes appear on top of your website |
| Embedded | Integrates into specific elements in your page's DOM |
XMPP Protocol Support
Converse implements a wide range of XMPP Extensions (XEPs), making it one of the most protocol-compliant web clients available.
<details> <summary><strong>View all supported XEPs (45+)</strong></summary>| XEP | Name | Notes |
|---|---|---|
| RFC-7395 | XMPP Subprotocol for WebSocket | |
| XEP-0004 | Data Forms | |
| XEP-0030 | Service Discovery | |
| XEP-0045 | Multi-user Chat | |
| XEP-0048 | Bookmarks | |
| XEP-0050 | Ad-Hoc Commands | |
| XEP-0054 | VCard-temp | |
| XEP-0059 | Result Set Management | |
| XEP-0060 | Publish-Subscribe | Limited support |
| XEP-0066 | Out of Band Data | |
| XEP-0077 | In-band Registration | |
| XEP-0085 | Chat State Notifications | |
| XEP-0115 | Entity Capabilities | |
| XEP-0124 | BOSH | |
| XEP-0144 | Roster Item Exchange | |
| XEP-0156 | Discovering Alternative XMPP Connection Methods | |
| XEP-0163 | Personal Eventing Protocol | Limited support |
| XEP-0184 | Message Receipt | |
| XEP-0198 | Stream Management | |
| XEP-0199 | XMPP Ping | |
| XEP-0203 | Delayed Delivery | |
| XEP-0206 | XMPP Over BOSH | |
| XEP-0245 | The /me Command | |
| XEP-0249 | Direct MUC Invitations | |
| XEP-0280 | Message Carbons | |
| XEP-0297 | Stanza Forwarding | Limited support |
| XEP-0308 | Last Message Correction | |
| XEP-0313 | Message Archive Management | |
| XEP-0316 | MUC Eventing Protocol | Limited support |
| XEP-0317 | Hats | Limited support |
| XEP-0333 | Chat Markers | Limited support |
| XEP-0352 | Client State Indication | |
| XEP-0357 | Push Notifications | |
| XEP-0359 | Unique and Stable Stanza IDs | |
| XEP-0363 | HTTP File Upload | |
| XEP-0372 | References | |
| XEP-0382 | Spoiler Messages | |
| XEP-0384 | OMEMO Encryption | |
| XEP-0393 | Message Styling | |
| XEP-0422 | Message Fastening | Limited support |
| XEP-0424 | Message Retractions | |
| XEP-0425 | Message Moderation | |
| XEP-0437 | Room Activity Indicators | |
| XEP-0453 | DOAP Usage in XMPP | |
| XEP-0454 | OMEMO Media Sharing | |
| XEP-0461 | Message Replies |
Integration Options
Converse integrates with popular platforms and frameworks:
XMPP Servers
| Server | Plugin |
|---|---|
| Openfire | inverse |
| Prosody | mod_conversejs |
| ejabberd | mod_conversejs |
Web Frameworks & CMS
LLM and GenAI usage
Large Language Models have been and may be used to assist with Converse's development,
including writing and refactoring code, editing documentation and research.
Converse does not implement its own cryptography. OMEMO end-to-end encryption is
delegated to libomemo.js; see that
project's own LLM and GenAI usage
note for how its security-critical code is verified.
Within Converse, correctness is checked independently of any AI. The test suite
runs in a real browser, and every change, however it was drafted, is reviewed by
a human maintainer who remains responsible for it, exactly as for any third-party
contribution.
Contributing with AI assistance
Using LLMs or coding agents to help write your contribution is allowed. AI is a
legitimate tool, and we won't reject a patch simply because a model helped write
it. But the bar is the same as for any other pull request:
- Understand what you submit. You are responsible for your contribution. Be
able to explain how it works and why it's correct. - Test it. Your code must build and pass the test suite, and new behaviour
should come with tests. - Disclose it. Note in your pull request that AI tooling was used. This is
about honesty and giving reviewers context, not stigma. - No slop. Unreviewed, untested, auto-generated output thrown over the fence
will be closed. Volume is not contribution, and reviewing it costs maintainers
real time.
If you're driving Converse with a coding agent, start with
AGENTS.md, which documents the architecture, conventions and
build/test workflow the project expects.
Support the Project
If you find Converse useful, please consider supporting its development:
Thanks to everyone who has supported this project over the years through donations, testing, bug reports, and code contributions.
Sponsors
<div style="display: flex; flex-wrap: wrap; gap: 20px; align-items: center; justify-content: center;"> <a href="https://bairesdev.com/sponsoring-open-source-projects/?utm_source=conversejs" target="_blank" rel="noopener"> <img alt="BairesDev" src="https://raw.githubusercontent.com/conversejs/media/main/logos/BairesDev_logo-orange.png" width="200"> </a> <a href="https://blokt.com?utm_source=conversejs" target="_blank" rel="noopener"> <img alt="Blokt Crypto & Privacy" src="https://raw.githubusercontent.com/conversejs/converse.js/541613d1fea8aef364af00180f60e959162e5e4b/logo/blokt.png" width="200"> </a> <a href="https://www.litslink.com?utm_source=conversejs" target="_blank" rel="noopener"> <img alt="LITSLINK software development" src="https://raw.githubusercontent.com/conversejs/media/main/logos/litslink-light.svg" width="200"> </a> <a href="https://www.keycdn.com?utm_source=conversejs" target="_blank" rel="noopener"> <img alt="KeyCDN" src="https://raw.githubusercontent.com/conversejs/converse.js/541613d1fea8aef364af00180f60e959162e5e4b/logo/keycdn.png" width="200"> </a> </div>Contributors
Showing top 12 contributors by commit count.
