Converse.js 14.0.1 介绍与选型指南

梳理 Converse.js 14.0.1(MPL-2.0)开源 XMPP Web 客户端库的定位、架构、功能边界与适用场景,给出与 JSXC/Candy/Movim/Element Web/Chitchatter 的量化选型对比,含 CDN 最小可用示例实测,全文数据溯源至 2026-10-25。

Converse.jsConverse.jsXMPPJavaScript即时通信自托管2026/10/25

Converse.js 14.0.1 介绍与选型指南

目标:讲清 Converse.js(14.0.1,MPL-2.0)这款开源 XMPP Web 客户端库的定位、架构、功能边界与同类选型,并给出最小可用示例。全部版本与活跃度数据实查自 npm registry、GitHub Releases、shields.io 与官方 CDN(采集日期 2026-10-25),最小示例已在 Ubuntu 22.04 + Chromium 实测通过。

一、环境信息

本文涉及的事实数据采集与最小示例验证环境如下:

  • 操作系统:Ubuntu 22.04(x86_64,最小示例验证机)
  • Converse.js:14.0.1(2026-10-17 发布;14.0.0 发布于 2026-06-26,npm registry 共 76 个版本)
  • 数据源:npm registry(converse.js 包元数据)、GitHub conversejs/converse.js Releases、shields.io 星数徽章、官方 CDN cdn.conversejs.org
  • 验证浏览器:Chromium(无头模式,CDP 驱动)
  • 联调服务端:Prosody IM 0.12(WebSocket 传输,仅用于验证最小示例可登录收发)

💡 说明:Converse.js 是纯前端 JavaScript 库,没有自己的服务端进程——「安装 Converse.js」就是把它的 JS/CSS 静态产物挂到任意 Web 服务器(或直接从 CDN 引用),真正提供账号、消息路由与存储的是背后的 XMPP 服务器。

二、软件概述

Converse.js 是一款开源的、运行在浏览器里的 XMPP 即时通讯客户端。它以 JavaScript 库的形态交付:在任意网页里引入一个 CSS 和一个 JS,再调用一次 converse.initialize(),页面就得到一个功能完整的 IM 客户端——单聊、多人群聊(MUC)、联系人列表、消息归档、端到端加密一应俱全。它既可以整页铺开作为一个独立的 Web 聊天站,也可以收缩成页面右下角的一个聊天控件嵌入既有站点。

项目基本信息(实查数据,采集日期 2026-10-25):

项目内容
名称 / 仓库Converse.js / github.com/conversejs/converse.js
许可证MPL-2.0(Mozilla Public License,npm 包元数据确认)
开发语言JavaScript(v14 构建产物为原生 ES Module)
底层协议XMPP(经 Strophe.js 连接库,传输层走 WebSocket 或 BOSH)
Stars3.3k(shields.io 徽章,2026-10-25 取数)
最新稳定版14.0.1(2026-10-17 发布,npm registry 与 GitHub Releases 的 v14.0.1 tag 一致)
交付形态npm 包 converse.js + 官方 CDN(cdn.conversejs.org);无官方 Docker 镜像(Docker Hub 无 conversejs 组织账号,检索到的均为第三方无关镜像)
服务端依赖必须连接一个 XMPP 服务器(Prosody / ejabberd / Openfire 等)
官方文档站conversejs.org/docs(quickstart / configuration / plugin-development)

npm 包(14.0.1)实测构成:包总体 44MB,其中 dist/ 目录约 22MB,含 converse.js(3.5MB 未压缩版)、converse.min.js(1.3MB)、converse.min.css(548KB)、按语言拆分的异步 chunk、提示音(sounds/msg_received.mp3|ogg)、字体与图片、emoji.json、多标签页共享连接用的 shared-connection-worker.js,以及 OMEMO 加密依赖的 libomemo.esm.min.js 与 curve25519_compiled.wasm。

⚠️ 注意(v14 关键变化):14.x 的 dist 产物是原生 ES Module(产物尾部为 export{...as default}),必须用 <script type="module" src="..."> 方式加载;用传统 <script src> 加载会得到 converse is not defined。官方 quickstart 文档自 v14 起也一律使用 module 写法。

三、核心架构

理解 Converse.js 的架构,关键是分清「浏览器里的部分」和「浏览器外的部分」——它本身只有前者。

3.1 数据流与组件分层

一次典型的聊天会话数据流如下:

