ELPA Logo NonGNU ELPA: jabber

jabber Atom Feed

Description
XMPP/Jabber client
Latest
jabber-0.15.0.tar (.sig), 2026-Oct-02, 1.97 MiB
Maintainer
Thanos Apollo <public@thanosapollo.org>
Other versions:
development version
Website
https://git.thanosapollo.org/emacs-jabber/about/
ELPA's Repository
CGit or Gitweb
All Dependencies
fsm (.tar)
keymap-popup (.tar)

To install this package from Emacs, use package-install or list-packages.

Full description

1. About

jabber.svg

jabber.el is an XMPP client for Emacs.

See the xmpp.org page for the full list of supported XEPs.

2. Requirements

  • Emacs 29.1 or later, compiled with dynamic module support
  • fsm 0.2.0 or later
  • keymap-popup 0.2 or later

2.1. OMEMO encryption (optional)

OMEMO end-to-end encryption uses a native C module built from the vendored picomemo source. Build dependencies: a C compiler, pkg-config, and Mbed TLS 3.0 or later (mbedcrypto).

Build the module from the ELPA package directory:

cd /path/to/elpa/jabber-VERSION
make module

The resulting jabber-omemo-core.so (or .dylib on macOS) lands beside the Elisp files and is loaded automatically. If the module is missing, OMEMO use signals OMEMO module not compiled.

3. Installation

jabber.el is available via NonGNU ELPA. That is the only supported install path.

