#+TITLE: Changelog

* [0.13.1]
#+date: 2026-08-07

** 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

* [0.13.0]
#+date: 2026-08-05

** Added
- XEP-0201 message threads with persistent sessions, local titles, child
  threads, and account-scoped routing
- XEP-0004 forms for MUC configuration and ad-hoc commands
- Unauthenticated SOCKS5 account =:proxy= support; destination names are
  resolved by the proxy, and authentication and other proxy protocols are not
  supported

** Changed
- Chat-state notifications follow their owning message-thread session
- Thread buffer labels and headers show root-message previews
- Test loading no longer depends on generated autoloads and prefers newer
  source files over stale byte-code
- Compose, registration, search, and vCard editing use text-first buffers and
  grouped command menus instead of widget.el
- Added contribution instructions

** Fixes
- Live MUC reactions use the correct account-scoped room buffer
- Replayed empty OMEMO messages stay hidden
- Delivery-receipt status follows the latest message
- Autoaway applies the configured away and extended-away priorities
- MUC mentions treat nicknames literally
- Direct invitations and transient reconnects preserve per-account room
  passwords in memory; explicit leave clears that session state

* [0.12.5]
#+date: 2026-07-28

** Fixes
- Stop archived OMEMO failures from flooding =*Messages*=
- Preserve unsent messages across connection recovery
- Improve privacy and interoperability for receipts, blocking, bookmarks, MAM,
  and reactions

* [0.12.4]
#+date: 2026-07-26

** Added
- Debian package build and installed-package tests to release checks

** Changed
- Hardened OMEMO message corrections and real-time text handling

** Fixes
- Reproducible autoload generation for Debian packages
- Load Org faces before rendering styled messages

* [0.12.3]
#+date: 2026-07-25

** Added
- Distinct theme-aware nickname colors in group chats
- Save images that Emacs cannot display

** Fixes
- More reliable keepalive monitoring with multiple accounts
- Nickname completion works with custom delimiters

* [0.12.2]
#+date: 2026-07-13

** Added
- Open chats from desktop notifications

** Fixes
- More reliable encrypted chats during session migration and out-of-order delivery

* [0.12.1]
#+date: 2026-07-11

** Added
- Press RET on a reply to jump to the original message
- Replies show and preserve more context, including after reloading a chat

** Fixes
- More reliable encrypted chats after reconnects and out-of-order messages
- Safer inline image display, with manual loading available by pressing RET on an image URL
- Manual image sizes are preserved when chats are redrawn

* [0.12.0]
#+date: 2026-07-08

** Added
- Fontified fenced code blocks in chats
- Inline reply context when messages do not include fallback quotes

** Changed
- More reliable encrypted chats after reconnects, archive catchup, and replayed messages
- Improved reply and correction handling

** Fixes
- Failed encrypted message corrections no longer replace the original message
- Reply quotes and corrected replies preserve their context more consistently

* [0.11.1]
#+date: 2026-06-26

** Added
- See who reacted to a message via help-echo
- Help-echo for the item at point now shows automatically

** Fixes
- Stop repeated error stanzas from spamming and reopening chat buffers
- Preserve scroll position when a chat buffer refreshes

* [0.11.0]
#+date: 2026-06-13

** Added
- Message reactions and MUC typing indicators
- Nix flake development environment

** Changed
- OMEMO native module setup no longer auto-builds or auto-fetches sources

** Fixes
- Avoid Prosody disconnects by sending CSI only when the server advertises it
- Recreate missing chat and MUC buffers from unread activity
- Stop emitting malformed presence and vCard stanzas with nil children
- Improve HTTP upload, message archive, reactions, receipts, and chat buffer reliability

* [0.10.10]
#+date: 2026-05-30

** Added
- Roster contact popup can edit contact name and groups
- Roster account picker can clear scoped view with “All accounts”
- Chat operations menu exposes MUC actions from room buffers

** Fixes
- Suppress alerts for self-sent carbons and own MUC messages


* [0.10.9]
#+date: 2026-05-15

** Fixes
- Styling face leak on message send
- Modeline presence hook name
- SRV weighted-select entry duplication

** Added
- =bug-reference-mode= auto-setup for chat buffers
- Android picomemo compilation
- Presence status in completing-read annotations
- Per-account roster scoping

* [0.10.8]
#+date: 2026-05-11

** Changed
- Roster replaced with keymap-popup interface
- Dissolved jabber-menu.el into home modules

** Improved
- Improved test suite

* [0.10.7]
#+date: 2026-05-09

** Fixes
- SM: Fixed silent message loss on ack stall with watchdog recovery
- SM: IQ stanzas bypass back-pressure gate

