{"id":15147067,"url":"https://github.com/nioc/xmpp-web","last_synced_at":"2026-03-04T02:19:31.002Z","repository":{"id":39656427,"uuid":"219066106","full_name":"nioc/xmpp-web","owner":"nioc","description":"Lightweight web chat client for XMPP server","archived":false,"fork":false,"pushed_at":"2025-02-22T13:50:04.000Z","size":1731,"stargazers_count":156,"open_issues_count":16,"forks_count":21,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-03-28T21:08:46.100Z","etag":null,"topics":["muc","vuejs","xmpp","xmpp-client","xmpp-web"],"latest_commit_sha":null,"homepage":"","language":"Vue","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nioc.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-11-01T21:35:47.000Z","updated_at":"2025-03-21T09:30:10.000Z","dependencies_parsed_at":"2024-11-14T21:21:13.216Z","dependency_job_id":"8d24c3a2-47aa-4775-bc69-da6b17f6c6f0","html_url":"https://github.com/nioc/xmpp-web","commit_stats":{"total_commits":172,"total_committers":3,"mean_commits":"57.333333333333336","dds":0.07558139534883723,"last_synced_commit":"6f72e7a7923ef34357c4ec405167a32183c05865"},"previous_names":[],"tags_count":30,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nioc%2Fxmpp-web","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nioc%2Fxmpp-web/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nioc%2Fxmpp-web/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nioc%2Fxmpp-web/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nioc","download_url":"https://codeload.github.com/nioc/xmpp-web/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247256112,"owners_count":20909240,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["muc","vuejs","xmpp","xmpp-client","xmpp-web"],"created_at":"2024-09-26T12:21:59.299Z","updated_at":"2026-03-04T02:19:30.997Z","avatar_url":"https://github.com/nioc.png","language":"Vue","funding_links":[],"categories":[],"sub_categories":[],"readme":"# XMPP Web\n\n[![license: AGPLv3](https://img.shields.io/badge/license-AGPLv3-blue.svg)](https://www.gnu.org/licenses/agpl-3.0)\n[![GitHub release](https://img.shields.io/github/release/nioc/xmpp-web.svg)](https://github.com/nioc/xmpp-web/releases/latest)\n[![GitHub downloads](https://img.shields.io/github/downloads/nioc/xmpp-web/total?label=github%20downloads)](https://github.com/nioc/xmpp-web/releases/latest)\n[![GitHub Docker workflow status](https://img.shields.io/github/actions/workflow/status/nioc/xmpp-web/docker-image.yml?label=github%20build)](https://github.com/nioc/xmpp-web/actions/workflows/docker-image.yml)\n[![GitHub E2E tests workflow status](https://img.shields.io/github/actions/workflow/status/nioc/xmpp-web/e2e-test.yml?label=e2e%20tests)](https://github.com/nioc/xmpp-web/actions/workflows/e2e-test.yml)\n[![Docker Pulls](https://img.shields.io/docker/pulls/nioc/xmpp-web)](https://hub.docker.com/r/nioc/xmpp-web/tags)\n[![Docker Image Size (latest by date)](https://img.shields.io/docker/image-size/nioc/xmpp-web?sort=date)](https://hub.docker.com/r/nioc/xmpp-web/tags)\n[![GitHub issues by-label](https://img.shields.io/github/issues/nioc/xmpp-web/help%20wanted?label=issues%20need%20help)](https://github.com/nioc/xmpp-web/labels/help%20wanted)\n\nLightweight web chat client for XMPP server.\n\n## Table of contents\n\n- [Key features](#key-features)\n- [Installation](#installation)\n  - [Ansible](#ansible)\n  - [Archive](#archive)\n  - [Docker image](#docker-image)\n  - [Build from source](#build-from-source)\n- [Upgrade](#upgrade)\n  - [Archive](#archive)\n  - [Docker image](#docker-image)\n- [Configuration](#configuration)\n- [Contributing](#contributing)\n- [Credits](#credits)\n- [License](#license)\n\n## Key features\n\n- Connect to an XMPP server with WebSocket,\n- Chat and groupchat (MUC as defined in XEP-0045),\n- Retrieve contacts (roster) and bookmarked rooms (XEP-0048),\n- Send and receive files over HTTP (XEP-0066, XEP-0363),\n- Handle password protected room,\n- Display and send chat state notifications: is composing, is paused (XEP-0085),\n- Format messages: bold, italic, striked, link and code inline/block (XEP-0393),\n- Pick emoji in message and reactions (XEP-0444),\n- Room creation and configuration,\n- Apply message moderation (XEP-0425),\n- Display and edit vCard information (in particular the user avatar, XEP-0054),\n- PWA (Progressive Web App) creating user experiences similar to native applications on desktop and mobile devices,\n- Lightweight (800 KB gzipped at the first loading and then less than 10 KB)\n- Guest access `/guest?join={jid}` (joining a MUC anonymously as described in RFC 4505)\n\n![Screenshot desktop](/docs/screenshot-desktop-main.png)\n![Screenshot mobile home](/docs/screenshot-mobile-main.png) ![Screenshot mobile chat](/docs/screenshot-mobile-chat.png)\n![Screenshot guest join](/docs/screenshot-guest-join.png)\n\n## Installation\n\nThere are 4 different ways to install XMPP Web:\n\n- using [Docker image](#docker-image) (easiest, **strongly recommended**),\n- using [release archive](#archive),\n- build from [source code](#build-from-source) (latest code but hardest).\n- ~~from provided [Ansible role](#ansible)~~ (not maintained),\n\n### Ansible\n\nLong time ago, we provided an [Ansible role](/docs/ansible/xmpp-web/README.md).\nIt had not been updated since 2020 and nobody used it, **it is not maintained anymore**.\nYou can still use it but it will not set all the relevant configuration in `local.js`.\n\n### Archive\n\nYou can download latest `.tar.gz` archive, unpack files in web directory and configure:\n\n- download [latest release](https://github.com/nioc/xmpp-web/releases/latest),\n- unarchive,\n- set files owner (example: `www-data` with Apache),\n- create [Apache virtual host](/docs/apache.conf),\n- configure [`local.js`](public/local.js).\n\n```bash\nwget https://github.com/nioc/xmpp-web/releases/latest/download/xmpp-web-0.9.7.tar.gz \\\n  -O /var/tmp/xmpp-web.tar.gz \\\n  \u0026\u0026 cd /var/www \\\n  \u0026\u0026 tar -xvzf /var/tmp/xmpp-web.tar.gz \\\n  \u0026\u0026 chown www-data /var/www/xmpp-web/ -R\n```\n\n### Docker image\n\nOn each release, we also build a [Docker image](https://hub.docker.com/r/nioc/xmpp-web) which is the latest stable Nginx (Alpine variant in order to keep lightweight) serving the generated assets. Configuration in `local.js` is set up according to environment variables (names and meanings are explained in [configuration](#configuration) section).\n\nThis can be used:\n\n- as standalone service:\n\n  ```bash\n  docker run -it -p 80:80 --rm \\\n  -e XMPP_WS=https://domain-xmpp.ltd:5281/xmpp-websocket \\\n  -e APP_DEFAULT_DOMAIN=domain-xmpp.ltd \\\n  --name xmpp-web-1 nioc/xmpp-web\n  ```\n\n- in a `docker-compose.yml` file:\n  ```yml\n  version: \"3.4\"\n  services:\n    xmpp-web:\n      image: nioc/xmpp-web:latest\n      ports:\n        - \"80:80\"\n      environment:\n        - XMPP_WS=https://domain-xmpp.ltd:5281/xmpp-websocket\n        - APP_DEFAULT_DOMAIN=domain-xmpp.ltd\n  ```\n\n### Build from source\n\nIf you want the latest code without waiting for the next release, you can clone this repo, build assets and copy `dist` files in web directory:\n\n```bash\ngit clone https://github.com/nioc/xmpp-web.git xmpp-web\ncd xmpp-web\npnpm install --frozen-lockfile\npnpm run build\nnano dist/local.js\nmv dist /var/www/xmpp-web\nchown www-data /var/www/xmpp-web/ -R\n```\n\n## Upgrade\n\n### Archive\n\nUse the same method as installation or use the [update.sh](docs/update.sh) script. After that, do not forget to edit `local.js`.\n\n### Docker image\n\nUse `docker pull nioc/xmpp-web:latest` and check if there is some new environment variables to set.\n\n## Configuration\n\n| `local.js` attribute      | Environment (Docker)             | Default (initial value)                      | Description                                                                                                                                                    |\n| ------------------------- | -------------------------------- | -------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `name`                    | `APP_NAME`                       | `\"XMPP web\"`                                 | Application name                                                                                                                                               |\n| `transports.websocket`    | `APP_WS`                         | `\"wss://chat.domain-web.ltd/xmpp-websocket\"` | Websocket endpoint used by application (proxy or direct XMPP server)                                                                                           |\n| `hasRegisteredAccess`     | `APP_REGISTERED_ACCESS`          | `true`                                       | Set to `false` to disable registered users components (guest access only)                                                                                      |\n| `hasGuestAccess`          | `APP_GUEST_ACCESS`               | `true`                                       | Set to `false` to disable guest users components                                                                                                               |\n| `anonymousHost`           | `XMPP_ANON_HOST`                 | `null`                                       | Virtual host used for guest access (anonymous)                                                                                                                 |\n| `isTransportsUserAllowed` | `APP_IS_TRANSPORTS_USER_ALLOWED` | `false`                                      | Allow user to set endpoints on the fly in login component                                                                                                      |\n| `hasHttpAutoDiscovery`    | `APP_HTTP_AUTODISCOVERY`         | `false`                                      | Allow to retrieve a `.well-known/host-meta.json` if user log on a different domain                                                                             |\n| `resource`                | `APP_RESOURCE`                   | `\"Web XMPP\"`                                 | Resource (client) affected to user                                                                                                                             |\n| `defaultDomain`           | `APP_DEFAULT_DOMAIN`             | `\"domain-xmpp.ltd\"`                          | Domain used if user do not provide a full jid                                                                                                                  |\n| `defaultMuc`              | `APP_DEFAULT_MUC`                | `null`                                       | Autocomplete MUC address (ex: `conference.domain.ltd`) if user do not provide a full room jid (join \u0026 create)                                                  |\n| `isStylingDisabled`       | `APP_IS_STYLING_DISABLED`        | `false`                                      | Set to `true` for disable messages styling                                                                                                                     |\n| `hasSendingEnterKey`      | `APP_HAS_SENDING_ENTER_KEY`      | `false`                                      | If `true`, `Enter` key sends message, it adds new line otherwise (`Control`+`Enter` always sends message)                                                      |\n| `connectTimeout`          | `XMPP_CONNECT_TIMEOUT`           | `5000`                                       | Timeout in ms before XMPP connection is considered as rejected                                                                                                 |\n| `pinnedMucs`              | `APP_PINNED_MUCS`                | `[]`                                         | Jid MUC list to hightlight in guest rooms page, ex: `['welcome@conference.domain.ltd', 'vip@conference.domain.ltd']`                                           |\n| `logoUrl`                 | `APP_LOGO_URL`                   | `''`                                         | Custom logo URL for login/guest pages                                                                                                                          |\n| `guestDescription`        | `APP_GUEST_DESCRIPTION`          | `''`                                         | Welcome text for guests (allows some HTML tags like `\u003cp\u003e`, `\u003ca\u003e`, `\u003cb\u003e`, see [allowed tags list](https://www.npmjs.com/package/sanitize-html#default-options)) |\n| `sso.endpoint`            | `APP_SSO_ENDPOINT`               | `false`                                      | Public endpoint for SSO (must be secured: do not expose it without an authentication mechanism)                                                                |\n| `sso.jidHeader`           | `APP_SSO_JID_HEADER`             | `\"jid\"`                                      | Header containing JID after SSO request                                                                                                                        |\n| `sso.passwordHeader`      | `APP_SSO_PASSWORD_HEADER`        | `\"password\"`                                 | Header containing password after SSO request                                                                                                                   |\n| N/A                       | `XMPP_WS`                        | `''`                                         | Websocket endpoint proxyfied by Nginx (on a docker installation)                                                                                               |\n\n## Contributing\n\nIf you have a suggestion for a feature you think would enhance this product, please submit a [feature request](https://github.com/nioc/xmpp-web/issues/new?labels=enhancement\u0026template=feature_request.yml).\nPull requests are welcomed (please create feature request for discussing it before), see [contributing](CONTRIBUTING.md).\n\nYou can also help by [taking surveys](https://github.com/nioc/xmpp-web/discussions/categories/polls) and answering [user questions](https://github.com/nioc/xmpp-web/discussions/categories/q-a) in discussions.\n\n## Credits\n\n- **[Nioc](https://github.com/nioc/)** - _Initial work_\n\nSee also the list of [contributors](https://github.com/nioc/xmpp-web/contributors) to this project.\n\nThis project is powered by the following components:\n\n- [xmpp.js](https://github.com/xmppjs/xmpp.js) (ISC)\n- [Vue.js](https://vuejs.org/) (MIT)\n- [Pinia](https://pinia.vuejs.org/) (MIT)\n- [Vue Router](https://router.vuejs.org/) (MIT)\n- [Day.js](https://day.js.org/) (MIT)\n- [Bulma](https://bulma.io/) (MIT)\n- [Oruga](https://oruga.io/) (MIT)\n- [Font Awesome](https://fontawesome.com/) (MIT \u0026 SIL OFL 1.1)\n\n## License\n\nThis project is licensed under the GNU Affero General Public License v3.0 - see the [LICENSE](LICENSE.md) file for details\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnioc%2Fxmpp-web","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnioc%2Fxmpp-web","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnioc%2Fxmpp-web/lists"}