Skip to content

About

Web-based XMPP/Jabber chat written in JavaScript

Topics

Resources

Contributing

Stars

3.3k stars

Watchers

128 watching

Forks

Latest commit

 

History

10,310 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

XMPP Chat CI Tests Translation status

Converse is a modern, feature-rich XMPP chat client. It runs in the browser, as a standalone web app or integrated into existing websites, and its headless core (@converse/headless) also runs in Node.js.

Join our chat room (XMPP URL: discuss@conference.conversejs.org).

Screenshot of Converse in full-page mode

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:

git clone --filter=blob:none https://github.com/conversejs/converse.js.git
cd converse.js
git clone https://github.com/conversejs/media.git media  # images such as sponsor 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.

The repository has a long history, so --filter=blob:none makes a blobless clone, which downloads the contents of older file versions only when they're needed. Use --depth 1 instead if you don't need the history at all.

See our quickstart guide for more details.

Screenshots

Converse can be displayed in three ways. Click a screenshot to see it full size.

Screenshot of Converse in full-page mode
Fullpage (default)
A single-page application covering the entire viewport.
Screenshot of Converse in overlay mode
Overlay
Chat boxes appear on top of your website.
Screenshot of Converse in embedded mode
Embedded
Converse integrates into specific elements in your page's DOM.

Live Demos

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
  • Audio Calls: 1:1 audio calls over Jingle (since 15.0.0)
  • Voice Messages: Record and send voice messages, via an opt-in plugin (since 15.0.0)
  • Microblogging: Follow and post to social feeds (since 15.0.0)
  • 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

XMPP Protocol Support

Converse implements a wide range of XMPP Extensions (XEPs), making it one of the most protocol-compliant web clients available.

