jabber 
- Description
- XMPP/Jabber client
- Latest
- jabber-0.14.0.0.20260927.27.tar (.sig), 2026-Sep-27, 1.96 MiB
- Maintainer
- Thanos Apollo <public@thanosapollo.org>
- Other versions:
- release 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.el is an XMPP client for Emacs.
See the xmpp.org page for the full list of supported XEPs.
- Homepage
- Source:
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-rosterorC-x C-j C-rto get started.
Old versions
| jabber-0.14.0.0.20260926.20.tar.lz | 2026-Sep-26 | 327 KiB |
| jabber-0.14.0.0.20260923.7.tar.lz | 2026-Sep-23 | 317 KiB |
| jabber-0.14.0.0.20260919.5.tar.lz | 2026-Sep-19 | 315 KiB |
| jabber-0.14.0.0.20260907.4.tar.lz | 2026-Sep-08 | 316 KiB |
| jabber-0.13.2.0.20260901.5.tar.lz | 2026-Sep-03 | 305 KiB |
| jabber-0.13.1.0.20260824.8.tar.lz | 2026-Aug-24 | 300 KiB |
| jabber-0.12.5.0.20260802.22.tar.lz | 2026-Aug-02 | 297 KiB |
| jabber-0.12.5.0.20260801.12.tar.lz | 2026-Aug-01 | 294 KiB |
| jabber-0.11.1.0.20260702.1.tar.lz | 2026-Jul-02 | 250 KiB |
| jabber-0.10.10.0.20260612.57.tar.lz | 2026-Jun-12 | 199 KiB |
News
1. Unreleased
1.1. Fixes
- 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.2. 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 andjabber-avatar-setaccept 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-ownerreturns its connection. Direct symbol-property reads on WHO remain supported. jabber-read-jid-completingaccepts 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-connectionproperty.
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
3.2. Fixes
- Reconnect failed transports after wake and check keepalive responses for new and resumed sessions
- Preserve Stream Management replay order, validate handled counts, and ignore stale transport input and lifecycle callbacks
- Preserve room recovery state, encrypted messages, and local echoes across reconnects, including nickname and credential ownership
- Propagate picomemo encryption errors instead of reporting success
- Restore serialized picomemo stores after refilling prekeys
- Fix compiler dependencies and check every library with isolated byte and native compilation, including regression tests for compiler failures
- Cancel orphaned Stream Management timers and bind callbacks to their owning connection state
- Retire stale Stream Management requests during TLS negotiation
- Fix OMEMO random generation and shared-module linking on OpenBSD
4. [0.13.2]
4.1. Added
- Navigate previously sent chat input
- Reset an individual OMEMO peer-device session from the trust buffer
4.2. Fixes
- Persist OMEMO heartbeat ratchets before sending, preventing key reuse after restart
- Preserve OMEMO trust while rebuilding sessions and reject changed device identities
- Clear OMEMO session state atomically and wipe temporary store secrets
- Preserve exact OMEMO cryptographic bytes in SQLite
- Harden STARTTLS negotiation against malformed, premature, and stale replies
- Skip queued real-time text sends after their chat session has ended
- Handle MUC author retractions
5. [0.13.1]
5.1. Fixes
- Correct outgoing MUC message-correction target lookup
- Keep global Jabber menu bindings available during package loading
- Preserve chat message bodies after live source reloads
… …