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).
Try the hosted app at conversejs.org. You can also download and install Converse Desktop or Converse Tauri.
Or set up your own instance:
git 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 8008You can then open http://localhost:8008/dev.html in your browser to access Converse.
See our quickstart guide for more details.
- Main App: Try the full application
- Anonymous Login: Test without creating an account
- Embedded Chat Room: See how to embed a single chat room
Comprehensive documentation is available at conversejs.org/docs, including:
- 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
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 |
Converse implements a wide range of XMPP Extensions (XEPs), making it one of the most protocol-compliant web clients available.
View all supported XEPs (45+)
| 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 |
Converse integrates with popular platforms and frameworks:
| Server | Plugin |
|---|---|
| Openfire | inverse |
| Prosody | mod_conversejs |
| ejabberd | mod_conversejs |
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.
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.
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.