View all 75 supported XEPs and 5 RFCs
Spec Name Status Since Notes
RFC 6120 XMPP: Core
RFC 6121 XMPP: Instant Messaging and Presence
RFC 6122 XMPP: Address Format
RFC 7395 XMPP Subprotocol for WebSocket
RFC 7590 Use of Transport Layer Security (TLS) in XMPP
XEP-0004 Data Forms Complete
XEP-0030 Service Discovery Complete 0.8.2
XEP-0045 Multi-User Chat Complete
XEP-0048 Bookmarks Complete 2.0.1
XEP-0050 Ad-Hoc Commands Complete 7.0.0
XEP-0054 vcard-temp Complete
XEP-0059 Result Set Management Complete
XEP-0060 Publish-Subscribe Complete
XEP-0066 Out of Band Data Complete 4.0.0
XEP-0077 In-Band Registration Complete 0.8.5
XEP-0085 Chat State Notifications Complete
XEP-0092 Software Version Complete
XEP-0115 Entity Capabilities Complete
XEP-0122 Data Forms Validation Partial basic string field sub-type usage
XEP-0124 Bidirectional-streams Over Synchronous HTTP (BOSH) Complete
XEP-0144 Roster Item Exchange Complete
XEP-0147 XMPP URI Scheme Query Components Partial Clicking an xmpp: URI dispatches the feasible query actions: message, join, roster (add a contact), subscribe/unsubscribe and remove. vCard, ad-hoc command, disco, register and file-transfer query types are not handled. Converse can also be registered as the browser's handler for the xmpp: URI scheme, so that links clicked outside Converse are dispatched the same way.
XEP-0153 vCard-Based Avatars Complete 11.0.0
XEP-0156 Discovering Alternative XMPP Connection Methods Complete 6.0.0
XEP-0163 Personal Eventing Protocol Complete
XEP-0166 Jingle Partial Used for one-to-one audio calls. Adding, modifying or removing contents, and replacing transports, are refused.
XEP-0167 Jingle RTP Sessions Partial Audio only, no video. Informational session-info payloads (ringing, mute, hold) are acknowledged but neither acted upon nor sent.
XEP-0172 User Nickname Complete
XEP-0176 Jingle ICE-UDP Transport Method Complete UDP candidates only, trickled, with ICE restarts.
XEP-0184 Message Delivery Receipts Complete
XEP-0191 Blocking Command Complete 11.0.0
XEP-0198 Stream Management Complete 5.0.0
XEP-0199 XMPP Ping Complete
XEP-0202 Entity Time Partial 1:1 chats only, no MUC occupant support
XEP-0203 Delayed Delivery Complete
XEP-0206 XMPP Over BOSH Complete
XEP-0215 External Service Discovery Partial STUN and TURN servers are discovered for calls, and credentials are requested for restricted ones. Pushed service updates are not handled.
XEP-0223 Persistent Storage of Private Data via PubSub Complete
XEP-0245 The /me Command Complete
XEP-0249 Direct MUC Invitations Complete 0.8.2
XEP-0277 Microblogging over XMPP Partial Authoring geolocation is not implemented.
XEP-0280 Message Carbons Complete 0.8.0
XEP-0293 Jingle RTP Feedback Negotiation Complete
XEP-0294 Jingle RTP Header Extensions Negotiation Complete
XEP-0297 Stanza Forwarding Complete
XEP-0308 Last Message Correction Complete 4.0.0
XEP-0313 Message Archive Management Complete 0.9.5
XEP-0317 Hats Complete
XEP-0319 Last User Interaction in Presence Complete 4.0.5
XEP-0320 Use of DTLS-SRTP in Jingle Sessions Complete
XEP-0330 Pubsub Subscription Partial The follow-list backing the "Social" app: publishing and retracting entries on the user's own subscription node as they follow and unfollow, reading a contact's list of followed feeds, and live multi-device synchronisation of the user's own list (a follow or unfollow on one device propagates to the others via a +notify subscription). The followers side is not exposed.
XEP-0333 Displayed Markers Partial 4.1.1
XEP-0338 Jingle Grouping Framework Complete
XEP-0339 Source-Specific Media Attributes in Jingle Complete
XEP-0352 Client State Indication Complete 0.9.4
XEP-0353 Jingle Message Initiation Partial We do not propose again to resume a call of our own after a reconnection or reload, so only the peer can migrate a call.
XEP-0357 Push Notifications Complete 4.0.0
XEP-0359 Unique and Stable Stanza IDs Complete
XEP-0363 HTTP File Upload Complete 4.0.0
XEP-0371 Jingle ICE Transport Method Complete
XEP-0372 References Complete
XEP-0382 Spoiler messages Complete 3.3.3
XEP-0384 OMEMO Encryption Complete 4.0.0
XEP-0392 Consistent Color Generation Complete 11.0.0
XEP-0393 Message Styling Complete 8.0.0
XEP-0402 PEP Native Bookmarks Complete 11.0.0
XEP-0410 MUC Self-Ping (Schrödinger's Chat) Complete 5.0.0
XEP-0420 Stanza Content Encryption Complete 14.0.0
XEP-0421 Occupant identifiers for semi-anonymous MUCs Complete
XEP-0422 Message Fastening Complete
XEP-0424 Message Retraction Complete 6.0.0
XEP-0425 Moderated Message Retraction Complete 6.0.0
XEP-0431 Full Text Search in MAM Complete
XEP-0433 Extended Channel Search Partial 15.0.0 Keyword search for XEP-0045 groupchats, used to suggest groupchats when joining one. The search form is not requested from the service, the "all" field (full listing) is not used, and MIX channels are not searched for. Falls back to the pre-standard protocol of search.jabber.network when a service doesn't support XEP-0433.
XEP-0437 Room Activity Indicators Complete 8.0.0
XEP-0444 Message Reactions Complete 13.0.0
XEP-0454 OMEMO Media sharing Complete 8.0.0
XEP-0461 Message Replies Complete
XEP-0469 Bookmark Pinning Complete 15.0.0 Pinned groupchats are shown at the top of the list of open groupchats. Pinned bookmarks of groupchats that aren't open aren't shown.
XEP-0472 Pubsub Social Feed Partial Microblog profile of the Pubsub Social Feed: the social-feed discovery feature and Base-profile node config used by the "Social" app. Gallery-profile nodes are rendered (consume-only, as an image grid); creating/hosting gallery nodes is not implemented.

Integration Options

Converse integrates with popular platforms and frameworks:

XMPP Servers

Server Plugin
Openfire inverse
Prosody mod_conversejs
ejabberd mod_conversejs

Web Frameworks & CMS

Platform Integration
Elgg plugin
Peertube peertube-plugin-livechat
Pàdé Pàdé
Roundcube roundcube-converse.js-xmpp-plugin
Tiki Wiki CMS Groupware built-in optional feature
Ubuntu-Touch ConverseJS for Ubuntu-Touch
WordPress ConverseJS Plugin

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.

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.

The repo also comes with a code review skill, codereview-conversejs. It checks a change against the project's architectural rules as well as the usual correctness and testing concerns. It uses the open Agent Skills format, so coding agents that support skills (such as Codex, Claude Code and OpenCode) can pick it up automatically when you work in this repo. To run it explicitly, use $codereview-conversejs in Codex or /codereview-conversejs in Claude Code, or ask your agent to use the skill by name. Running it on your change before you open a pull request is a good way to catch problems early, but it doesn't replace your own review or the maintainers'.

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

Blokt Crypto & Privacy LITSLINK software development KeyCDN

About

Web-based XMPP/Jabber chat written in JavaScript

Topics

Resources

Contributing

Stars

3.3k stars

Watchers

128 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages