Lightweight web chat client for XMPP server.
- Connect to an XMPP server with WebSocket or BOSH,
- Chat and groupchat (MUC as defined in XEP-0045),
- Retrieve contacts (roster) and bookmarked rooms (XEP-0048),
- Send and receive files over HTTP (XEP-0066, XEP-0363),
- Handle password protected room,
- Display chat state notifications: is composing, is paused (XEP-0085),
- Format messages: bold, italic, striked, link and code inline/block (XEP-0393),
- Pick emoji,
- Room creation and configuration,
- PWA (Progressive Web App) creating user experiences similar to native applications on desktop and mobile devices,
- Lightweight (600 KB gzipped at the first loading and then less than 10 KB)
- Guest access
/guest?join={jid}
(joining a MUC anonymously as described in RFC 4505)
XMPP Web can be installed:
- With provided Ansible role,
- From archive:
- download latest release,
- unarchive,
- create Apache virtual host,
- configure
local.js
),
- From Docker image (docker pull nioc/xmpp-web, based on nginx):
- as standalone service:
docker run -it -p 80:80 --rm \ -e XMPP_HTTP=https://domain-xmpp.ltd:5281/http-bind \ -e XMPP_WS=https://domain-xmpp.ltd:5281/xmpp-websocket \ -e APP_DEFAULT_DOMAIN=domain-xmpp.ltd \ --name xmpp-web-1 nioc/xmpp-web
- in a docker-compose:
version: "3.4" services: xmpp-web: image: nioc/xmpp-web:latest ports: - "80:80" environment: - XMPP_HTTP=https://domain-xmpp.ltd:5281/http-bind - XMPP_WS=https://domain-xmpp.ltd:5281/xmpp-websocket - APP_DEFAULT_DOMAIN=domain-xmpp.ltd
- as standalone service:
- From source (
git clone
,npm build
, etc...)
local.js attribute |
Environment | Default (initial value) | Description |
---|---|---|---|
name |
APP_NAME |
"XMPP web" |
Application name |
transports.bosh |
APP_HTTP |
"https://chat.domain-web.ltd/http-bind" |
BOSH endpoint used by application (proxy or direct XMPP server) |
transports.websocket |
APP_WS |
"wss://chat.domain-web.ltd/xmpp-websocket" |
Websocket endpoint used by application (proxy or direct XMPP server) |
hasRegisteredAccess |
APP_REGISTERED_ACCESS |
true |
Set to false to disable registered users components (guest access only) |
hasGuestAccess |
APP_GUEST_ACCESS |
true |
Set to false to disable guest users components |
anonymousHost |
XMPP_ANON_HOST |
null |
Virtual host used for guest access (anonymous) |
isTransportsUserAllowed |
APP_IS_TRANSPORTS_USER_ALLOWED |
false |
Allow user to set endpoints on the fly in login component |
hasHttpAutoDiscovery |
APP_HTTP_AUTODISCOVERY |
false |
Allow to retrieve a .well-known/host-meta.json if user log on a different domain |
resource |
APP_RESOURCE |
"Web XMPP" |
Resource (client) affected to user |
defaultDomain |
APP_DEFAULT_DOMAIN |
"domain-xmpp.ltd" |
Domain used if user do not provide a full jid |
defaultMuc |
APP_DEFAULT_MUC |
null |
Autocomplete MUC address (ex: conference.domain.ltd ) if user do not provide a full room jid (join & create) |
isStylingDisabled |
APP_IS_STYLING_DISABLED |
false |
Set to true for disable messages styling |
N/A | XMPP_HTTP |
"http://localhost:5280/http-bind" |
BOSH endpoint proxyfied by Nginx (on a docker installation) |
N/A | XMPP_WS |
"http://localhost:5280/xmpp-websocket" |
Websocket endpoint proxyfied by Nginx (on a docker installation) |
- Nioc - Initial work
See also the list of contributors to this project.
This project is powered by the following components:
- StanzaJS (MIT)
- VueJS (MIT)
- Vuex (MIT)
- Vue Router (MIT)
- Vue-moment (MIT)
- Bulma (MIT)
- Buefy (MIT)
- Fork Awesome (SIL OFL 1.1)
This project is licensed under the GNU Affero General Public License v3.0 - see the LICENSE file for details