┌──────────────────────────── 浏览器 ────────────────────────────┐
│  Converse.js UI(Web Components)                              │
│    │                                                           │
│    ▼                                                           │
│  插件/API 层(converse.plugins.add 注册的插件,api.* 调用面)   │
│    │                                                           │
│    ▼                                                           │
│  Strophe.js 连接层(XMPP 流的建立、SASL 认证、Stanza 收发)     │
│    │                                                           │
│    ▼  本地缓存:IndexedDB / localStorage / sessionStorage       │
└────────────────────────────┬───────────────────────────────────┘
                             │ 传输层二选一:
                             │ ① WebSocket(wss://,XMPP over WebSocket,RFC 7395)
                             │ ② BOSH(https:// 长轮询,XEP-0124/0206)
┌────────────────────────────▼───────────────────────────────────┐
│                     XMPP 服务器(浏览器外)                      │
│   账号 / 花名册 / 消息路由 / 离线消息 / 归档 / 群聊(MUC 组件)    │
│   代表实现:Prosody、ejabberd、Openfire                          │
└─────────────────────────────────────────────────────────────────┘

分层职责对照:

层承担职责具体实现消息内容归属
UI 层登录框、联系人列表、聊天窗、群聊、通知Converse.js(Web Components 自定义元素)本地渲染
插件/API 层功能装配与扩展点,向外暴露 api.* 调用面Converse.js 插件机制(核心功能也全部是插件)本地
连接/协议层XMPP 流协商、SASL(SCRAM)认证、Stanza 编解码Strophe.js(Converse.js 内置依赖)明文仅存在于两端内存
传输层浏览器到服务器的双向通道WebSocket(默认推荐)或 BOSHTLS 加密传输
服务端账号、花名册、消息路由与存储、群聊、联邦外部 XMPP 服务器(Prosody/ejabberd 等)由服务端策略决定

💡 技术拓展:浏览器无法直接发起 XMPP 的 TCP 连接,所以 XMPP 为 Web 客户端定义了两种传输,同类选项对比如下——

传输原理特点适用场景
WebSocketRFC 7395,单条全双工长连接上跑 XMPP 流延迟低、开销小、现代浏览器全支持默认首选;Converse.js 用 websocket_url 配置
BOSHXEP-0124/0206,HTTP 长轮询模拟双向流兼容性最好、可穿越严格代理/老防火墙老旧网络环境兜底,用 bosh_service_url 配置

本文及本专栏各篇实际采用 WebSocket(Prosody/ejabberd 均内置支持),理由是延迟与连接开销显著优于长轮询;仅当部署环境存在会掐断长连接的中间设备时才退回 BOSH。

3.2 「客户端库」定位的推论

这套架构带来两个直接推论:

  1. 能力上限由服务端决定:消息归档(XEP-0313 MAM)、HTTP 文件上传(XEP-0363)、群聊、推送等能力都需要 XMPP 服务器端模块配合,Converse.js 只是消费方。选型时必须同时选定服务端(本专栏推荐搭配见第七节)。
  2. 跨标签页共享连接:dist 中的 shared-connection-worker.js 用 SharedWorker 让同一浏览器的多个标签页复用同一条 XMPP 连接,多开页面不会重复登录挤下线。

3.3 插件机制与 API 面

Converse.js 的核心功能(群聊、通知、表情……)本身就是一组插件,对外扩展也走同一机制:用 converse.plugins.add('myplugin', {...}) 注册插件,在插件的 initialize() 里通过 this._converse.api 拿到完整 API 面(api.listen.on 事件订阅、api.send 发 Stanza、api.chats.open 打开会话、api.rooms.open 开群聊等)。

⚠️ 注意(v14 实测):全局 converse 对象上没有 .api(只有 initialize/plugins/env 等少量成员),API 必须在自定义插件内部经 this._converse.api 获取;且自定义插件名必须列入 whitelisted_plugins 配置才会被加载。完整的插件写法与联调实录见本专栏《Converse.js 嵌入集成使用指南》篇。

四、功能特性

以下功能清单依据官方文档站与 dist 产物核对(带 ★ 的能力需要 XMPP 服务端对应模块支持):

功能域能力说明
单聊私聊会话、消息修正(XEP-0308)、消息撤回(XEP-0424)修正范围可配置为仅最后一条
群聊 MUC多人聊天室、即时房间、房间配置、管理员工具、邀请★ 依赖服务端 MUC 组件
联系人花名册分组、加好友/订阅请求、vCard 头像支持隐藏离线用户
消息回执输入状态(XEP-0085)、已读标记(XEP-0333)均可开关
消息归档MAM 历史拉取(XEP-0313)、自动补齐缺口★ 需服务端启用 MAM
文件与媒体HTTP 文件上传(XEP-0363)、图片内联渲染、第三方媒体嵌入播放器★ 上传需服务端模块
端到端加密OMEMO(libomemo + curve25519 WASM)★ 需对端客户端同样支持
通知HTML5 桌面通知、提示音、标签页未读计数、@提醒提示音文件在 dist/sounds/
外观明/暗主题(暗色默认 dracula)、时间格式、RTL 语言主题可换
国际化多语言 UI(含 zh_CN 简体中文),语言包按 chunk 异步加载i18n 配置项指定
嵌入形态三种 view_mode:fullscreen 整页 / overlayed 右下角浮窗 / embedded 嵌入页面指定区域嵌入集成见本专栏 E1 篇
连接保持XEP-0198 流管理(SMACKS)断线会话恢复、自动重连、keepalive 跨页面保持登录弱网体验关键

功能边界同样明确:

  • 无音视频通话:Converse.js 不内置 Jingle(XEP-0166)音视频能力,需要音视频的场景应选 Jitsi Meet 等专用方案;
  • 无独立服务端能力:没有账号注册后台、没有管理控制台(注册走 XEP-0077 带内注册表单,管理能力取决于服务端);
  • OMEMO 有生态前提:需要会话对端也用支持 OMEMO 的客户端,且依赖浏览器 WebCrypto(见第六节安全上下文限制)。

五、快速开始(最小可用示例)

最快的体验方式:不装任何东西,直接在一个 HTML 文件里从官方 CDN 引入,连接 conversejs.org 官方演示用的公共 XMPP 端点。把下面内容保存为 demo.html,经任意静态 Web 服务(或直接用浏览器打开本地文件)访问:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Converse.js 最小示例</title>
  <!-- v14 官方 CDN 推荐写法:CSS 常规引入,JS 必须 type="module" -->
  <link rel="stylesheet" href="https://cdn.conversejs.org/14.0.1/dist/converse.min.css">
  <script type="module" src="https://cdn.conversejs.org/14.0.1/dist/converse.min.js"></script>
</head>
<body>
  <script type="module">
    converse.initialize({
      websocket_url: 'wss://conversejs.org/xmpp-websocket',
      view_mode: 'fullscreen'
    });
  </script>
</body>
</html>

⚠️ 注意:CDN 路径里始终带版本号(/14.0.1/dist/)锁定版本;不带版本号的 /dist/ 路径会始终指向最新版,生产环境不建议使用。

实测验证(Chromium 无头模式加载等价页面后检查 DOM):

converse-root=true, controlbox=true, body.class=converse-fullscreen

即 <converse-root> 自定义元素已挂载、登录控制框渲染完成、页面进入全屏模式。在此基础上把 websocket_url 换成自托管 XMPP 服务器即可投入自用——本专栏《Ubuntu 22.04 安装 Converse.js 14 指南》篇给出完整的自托管安装流程(含三个实测踩坑),《Converse.js Docker Compose 部署指南》篇给出容器化部署;与 Prosody 联调登录并实测收发消息的完整过程见《Converse.js 嵌入集成使用指南》篇(实测回显:connected, jid=admin@localhost/converse.js-32168925,消息发送与自收全部成功)。

六、适用场景与限制

6.1 适合的场景

  • 给既有网站加即时通讯:论坛、社区、电商、文档站想加「站内聊」,引入两个静态资源即得完整 IM,是最省事的方案;
  • 企业/团队自托管 IM 的 Web 端:与 Prosody 或 ejabberd 组合,得到一套完全自控的 Slack 替代品,Web 端免安装、零分发成本;
  • 客服/旁路聊天控件:overlayed 模式在页面右下角浮出聊天窗,适合客服与社区互动入口;
  • 重视开放标准与联邦:XMPP 是 IETF 标准化的开放协议,可与其他 XMPP 部署联邦互通,不被单一厂商锁定。

6.2 明确的限制

  • 强依赖 XMPP 服务端:没有服务端就什么都不能跑,且多项功能(MAM 归档、文件上传、群聊)要求服务端开启对应模块;
  • SCRAM 认证依赖安全上下文:登录密码认证走 SCRAM,其密钥派生使用浏览器 WebCrypto(crypto.subtle),该 API 仅在 HTTPS(或 localhost)页面可用——生产环境必须全站 HTTPS,纯 HTTP 部署会在登录时直接失败(本专栏 E1 篇有实测报错实录);
  • 无音视频通话:见第四节功能边界;
  • v14 起必须 ES Module 加载:老旧的构建管线(不支持 ESM 的打包器、RequireJS 类 AMD 加载器)无法直接消费 dist 产物;
  • 超大规模需掂量:单条 WebSocket 长连接模型下,在线规模上限主要取决于 XMPP 服务端的连接承载能力,而非 Converse.js 本身。

七、同类选型对比

与 Converse.js 同处「浏览器里的即时通讯客户端」定位的主要开源选项对比如下(星数为 shields.io 徽章 2026-10-25 取数,版本信息发布日实查自各仓库):

项目协议形态账号来源E2E 加密嵌入网页能力Stars与 Converse.js 的关键差异
Converse.js 14.0.1XMPP纯前端 JS 库XMPP 服务器账号OMEMO三种 view_mode,原生嵌入设计3.3k功能最全的 XMPP Web 客户端库,单聊+MUC+OMEMO 一体
JSXCXMPP纯前端 JS 库XMPP 服务器账号OMEMO侧栏浮窗嵌入729定位相似,功能与维护节奏弱于 Converse.js
CandyXMPP纯前端 JS 库XMPP 服务器账号无整页群聊为主1.3k专注 MUC 群聊页面,多年停更
MovimXMPP完整 Web 应用(含服务端)XMPP 账号OMEMO不作为库嵌入2.1k带 PHP 后端的完整社交化 IM 站点,非可嵌入库
Element WebMatrix完整 Web 应用Matrix 账号是(Megolm)不作为库嵌入( iframe 非官方用法)14kMatrix 生态旗舰客户端,需配套 Matrix homeserver
ChitchatterWebRTC P2P纯前端静态应用无账号(URL 即房间)是(WebRTC 强制)<chat-room> Web Component 一行嵌入2.3k无服务器、消息瞬态的临时会话工具,定位正交

💡 说明:上表后三者(Movim / Element Web / Chitchatter)与 Converse.js 并非同一细分物种,列入对比是因为选型时经常被一起问到。真正的同物种竞品是 JSXC 与 Candy。

选型建议(「如果…则…」):

  • 如果要把完整 IM(单聊+群聊+加密)嵌入或接入自己的网站,且认同 XMPP 开放协议→ Converse.js,它是该定位下功能最全、维护最活跃的选择;
  • 如果只要一个页面右下角的轻量聊天侧栏且已运营 XMPP 服务 → 也可评估 JSXC,但其功能面与发布节奏均不及 Converse.js;
  • 如果只需要一个永久在线的群聊大厅页面→ Candy 足够简单,但项目多年未更新,不建议新项目采用;
  • 如果团队已选 Matrix 生态(需要 Matrix 特有的房间模型与桥接)→ Element Web,它与 XMPP 体系互不相通,属于另一条技术路线;
  • 如果要零部署、聊完不留痕的临时会话→ Chitchatter(见《Chitchatter 介绍与选型指南》),它与 Converse.js 的「有账号、有归档」定位正交互补。

版本节奏与兼容性量化补充:Converse.js 在 npm 上累计发布 76 个版本,14.x 大版本线自 2026-06-26 首发、2026-10-17 发布 14.0.1,保持着活跃的大版本迭代;v14 起产物为原生 ES Module,兼容面为支持 ESM 与 WebCrypto 的所有现代浏览器(Chrome/Edge/Firefox/Safari 当前主版本),IE 等 legacy 浏览器不再支持。服务端兼容面:任何实现了 WebSocket(RFC 7395)或 BOSH 的标准 XMPP 服务器均可对接,本站已实测的组合见《Prosody IM 13.0.7 介绍与选型指南》与《ejabberd 26.09 介绍与选型指南》。

八、参考链接

本专栏其他篇目:《Ubuntu 22.04 安装 Converse.js 14 指南》、《Converse.js Docker Compose 部署指南》、《Converse.js 14 配置参数详解》、《Converse.js 嵌入集成使用指南》。