(use-package jabber
  :ensure t
  :config
  (setq jabber-account-list
        `(("user@example.org"
           (:password . ,(auth-source-pass-get 'secret "xmpp/example.org")))))
  (jabber-modeline-mode 1)
  :bind-keymap (("C-x C-j" . jabber-global-keymap))
  :hook (kill-emacs . jabber-disconnect))

4. Configuration

4.1. Authentication

Accounts are configured via jabber-account-list. The simplest form uses auth-source ~/.authinfo.gpg for passwords:

(setq jabber-account-list '(("user@example.org")
                             ("second@account.org")))

4.2. SOCKS5 proxy

An account can connect through an unauthenticated SOCKS5 proxy:

(setq jabber-account-list
      '(("user@example.org"
         (:proxy . (:type socks5 :host "127.0.0.1" :port 9050)))))

The destination hostname is sent to the proxy rather than resolved locally. Proxy connections bypass SRV lookup and use the JID domain on port 5222, or :network-server and :port when those are configured. STARTTLS is supported. Direct TLS discovery, proxy authentication, and other proxy protocols are not supported for proxied accounts.

4.3. Bug references

(add-hook 'jabber-chat-mode-hook #'bug-reference-mode)

;; Customize references
(setq jabber-bug-reference-alist
      '(("jabber-el@conference\\.hmm\\.st"
         "\\(#\\([0-9]+\\)\\)"
         "https://todos.thanosapollo.org/r/emacs-jabber/%s")))

5. Basic commands

  • Use M-x jabber-roster or C-x C-j C-r to get started.

Old versions

jabber-0.14.0.tar.lz2026-Sep-05 316 KiB
jabber-0.13.2.tar.lz2026-Aug-28 301 KiB
jabber-0.13.1.tar.lz2026-Aug-07 298 KiB
jabber-0.13.0.tar.lz2026-Aug-05 298 KiB
jabber-0.12.5.tar.lz2026-Jul-28 274 KiB
jabber-0.12.4.tar.lz2026-Jul-26 273 KiB
jabber-0.12.3.tar.lz2026-Jul-25 266 KiB
jabber-0.12.2.tar.lz2026-Jul-13 262 KiB
jabber-0.12.1.tar.lz2026-Jul-11 261 KiB
jabber-0.12.0.tar.lz2026-Jul-08 256 KiB
jabber-0.11.1.tar.lz2026-Jun-26 250 KiB
jabber-0.11.0.tar.lz2026-Jun-14 247 KiB
jabber-0.10.10.tar.lz2026-May-30 187 KiB
jabber-0.10.9.tar.lz2026-May-15 186 KiB
jabber-0.10.8.tar.lz2026-May-11 185 KiB
jabber-0.10.7.tar.lz2026-May-09 191 KiB
jabber-0.10.6.tar.lz2026-Apr-30 190 KiB
jabber-0.10.5.tar.lz2026-Apr-10 187 KiB
jabber-0.10.1.tar.lz2026-Apr-03 183 KiB
jabber-0.10.0.tar.lz2026-Apr-02 180 KiB

News

1. [0.15.0]

1.1. Changed

  • Synchronize server blocklists before fetching peer OMEMO keys; ignore stale blocklist replies and recheck blocked recipients before sending.
  • Verify received OpenPGP messages against the expected sender's signing key.
  • Test the declared minimum Emacs, pinned upstream Emacs and Thanos Emacs fork.

1.2. Fixes

  • Preserve chat drafts, undo history and reply navigation while updating the transcript; failed sends cannot restore stale text over a newer draft.
  • Keep popup help bindings and user keymap customizations across Lisp reloads.
  • Preserve encrypted attachment bytes under compressed filename suffixes.
  • Keep connection attempts, transport callbacks and queued stanza order attached to the session that owns them.
  • Retain archive query outcomes and pagination progress until storage commits; preserve unfetched history and reject conflicting message identities.
  • Preserve OMEMO trust and sessions on identity conflicts; keep encrypted room recipients attached to the current membership snapshot.
  • Preserve reply targets, retractions, reactions and receipt boundaries during live-message and archive replay.
  • Stop link-preview scanning from revisiting rejected URLs.
  • Exclude development administration files from ELPA archives.
  • Speed up archive duplicate lookup with indexed message identities instead of scanning a contact's history; preserve ambiguous-message and archive-UID checks.
  • Upgrade existing message databases non-destructively with origin-ID and room-ID indexes while retaining message, archive and encryption state.
  • Drop rejected incoming message corrections silently, including missing or ambiguous archive targets, instead of flooding *Messages*.
  • Keep contact names, presence, subscriptions, avatars and resource capabilities separate for each connection, including completion and background chat alerts.
  • Keep unread activity and subscription prompts attached to their originating account when several accounts share a contact or room.
  • Scope service-discovery observations and pending room errors to their connection; capability retries retain the advertising account and node.
  • Keep named resources independently selectable, preserving resource case.
  • Reclaim retired discovery observations when storing new observations, without clearing other live accounts or globally verified capabilities.

1.3. Extension compatibility

  • Restart Emacs disconnected before first using this version. Existing live global-symbol rosters and pending-room tables are not migrated by reloading Lisp files.
  • jabber-jid-symbol, the roster/display/bookmark name helpers and jabber-avatar-set accept a final optional connection argument. Pass it when reading or writing automatic roster metadata. Without it, these APIs use only supplied symbols or legacy accountless data, never a guessed account.
  • Presence hooks and title callbacks keep their existing arities. Their WHO argument is an account-scoped symbol; jabber-jid-owner returns its connection. Direct symbol-property reads on WHO remain supported.
  • jabber-read-jid-completing accepts the connection as its seventh argument. An explicitly selected empty account does not fall back to other rosters.
  • Activity entries now retain connection/JID pairs internally. Existing custom activity formatters and visibility predicates still receive JID strings. Legacy JID-only navigation refuses ambiguous owners instead of choosing one. Legacy JID widgets can carry their owner in the :jabber-connection property.

2. [0.14.0]

2.1. Fixes

  • Restore broadcast presence after connection. A room-recovery check rejected presence without a recipient, leaving the client unavailable to the server: contacts appeared offline and incoming messages could require archive sync

3. [0.13.3]

3.1. Added

  • Automatically preview shared links locally when URL expansion is enabled

… …