#+TITLE: jabber.el - The XMPP client for Emacs

* About
[[https://elpa.nongnu.org/nongnu/jabber.svg]]

=jabber.el= is an [[http://xmpp.org][XMPP]] client for Emacs.

See the [[https://xmpp.org/software/jabber-el/][xmpp.org page]] for the full list of supported XEPs.

+ [[https://thanosapollo.org/projects/jabber/][Homepage]]

+ Source:
  + [[https://git.thanosapollo.org/emacs-jabber/][Upstream]]
  + [[https://codeberg.org/emacs-jabber/emacs-jabber/][Codeberg]] /Mirror/

* Requirements

+ Emacs 29.1 or later, compiled with dynamic module support

** OMEMO encryption (optional)

OMEMO end-to-end encryption requires building a native C module.  You
need a C compiler, =pkg-config=, and =libmbedtls= (the development
headers).  On first load, Emacs will prompt to build the module
automatically.

* Installation
=jabber.el= is available via [[https://elpa.nongnu.org/nongnu/jabber.html][NonGNU ELPA]].

You can install it via =M-x package-install RET jabber=

** package-vc (Emacs 30+)

#+begin_src emacs-lisp
  (use-package jabber
    :ensure nil
    :vc (:url "https://git.thanosapollo.org/emacs-jabber/"
              :branch "master"
              :rev :newest
              :lisp-dir "lisp")
    :custom
    (jabber-account-list '(("user@example.org")))
    :config
    (jabber-modeline-mode 1)
    :bind-keymap (("C-x C-j" . jabber-global-keymap))
    :hook (kill-emacs . jabber-disconnect))
#+end_src

** From source

#+begin_src sh
  git clone https://git.thanosapollo.org/emacs-jabber/
  cd emacs-jabber
  make module   # optional, for OMEMO support
#+end_src

Then add to your init file:

#+begin_src emacs-lisp
  (add-to-list 'load-path "/path/to/emacs-jabber/lisp")
  (require 'jabber)
#+end_src

* Configuration

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

#+begin_src emacs-lisp
  (setq jabber-account-list '(("user@example.org")
                               ("second@account.org")))
#+end_src

With =pass= (password-store):

#+begin_src emacs-lisp
  (setq jabber-account-list
        `(("user@example.org"
           (:password . ,(auth-source-pass-get 'secret "xmpp/example.org/user")))))
#+end_src

* Basic commands

| Key                  | Command                          |
|----------------------+----------------------------------|
| =M-x jabber-connect= | Connect (prompts for account)    |
| =C-x C-j C-c=        | Connect all accounts             |
| =C-x C-j C-d=        | Disconnect                       |
| =C-x C-j C-r=        | Open roster buffer               |
| =C-x C-j C-j=        | Start or switch to a chat        |
| =C-x C-j C-m=        | Join/switch to a MUC (groupchat) |
| =C-x C-j C-b=        | Switch to a chat buffer          |