** Improved
- Keymap-popup menus show dynamic values with faces

* [0.10.6]
#+date: 2026-04-30

** Changed
- Replaced transient.el with keymap-popup.el for all menus
- Roster, bookmarks, and OMEMO trust mode maps now double as popup
  keymaps, eliminating duplicate key definitions
- Chat operations menu shows context-appropriate entries (1:1 vs MUC)
- New dependency: keymap-popup (GNU ELPA)

* [0.10.5]
#+date: 2026-04-10

** Fixes
- OMEMO JIT build prompt now discloses network fetch from github.com
- OMEMO module no longer auto-fetches in batch mode (Emacs network policy)
- OMEMO module init hardened: graceful degradation without module
  support, nil-safe path resolution, single prompt per session
- Use gmake on BSD for OMEMO module build

** Improved
- ELPA users guided to clone and build OMEMO module manually
- README documents OMEMO build for ELPA and package-vc users

** Internal
- Fixed native-comp warnings (declare-function for jabber-chain-add,
  jabber-process-ping, ewoc-data, encode-hex-string, auth-source-search)
- Added make lint-native-comp target
- Added ;;; Commentary: and ;;; Code: sections to 30 legacy files

* [0.10.4]
#+date: 2026-04-08

** Fixes
- OMEMO module install path autodetected for ELPA layout
  (build no longer fails when ~lisp/~ subdirectory is absent)

** Internal
- Silenced native-comp warnings in jabber-message-reply and
  jabber-moderation

* [0.10.3]
#+date: 2026-04-06

** Fixes
- OMEMO JIT build finds source path in ELPA installs
- Picomemo fallback clone for ELPA tarballs (submodule not populated)
- History import no longer stores empty account string
- Exclude picomemo test/example files from ELPA tarball

** Internal
- MAM decoupled from display via hooks
- Chat backlog loaded from local DB instead of MAM
- Removed legacy SSL connection method

* [0.10.2]
#+date: 2026-04-04

** Fixes
- OMEMO module now optional: graceful degradation when native module is absent
- D-Bus notifications guard for Windows: no longer kills alert chain
- Roster refresh crash with multiple windows
- OMEMO trust commands guard without native module

* [0.10.1]
#+date: 2026-04-03

** New XEP implementations
- XEP-0163 Personal Eventing Protocol
- XEP-0368 SRV Records for XMPP over TLS (Direct TLS)

** Features
- Idle time support for Windows
- Deduplicated JID completion with annotated candidates

** Fixes
- PubSub node handler duplicate registration on repeated loads
- OpenPGP key refetch skipped when key already in local keyring

** Compliance
- Achieves Advanced Core compliance (XEP-0479 Compliance Suites 2023)

* [0.10.0]
#+date: 2026-04-02

** Breaking changes
- Minimum Emacs version raised to 29.1
- Flat-file message history replaced with SQLite (~jabber-db.el~)
- Many obsolete modules removed (see commit history for full list)

** New XEP implementations
- XEP-0060 Publish-Subscribe
- XEP-0184 Delivery Receipts and XEP-0333 Chat Markers
- XEP-0191 Blocking Command
- XEP-0198 Stream Management with resume
- XEP-0249 Direct MUC Invitations
- XEP-0280 Message Carbons
- XEP-0308 Last Message Correction
- XEP-0313 Message Archive Management
- XEP-0352 Client State Indication
- XEP-0373 OpenPGP for XMPP
- XEP-0384 OMEMO 0.3 encryption (requires native module build)
- XEP-0393 Message Styling
- XEP-0402 PEP Native Bookmarks
- XEP-0410 MUC Self-Ping
- XEP-0424/0425 Message Retraction and Moderation
- XEP-0454 OMEMO Media Sharing
- XEP-0461 Message Replies

** Features
- SQLite message storage with full-text search
- Inline image display and encrypted media (aesgcm://)
- Typing indicators, delivery receipts, and read markers in chat buffers
- Encryption indicator in header line (OMEMO, OpenPGP, plaintext)
- Message correction, reply, retraction
- Stream Management with automatic resume on reconnect
- Disco-prioritized MUC autojoin (smallest rooms first)
- Room preservation and self-ping across reconnect
- MUC notification filtering (~all~, ~mentions~, ~nil~)
- OMEMO trust management UI and device management
- Modernized roster display
- Unified modeline with activity tracking
- Auto-reconnect enabled by default

** Security
- [[https://www.cvedetails.com/cve/CVE-2017-5589/][CVE-2017-5589]]: Message Carbons validates sender JID to prevent
  spoofed carbon copies
- Receipt handling guards against MAM replay
- OMEMO trust filtering at encrypt time

* [0.9.0]
:PROPERTIES:
:CUSTOM_ID: v0.9.0
:END:
** Enable carbons by default
:PROPERTIES:
:CUSTOM_ID: enable-carbons-by-default
:END:
Enable support for XEP-0280 (message carbons) by default.
** Support for reading passwords from netrc/authinfo files
:PROPERTIES:
:CUSTOM_ID: support-reading-passwords-from-netrc-authinfo-files
:END:
Use "machine example.com login username password s3cret port xmpp".

** Provide MUC presence announcement formatting
:PROPERTIES:
:CUSTOM_ID: provide-muc-presence-announcement-formatting
:END:
Provide customization to limit, highlight, or deemphasize MUC presence
announcements.  See the manual for details (info "(jabber) Presence
announcements").

** Support for roster's groups roll state saving
:PROPERTIES:
:CUSTOM_ID: support-rosters-groups-roll-state-saving
:END:

** Full support for XEP-0012
:PROPERTIES:
:CUSTOM_ID: full-support-xep-001
:END:
Response of idle time.

** Support for XEP-0202
:PROPERTIES:
:CUSTOM_ID: support-xep-020
:END:
Entity Time for request/response time as main method.

** Support for automatic MUC nicks colorization
:PROPERTIES:
:CUSTOM_ID: support-automatic-muc-nicks-colorization
:END:
See "Customizing the chat buffer" in the manual.

** XML Console
:PROPERTIES:
:CUSTOM_ID: xml-console
:END:
Log all received/sending XML stanzas into special buffer. Also can be
used to send custom XML stanzas manually.

** Autoaway
:PROPERTIES:
:CUSTOM_ID: autoaway
:END:
Support for list of autoaway methods. Support for Xa. See section "Autoaway" in manual.

** MUC
:PROPERTIES:
:CUSTOM_ID: muc
:END:
MUC participants list format is now customizable: see
jabber-muc-print-names-format in manual. Also, participants sorted by
role.

** Treat XML namespace prefixes correctly
:PROPERTIES:
:CUSTOM_ID: treat-xml-namespace-prefixes-correctly
:END:
A change in the Google Talk server has brought to light the fact that
jabber.el didn't handle XML namespace prefixes correctly.  This should
be fixed by the new jabber-xml-resolve-namespace-prefixes function.

* [0.8]
:PROPERTIES:
:CUSTOM_ID: v0.8
:END:

** Added
:PROPERTIES:
:CUSTOM_ID: added
:END:
*** Support for multiple accounts
:PROPERTIES:
:CUSTOM_ID: support-multiple-accounts
:END:
Configuration variables have changed.  See section "Account settings"
in the manual.

*** Activity mode improved
:PROPERTIES:
:CUSTOM_ID: activity-mode-improved
:END:
Customizable face for personal messages added, list of unwanted (banned) JIDs added

*** Simple automatic answering machine
:PROPERTIES:
:CUSTOM_ID: simple-automatic-answering-machine
:END:
Realized as alert. Can match regexp and answer with predefined string

*** OSD alerts (message, MUC, MUC-personal)
:PROPERTIES:
:CUSTOM_ID: osd-alerts-message,-muc,-muc-personal
:END:

*** Family of personal MUC alerts added
:PROPERTIES:
:CUSTOM_ID: family-personal-muc-alerts-added
:END:
See section "Standard alerts" in manual.

*** MUC nicks completion
:PROPERTIES:
:CUSTOM_ID: muc-nicks-completion
:END:
See section "Groupchat" in manual.

*** Automatic reconnection
:PROPERTIES:
:CUSTOM_ID: automatic-reconnection
:END:
Not enabled by default; See "Reconnecting" section in manual.

*** Support for XEP-0085
:PROPERTIES:
:CUSTOM_ID: support-xep-008
:END:
This means "contact is typing" notifications when chatting with Gajim
or Google Talk users, among others.
See "Typing notifications" section in the manual.

*** Option: hide offline contacts in roster
:PROPERTIES:
:CUSTOM_ID: option-hide-offline-contacts-roster
:END:
See "The roster buffer" in manual.

*** Clean history from chat buffers
:PROPERTIES:
:CUSTOM_ID: clean-history-from-chat-buffers
:END:
See jabber-truncate-* functions and new options for
jabber-alert-muc-hooks and jabber-alert-message-hooks. See section
"Message history" in manual too.

*** MUC bookmarks
:PROPERTIES:
:CUSTOM_ID: muc-bookmarks
:END:
See jabber-edit-bookmarks function and "Bookmarks" section in manual.

*** Name of browse buffers customizable
:PROPERTIES:
:CUSTOM_ID: name-browse-buffers-customizable
:END:
See "Services" section in manual.

*** Subscription requests are sent to chat buffers
:PROPERTIES:
:CUSTOM_ID: subscription-requests-are-sent-to-chat-buffers
:END:
Subscription requests now displayed in chat buffers. See "Presence
subscription" section in manual.

*** Option: hide avatar in chat buffer
:PROPERTIES:
:CUSTOM_ID: option-hide-avatar-chat-buffer
:END:
`jabber-chat-buffer-show-avatar'.

*** Gmail notifications
:PROPERTIES:
:CUSTOM_ID: gmail-notifications
:END:
(Not documented nor autoloaded)

*** GConf-based installation of URI handler
:PROPERTIES:
:CUSTOM_ID: gconf-based-installation-uri-handler
:END:
See "XMPP URIs" in manual.

* [0.7.1]
:PROPERTIES:
:CUSTOM_ID: v0.7.1
:END:

** Added
:PROPERTIES:
:CUSTOM_ID: v0.7.1-added
:END:

*** STARTTLS
:PROPERTIES:
:CUSTOM_ID: starttls
:END:

*** SRV records
:PROPERTIES:
:CUSTOM_ID: srv-records
:END:
Requires No Gnus.

*** Message composition buffer
:PROPERTIES:
:CUSTOM_ID: message-composition-buffer
:END:
Try jabber-compose.

*** XMPP URIs are handled
:PROPERTIES:
:CUSTOM_ID: xmpp-uris-are-handled
:END:
See manual for setup.

*** Autoaway
:PROPERTIES:
:CUSTOM_ID: autoaway-1
:END:

*** MUC features
:PROPERTIES:
:CUSTOM_ID: muc-features
:END:
**** Don't display alerts for your own messages
:PROPERTIES:
:CUSTOM_ID: dont-display-alerts-your-own-messages
:END:
See jabber-muc-alert-self.
**** Presence changes are sent to MUC rooms too
:PROPERTIES:
:CUSTOM_ID: presence-changes-are-sent-to-muc-rooms-too
:END:
**** Check room features before joining
:PROPERTIES:
:CUSTOM_ID: check-room-features-before-joining
:END:

*** Avatars
:PROPERTIES:
:CUSTOM_ID: avatars
:END:
Viewing and publishing JEP-0153 avatars (vCard-based) is now
supported.

*** File transfer
:PROPERTIES:
:CUSTOM_ID: file-transfer
:END:

*** Sound files per contact for alerts
:PROPERTIES:
:CUSTOM_ID: sound-files-per-contact-alerts
:END:

*** Per-user history files changed
:PROPERTIES:
:CUSTOM_ID: per-user-history-files-changed
:END:
For some time after 0.7 these file names erroneously contained double
quotes.  If you have used the CVS version you'll need to rename your
history files manually.

*** New function: jabber-send-directed-presence
:PROPERTIES:
:CUSTOM_ID: new-function-jabber-send-directed-presence
:END:

*** Entity time supported (XEP-0090)
:PROPERTIES:
:CUSTOM_ID: entity-time-supported-xep-0090
:END:

*** Last activity supported (XEP-0012)
:PROPERTIES:
:CUSTOM_ID: last-activity-supported-xep-0012
:END:

* [0.7]
:PROPERTIES:
:CUSTOM_ID: v0.7
:END:

** Added
:PROPERTIES:
:CUSTOM_ID: v0.7-added
:END:
*** SSL connections possible
:PROPERTIES:
:CUSTOM_ID: ssl-connections-possible
:END:
See variable `jabber-connection-type'.

*** Chat buffers rewritten
:PROPERTIES:
:CUSTOM_ID: chat-buffers-rewritten
:END:
New modular design gives increased extensibility.
**** Received URLs are displayed
:PROPERTIES:
:CUSTOM_ID: received-urls-are-displayed
:END:
**** Long lines are filled
:PROPERTIES:
:CUSTOM_ID: long-lines-are-filled
:END:
See jabber-chat-fill-long-lines.
**** Rare timestamps are printed by default
:PROPERTIES:
:CUSTOM_ID: rare-timestamps-are-printed-by-default
:END:
See jabber-print-rare-time and jabber-rare-time-format.

*** MUC features
:PROPERTIES:
:CUSTOM_ID: muc-features-1
:END:
**** Different default nicknames for different MUC rooms
:PROPERTIES:
:CUSTOM_ID: different-default-nicknames-different-muc-rooms
:END:
See jabber-muc-default-nicknames.
**** Autojoin MUC rooms on connection
:PROPERTIES:
:CUSTOM_ID: autojoin-muc-rooms-on-connection
:END:
See jabber-muc-autojoin.
**** Change nickname
:PROPERTIES:
:CUSTOM_ID: change-nickname
:END:
Actually simply an alias from jabber-muc-nick to jabber-muc-join.
**** Invitations
:PROPERTIES:
:CUSTOM_ID: invitations
:END:
Both sending and receiving invitiations is supported.
**** Basic affiliation change support
:PROPERTIES:
:CUSTOM_ID: basic-affiliation-change-support
:END:
(Not finished)
**** Private MUC messages
:PROPERTIES:
:CUSTOM_ID: private-muc-messages
:END:
**** Support for setting and displaying topic
:PROPERTIES:
:CUSTOM_ID: support-setting-displaying-topic
:END:

*** Global key bindings
:PROPERTIES:
:CUSTOM_ID: global-key-bindings
:END:
Global keymap under C-x C-j.

*** Vcard viewer and editor
:PROPERTIES:
:CUSTOM_ID: vcard-viewer-editor
:END:

*** Roster export
:PROPERTIES:
:CUSTOM_ID: roster-export
:END:

*** Message events (JEP-0022)
:PROPERTIES:
:CUSTOM_ID: message-events-jep-0022
:END:

*** Easy way to define external notifiers
:PROPERTIES:
:CUSTOM_ID: easy-way-to-define-external-notifiers
:END:
See define-jabber-alert.  Alerts for Festival (speech synthesis),
Sawfish, and xmessage added.

*** Activity mode improved
:PROPERTIES:
:CUSTOM_ID: activity-mode-improved-1
:END:
Can now display count in frame title.  Update hook added.

*** Roster display optimized
:PROPERTIES:
:CUSTOM_ID: roster-display-optimized
:END:

*** Optionally use per-contact history files
:PROPERTIES:
:CUSTOM_ID: optionally-use-per-contact-history-files
:END:

*** Jabber menu in menubar not enabled by default
:PROPERTIES:
:CUSTOM_ID: jabber-menu-menubar-not-enabled-by-default
:END:
Call jabber-menu to have it there.

*** Flyspell in chat buffers
:PROPERTIES:
:CUSTOM_ID: flyspell-chat-buffers
:END:
Flyspell will only spell check what you're currently writing.

*** Different time formats for instant and delayed messages
:PROPERTIES:
:CUSTOM_ID: different-time-formats-instant-delayed-messages
:END:
See `jabber-chat-time-format' and `jabber-chat-delayed-time-format'.
You can see the complete timestamp in a tooltip by holding the mouse
over the prompt.

*** Chat buffers in inactive windows are scrolled
:PROPERTIES:
:CUSTOM_ID: chat-buffers-inactive-windows-are-scrolled
:END:

*** Roster is sorted by name also
:PROPERTIES:
:CUSTOM_ID: roster-is-sorted-by-name-also
:END:

* [0.6.1]
:PROPERTIES:
:CUSTOM_ID: v0.6.1
:END:
** Added
:PROPERTIES:
:CUSTOM_ID: v0.6.1-added
:END:
*** Message history
:PROPERTIES:
:CUSTOM_ID: message-history
:END:
Set jabber-history-enabled to t to activate it.

*** Backlogs
:PROPERTIES:
:CUSTOM_ID: backlogs
:END:
If you have history enabled, the last few messages are inserted when
you open a new chat buffer.

*** Activity tracking on the mode line
:PROPERTIES:
:CUSTOM_ID: activity-tracking-on-mode-line
:END:
Activate it with M-x jabber-activity-mode.

*** Receive an alert when a specific person goes online
:PROPERTIES:
:CUSTOM_ID: receive-alert-when-specific-person-goes-online
:END:
Use it with M-x jabber-watch-add.

*** Support for /me in chats (xep-0245, except XHTML-IM)
:PROPERTIES:
:CUSTOM_ID: support-me-chats-xep-0245,-except-xhtml-im
:END:
As in "/me laughs" etc.

*** Message alerts for current buffer can be disabled
:PROPERTIES:
:CUSTOM_ID: message-alerts-current-buffer-can-be-disabled
:END:
Set jabber-message-alert-same-buffer to nil to do that.

*** Basic moderation support in MUC
:PROPERTIES:
:CUSTOM_ID: basic-moderation-support-muc
:END:

*** MUC alerts are separated from ordinary message alerts
:PROPERTIES:
:CUSTOM_ID: muc-alerts-are-separated-from-ordinary-message-alerts
:END:
Customize jabber-alert-muc-hooks to get your desired behaviour.
