=== Better Messages - Chat Rooms, Group Chat, Private Messages & AI Chat Bots ===
Contributors: wordplus
Tags: BuddyPress, chat room, video chat, group chat, private message
Requires at least: 5.9.0
Tested up to: 7.1
Requires PHP: 7.4
Stable tag: 3.0.10
License: GPLv3
License URI: https://www.gnu.org/licenses/gpl-3.0.html

Real-time messaging and chat rooms for WordPress ecosystem: private conversations, public and private chat rooms, video & audio calls, and more.

== Description ==

**Better Messages** is the most feature-rich **realtime private messaging system for WordPress**, with native integrations for **BuddyPress, BuddyBoss Platform, Ultimate Member, PeepSo** and any other WordPress powered websites.

Transform your WordPress site into a powerful communication platform with **private messaging**, **chat rooms**, **video and audio calls**, **group video chats**, **AI chat bots**, and **native mobile apps**.

Whether you're building a private or public community, social network, intranet, chat-rooms site, marketplace, membership site, dating platform, or creator economy site – Better Messages provides enterprise-level messaging features with an easy-to-use interface.

**Try Better Messages:**

* **[Live Demo](https://www.wordplus.org/demo.php)** — fully functional demo site
* **[Documentation & Knowledge Base](https://www.better-messages.com/docs/getting-started/about/)** — setup guides, features, FAQ
* **[All Integrations](https://www.better-messages.com/docs/category/integrations/)** — every supported plugin and theme
* **[Pricing](https://www.better-messages.com/docs/pricing/)** — free vs WebSocket version comparison
* **[Blog & Tutorials](https://www.better-messages.com/blog/)** — guides, walkthroughs, integration deep-dives

**For developers:**

* **[REST API Reference](https://www.better-messages.com/rest-api/)** — every endpoint and parameter
* **[PHP Hooks](https://www.better-messages.com/hooks/php-actions/)** — actions, filters, helper functions
* **[JavaScript Hooks](https://www.better-messages.com/hooks/js-actions/)** — frontend events and customization API
* **[Changelog](https://www.better-messages.com/changelog/)** — every release and bug fix
* **[Roadmap](https://www.better-messages.com/roadmap/)** — upcoming features and votes

**Popular use cases:**

Better Messages is widely used to power messaging for:

* **Private communities** — paid and members-only community platforms, mastermind groups, alumni networks, course cohorts, coaching circles, role-restricted messaging, group chats, AI Chat Bots for onboarding and FAQs, end-to-end encryption for sensitive conversations
* **Public communities and social networks** — open social platforms, hobby and interest communities, BuddyPress / BuddyBoss / PeepSo / FluentCommunity-powered sites, private messaging, group conversations, chat rooms, mini chat widgets that follow users across the site
* **Intranet and corporate websites** — internal employee communication, team and department channels, role-restricted access by WordPress role, file sharing, voice and video calls for remote teams, self-hosted plan for sites with data-sovereignty requirements
* **Chat rooms websites** — sites built around real-time chat rooms as the primary feature, public and private rooms, topic-based discussion, guest access for unregistered visitors, AJAX or WebSocket delivery
* **Dating and matchmaking sites** — private 1-on-1 chat, photo and video attachments, voice and video calls, profile-to-profile chat buttons on member directories, guest chat for browsing visitors, end-to-end encryption for private conversations
* **Creator economy and fan platforms** — **paid messaging** with per-message and per-call billing via [GamiPress](https://www.better-messages.com/docs/integrations/gamipress/) or [MyCRED](https://www.better-messages.com/docs/integrations/mycred/), private video calls, mass messaging to fans, always-on mini chat widgets
* **Premium and monetized DM platforms** — charge per direct message or per call with per-role pricing, balance display, role-restricted messaging, AI Content Moderation to filter spam and scam attempts
* **Coaching and mentorship platforms** — client-to-coach DMs, scheduled video calls, voice messages, file sharing, course chat rooms via LMS integrations
* **Online stores ([WooCommerce](https://www.better-messages.com/docs/integrations/woocommerce/))** — pre-sales chat on product pages, post-purchase order support, cart-context-aware messages, embedded inbox in My Account
* **Multi-vendor marketplaces and classifieds** — buyer-to-seller chat on every listing, per-listing threads, guest chat for unregistered visitors
* **Online courses (LMS)** — course chat rooms, instructor-to-student DMs, group conversations for cohort-based courses
* **Forums and Q&A communities** — Private Message link on every reply, follow-up chat for thread participants
* **Real estate and listings sites** — agent inquiry messaging, property-context chat threads, guest chat for browsing visitors
* **Live events and webinars** — event lobby chat rooms, guest access for non-registered attendees, group voice and video calls for AMAs, pinned messages with event agendas
* **Booking and appointment platforms** — guest-to-host messaging on listings and bookings, file sharing for documents, voice and video calls before check-in
* **Crypto and Web3 communities** — token-gated chat rooms via membership plugin and WordPress roles, AMA group calls, AI knowledge bots for whitepaper questions, mobile apps for on-the-go engagement

"**Better Messages**" plugin is formerly called "**BP Better Messages**".

**[Translate Better Messages to your language](https://www.wordplus.org/bm-translate/)**

**Core Messaging Features:**

* AJAX or WebSocket powered realtime conversations
* Private one-to-one conversations
* Group conversations with unlimited participants
* Chat Rooms with guest access support
* Messages for BuddyPress Groups, PeepSo Groups, Ultimate Member Groups, FluentCommunity Groups
* Subjects for conversations
* Search across all messages
* Mark messages as favorite
* Pin important messages to conversation top
* Pin favorite conversations to list top
* Filter conversations list to show only unread conversations
* Reply to specific messages
* Edit sent messages (with edit indicator)
* Delete messages
* Forward messages to other conversations
* Mute conversation notifications
* Message draft autosave with recovery

**AI & Automation:**

* AI Chat Bots powered by OpenAI, Anthropic (Claude) and Google Gemini
* AI Chat Bots in group conversations with mention-based responses
* Conversation summarization and scheduled digests with AI
* Token usage tracking with cost estimation
* Voice message transcription powered by Better Messages Cloud AI or OpenAI
* Web Search capability for AI bots
* File Search tool for AI bots
* Image generation with AI
* PDF file support for AI conversations

**Media & Content:**

* File sharing with resumable uploads and ability to protect files from direct access (images, videos, documents)
* Client-side image and video optimization for cross-browser compatibility and saving storage space (format conversion, quality control, metadata stripping)
* Photo cropping and editing before sending
* Location messages with a map picker and nearby place suggestions
* Voice messages and video messages (available as addon)
* Embedded links with thumbnails and descriptions
* oEmbed support for YouTube, Vimeo, Spotify, SoundCloud, Flickr and 20+ services
* Emoji selector
* Built-in sticker packs with role-based access and per-locale support
* GIF integration with GIPHY and Klipy providers
* Inline sticker suggestions while typing
* Markdown text formatting support

**Notifications:**

* Email notifications for unread messages (customizable templates)
* Unsubscribe link support in emails
* Sound notifications for new messages
* On-site toast notifications anywhere on your website

**Moderation & Security:**

* AI Content Moderation with two providers:
  * **Better Messages Moderation AI** — included with WebSocket license at no additional cost, no third-party API keys required. Powered by Better Messages Cloud with extended categories, custom rules, and conversation context awareness
  * **OpenAI Moderation API** — free to use, requires an OpenAI API key
* Custom moderation rules — define your own rules in plain text
* Conversation context awareness — detect patterns split across multiple messages
* Choose between "Flag Only" (recommended) or "Hold for Review" moderation actions
* Pre-Moderated Messages - review messages before delivery
* Report messages feature
* Bad words filter with customizable blacklist
* Block user feature
* Role-based access control
* User whitelist/blacklist for moderation

**Engagement Features:**

* Reactions to messages
* Mentions (@username)
* Mass messaging from WP Admin with scheduling, file attachments, and background processing
* Suggested conversations for new users

**[Mini Widgets](https://www.better-messages.com/docs/features/mini-widgets/):**

* Embed conversation entry points anywhere on your site without using shortcodes
* Five widgets: Friends, Groups, Users, AI Bots, Chat Rooms
* Two display styles: Classic Bar or Floating Bubble (with chat heads)
* Three placement surfaces: bottom bar, side panel, mobile tab bar
* Per-widget icon picker, search box, role restrictions, and "Hide Tab When Empty" toggle
* Users widget with three display modes (all / by role / hand-picked) and sorting by last activity or registration date
* Customizable order of tabs in mini widgets, side panel and mobile view

**Customization:**

* Modern, fully customizable design
* Appearance tab — repaint every part of the messenger, reshape its corners and spacing and tune dark mode, with a live preview
* Custom notification sounds
* RTL layout support
* White label solution
* Fully translatable
* Auto-delete old messages option

**Privacy & GDPR:**

* Dedicated Privacy & GDPR settings page
* All message data stored on your own server
* AI moderation (when enabled) sends message content for analysis — Better Messages Cloud does not store any data, review OpenAI's data policy if using OpenAI provider
* WordPress personal data export and erasure support (Tools → Export/Erase Personal Data)
* Suggested privacy policy text that adapts based on enabled features
* Self-hosted emoji images option — no external CDN requests
* Privacy-friendly video embeds — YouTube, Vimeo load only after user clicks
* No cookies set, no analytics or tracking scripts
* [Privacy & GDPR documentation](https://www.better-messages.com/docs/features/privacy-gdpr/)

**This is not a complete list of features** - Better Messages has many more small features and options that are not listed here. We are constantly adding new features and improvements based on user feedback.

**Compatible plugins & themes — 35+ native integrations:**

Better Messages works on **any** WordPress site out of the box. If your site already runs a community plugin, an LMS, a marketplace, or a directory, Better Messages plugs into it directly — inheriting members, profiles, groups, courses, listings, and posts so chat surfaces appear in the right places without setup.

**Community & Membership Platforms** — replaces the built-in messenger and inherits members, profiles, friends, and groups:

* [BuddyPress](https://www.better-messages.com/docs/integrations/buddypress/)
* [BuddyBoss Platform](https://www.better-messages.com/docs/integrations/buddyboss/) — including BuddyBoss Theme and ReadyLaunch
* [PeepSo](https://www.better-messages.com/docs/integrations/peepso/)
* [Ultimate Member](https://www.better-messages.com/docs/integrations/ultimate-member/)
* [FluentCommunity](https://www.better-messages.com/docs/integrations/fluentcommunity/) — including Spaces and Courses
* [SureDash](https://www.better-messages.com/docs/integrations/suredash/)
* [ProfileGrid](https://www.better-messages.com/docs/integrations/profile-grid/)
* [UsersWP](https://www.better-messages.com/docs/integrations/userswp/)
* [WP User Manager](https://www.better-messages.com/docs/integrations/wp-user-manager/)

**Learning Management Systems (LMS)** — course chat rooms, instructor messaging, and student-to-student conversations:

* [LearnDash](https://www.better-messages.com/docs/integrations/learndash/) — including Instructor Role add-on
* [LearnPress](https://www.better-messages.com/docs/integrations/learnpress/)
* [Tutor LMS](https://www.better-messages.com/docs/integrations/tutor-lms/)
* [MasterStudy LMS](https://www.better-messages.com/docs/integrations/masterstudy-lms/)
* FluentCommunity Courses

**E-commerce — WooCommerce** — pre-sales and order support chat for online stores:

* [WooCommerce](https://www.better-messages.com/docs/integrations/woocommerce/) — Contact buttons on **product**, **cart**, **checkout**, and **order** pages. Cart contents are auto-posted into the conversation as a rich message so your support agent immediately sees what the customer is looking at, order pages post a structured order context card. Plain product URLs pasted into any chat are expanded into rich product cards. Embedded inbox lives inside WooCommerce **My Account**. **HPOS-compatible**, block-theme-compatible, works with **guest checkout**. Available on **both the free and WebSocket versions** — the WebSocket version opens chats as a popup mini-widget overlay instead of navigating away.

**Marketplaces & Multi-Vendor** — buyer-to-vendor chat on top of WooCommerce, with per-vendor opt-in and contact buttons on vendor stores, product pages, and order details:

* [Dokan Marketplace](https://www.better-messages.com/docs/integrations/dokan/)
* [MultiVendorX](https://www.better-messages.com/docs/integrations/multivendorx/)
* [WCFM](https://www.better-messages.com/docs/integrations/wcfm/)
* [WC Vendors](https://www.better-messages.com/docs/integrations/wc-vendors/)

**Listings, Directories & Classifieds** — contact buttons on every listing, with per-listing threads:

* [HivePress](https://www.better-messages.com/docs/integrations/hivepress/)
* [Directorist](https://www.better-messages.com/docs/integrations/directorist/)
* [GeoDirectory](https://www.better-messages.com/docs/integrations/geodirectory/)
* [Classified Listing](https://www.better-messages.com/docs/integrations/classified-listing/)
* [Motors – Car Dealer, Classifieds & Listing](https://www.better-messages.com/docs/integrations/motors/)
* [WP Job Manager](https://www.better-messages.com/docs/integrations/wp-job-manager/)

**Real Estate Themes** — agent and inquiry messaging on property listings:

* [Houzez](https://www.better-messages.com/docs/integrations/houzez/)
* [RealHomes](https://www.better-messages.com/docs/integrations/realhomes/)

**Forums** — Private Message link on every reply:

* [wpForo](https://www.better-messages.com/docs/integrations/wpforo/)
* bbPress

**Gamification, Points & Paid Access** — charge per message or call with per-role pricing and balance display:

* [GamiPress](https://www.better-messages.com/docs/integrations/gamipress/)
* [MyCRED](https://www.better-messages.com/docs/integrations/mycred/)

**Automation & Page Builders:**

* [Uncanny Automator](https://www.better-messages.com/docs/integrations/uncanny-automator/) — triggers and actions for chat events
* [AutomatorWP](https://www.better-messages.com/docs/integrations/automatorwp/) — triggers and actions for chat events
* [Crocoblock JetEngine Profile Builder](https://www.better-messages.com/docs/integrations/jet-engine/) — profile and chat shortcodes for JetEngine listings

**Push & PWA:**

* [FluentNotify](https://www.better-messages.com/docs/integrations/fluent-notify/) — web push through your own Firebase project
* [OneSignal](https://www.better-messages.com/docs/integrations/onesignal/) — web push notifications
* [Progressify PWA](https://www.better-messages.com/docs/integrations/progressify/) — install-to-home-screen prompts on the messenger

**Universal Shortcode Builder — add chat to anything else:**

Don't see your plugin or theme in the list? Better Messages ships a visual [Shortcode Builder](https://www.better-messages.com/docs/shortcodes/better_messages_live_chat_button/) at **WP Admin → Better Messages → Shortcodes** that lets you drop a Live Chat Button onto any custom post type, directory, marketplace listing, agent profile, or page builder block — **without writing PHP**. Point it at a sample post, choose how the target user is resolved (post author, postmeta-stored user ID, or a fixed inbox), set a thread strategy and label, and copy the generated shortcode. The same shortcode then works for every post of the same shape, with automatic per-post threading and an optional in-chat banner. Paste it into Gutenberg, Elementor, Bricks, Divi, or directly into a theme template.

[Full list of integrations](https://www.better-messages.com/docs/category/integrations/)

**Feel free to report any incompatibility or request more integrations — that is very important and helps improve Better Messages!**

**WebSocket version:**

WebSocket version is a paid option, you can get license key on our website.

We use our dedicated servers to implement WebSocket communications between your site and users. Our servers are completely private and do not store or track any private data — all messages remain in your database.

**Performance & Reliability:**

* **Significantly** reduces the load on your server (up to 200x fewer requests)
* **Instant** message delivery in realtime
* Works with any hosting including shared hosting
* No limits on concurrent connections or monthly active users

**Video & Audio Calls:**

* HD Video Calls (1-to-1)
* HD Audio Calls (1-to-1)
* Group Video Chats (up to 32 participants)
* Group Audio Chats (up to 50 participants)
* Screen Sharing in calls and group chats

**Mobile Apps (Alpha):**

* iOS Mobile App (build your own branded app) - Alpha
* Android Mobile App (build your own branded app) - Alpha
* Push notifications for calls and messages
* VoIP notifications for incoming calls

Note: Mobile apps are currently in alpha stage. Core functionality works, but some features may be limited or under development.

**Realtime Features:**

* Messages Delivery Status (sent, delivered, seen)
* Typing, voice recording and file uploading activity indicators
* Online/Offline presence indicator
* User statuses (Online, Away, Do Not Disturb)
* Mini Chats - chat windows anywhere on your site
* Mini Conversations widget - list and continue recent threads from any page
* Online-only filter and online-first ordering for the Users mini widget

**Better Messages Cloud AI:**

* Automatic message translation in 1-to-1 conversations — 53 languages, auto-detection
* AI Content Moderation — 23 categories, custom rules, conversation context awareness
* Voice message transcription — 99+ languages with auto-detection
* No third-party API keys required — included with WebSocket license at no additional cost

**Security & Encryption:**

* Optional End-to-End Encryption (E2EE) — can be enabled at the website level and per conversation, messages and files encrypted in users' browsers with AES-256-GCM, server never sees plaintext
* Local browser encryption (AES256) for offline message storage
* Web Push Notifications (works even when the browser is closed)
* All data encrypted in transit, so we can't read it on our servers

**Support:**

* Priority email support
* Regular updates and new features

[Why WebSockets are a game-changer?](https://medium.com/@monica.lucarini28/is-websocket-a-game-changer-aeaef68d1fba)

**[Get WebSocket version license key](https://www.wordplus.org/downloads/bp-better-messages/) | [Terms of Use](https://www.wordplus.org/end-user-license-agreement/)**

[Languages](https://translate.wordpress.org/projects/wp-plugins/bp-better-messages/)

RTL layout is built into the plugin.

You can translate plugin to your language with LocoTranslate or [participate in plugin translation](https://translate.wordpress.org/projects/wp-plugins/bp-better-messages/).

== Frequently Asked Questions ==

= Is Better Messages free? =

Yes — install the free version from WordPress.org. It supports private and group conversations, chat rooms, file sharing, oEmbed previews, smart-batched email notifications, role-based access, guest chat, and the standard messenger feature set. The WebSocket version is paid and unlocks instant delivery, one-on-one and group voice / video calls, AI Chat Bots, AI Content Moderation, AI Message Translation, Voice Message Transcription, web push, and end-to-end encryption.

= Which WordPress plugins does Better Messages integrate with? =

35+ native integrations across community platforms (BuddyPress, BuddyBoss Platform, PeepSo, Ultimate Member, FluentCommunity, SureDash, ProfileGrid, UsersWP, WP User Manager), LMS (LearnDash, LearnPress, Tutor LMS, MasterStudy LMS), e-commerce (WooCommerce — pre-sales and order support chat with contact buttons on product, cart, checkout, and order pages), multi-vendor marketplaces (Dokan, WCFM, WC Vendors, MultiVendorX), listings and directories (HivePress, Directorist, GeoDirectory, Classified Listing, Motors, WP Job Manager), real estate themes (Houzez, RealHomes), forums (wpForo, bbPress), gamification (GamiPress, MyCRED), automation (Uncanny Automator, AutomatorWP), page builders (Crocoblock JetEngine), and push / PWA (OneSignal, Progressify). If your plugin isn't listed, the built-in visual Shortcode Builder lets you add a Live Chat Button to any custom post type without writing PHP. See the [full list of integrations](https://www.better-messages.com/docs/category/integrations/).

= Does it support group conversations? =

Yes — first-class group chats with shared history, mentions, reactions, file uploads, replies, edit / delete / forward, and group voice / video calls (WebSocket version). Group chats can be auto-paired with BuddyPress / BuddyBoss / PeepSo / Ultimate Member / FluentCommunity groups, with members joining and leaving the chat in sync with the source community group.

= Can unregistered visitors (guests) chat? =

Yes — Guest Chat lets unregistered visitors join chat rooms, message vendors on marketplaces, ask questions on directory listings, or chat with site support. Guests enter a display name (and optionally an email), then participate as a guest user. Their thread history is preserved if they later register.

= Does it support voice and video calls on WordPress? =

Yes (WebSocket version) — one-on-one and group voice / video calls live inside the messenger thread, not as a separate Zoom / Whereby integration. Hosted media relay is included with the WebSocket license, no separate Twilio account, no Daily / Whereby subscription, no Zoom developer plan. Calls are full-screen on mobile and picture-in-picture on desktop.

= Is Better Messages GDPR-compatible? =

Yes. All message data is stored only in your WordPress database. The WebSocket cloud relay is blind to message content — it routes encrypted events but does not read, store, or inspect what passes through. Better Messages also integrates with WordPress's built-in Personal Data Export and Erasure tools. For sites with stricter data-sovereignty requirements (GDPR Article 9, HIPAA-adjacent, regulated-data workloads), a self-hosted plan is available — contact support.

= Does it have AI features? =

Yes (WebSocket version, AI add-on). AI Chat Bots (OpenAI, Anthropic Claude, Google Gemini) act as full participants in any thread, with custom system prompts and per-bot points charging via GamiPress / MyCRED. Better Messages Cloud AI provides AI Content Moderation (23+ categories including spam, scam, doxxing, contact sharing), AI Message Translation (53 languages with auto-detection), and Voice Message Transcription (99+ languages) — all included with the WebSocket license, no third-party API key required.

= Does it have native iOS and Android apps? =

Yes — Better Messages ships native iOS and Android mobile apps built on Capacitor, with push notifications, real-time delivery, voice / video calls, and full messenger feature parity with the web. White-label rebuild is available for sites that want their own branded app on the App Store / Play Store under their own developer accounts.

= Can I translate the messenger interface to my language? =

Yes — Better Messages is fully translatable through standard WordPress translation tools (Loco Translate, WPML, Polylang) using the `bp-better-messages` text domain. Ships with 30+ community translations. Contribute or improve a translation at [translate.wordpress.org](https://translate.wordpress.org/projects/wp-plugins/bp-better-messages/).

= Does it support end-to-end encryption? =

Yes (WebSocket version). End-to-end encryption is enabled per thread — messages and file attachments are encrypted in the sender's browser with AES-256-GCM before transmission, stay encrypted at rest in the database, and decrypt only in the recipient's browser. The server stores ciphertext only, no admin, host engineer, or attacker with database access can read the message content of an E2E thread.

= Where can I find detailed documentation? =

The complete documentation, integration guides, REST API reference, hooks reference, video tutorials, and 80+ blog posts are at [www.better-messages.com](https://www.better-messages.com/).

== Installation ==

1. Upload the plugin files to the `/wp-content/plugins/bp-better-messages` directory, or install the plugin through the WordPress plugins screen directly.
1. Activate the plugin through the 'Plugins' screen in WordPress
1. Use the Settings -> Better Messages to configure the plugin

== Screenshots ==

1. Group conversation with photo sharing, emoji reactions, replies and @mentions — alongside a conversations list with unread badges, pinned chats, online presence and live typing indicators
2. Embedded video and link previews — YouTube, Vimeo, Spotify, and 20+ oEmbed providers
3. Full-text search across every message, with matches highlighted in the conversations list
4. Start a new conversation — recipient search with live results and online status
5. Mini chat window that follows members across your whole WordPress site
6. On-site toast notifications for new messages — visible anywhere on your WordPress site
7. Dark mode across every surface of the messenger
8. Voice and video messages, with one-tap transcription
9. Read a conversation in your own language — messages arrive translated, with the original one tap away
10. Share a location with a map picker and nearby place suggestions
11. AI chat bots powered by OpenAI, Anthropic (Claude) and Google Gemini
12. Appearance tab — repaint any part of the messenger and watch every change in the live preview
13. Settings — email, browser push and on-site notifications, and 18 more tabs of options
14. Group video calls for up to 32 participants, right beside the conversation (WebSocket version)
15. One-to-one HD video and audio calls from any conversation (WebSocket version)

== Changelog ==

**Important — please read before updating to 3.0**

3.0 is a full redesign. Your conversations, settings and integrations carry across untouched — including the colors and sizes you set in the Customizer — but three things need your attention:

* Custom CSS needs rewriting: the messenger's classes are now prefixed `bm-` instead of `bpbm-` and `bp-messages-`
* Update the exclusion lists of any caching or optimisation plugin: the script and style files were renamed (`bp-messages*` → `better-messages*`, `bpbm-worker.js` → `bm-worker.js`)
* The WordPress Customizer integration is gone — colors and sizes now live in the Appearance tab, and snippets calling `Better_Messages()->customize` stop working

**Noticed something wrong after updating to 3.0? Please tell us.** A redesign this large can behave differently on a theme or plugin combination we have not seen. If anything looks broken, missing or out of place, email us at [support@better-messages.com](mailto:support@better-messages.com) — or open a topic on the [support forum](https://wordpress.org/support/plugin/bp-better-messages/) if you are can not contact email for some reason — and we will get it fixed. Please do not leave it unreported, every report speeds up a fix for everyone.

**Thank you to everyone who sent feedback and bug reports on the 3.0 release.**

= 3.0.9 - 3.0.10 =
* Clear messages, Erase conversation, Leave conversation, Pin Message and Unpin Message show that they are under way and then that they are done, as in 2.0
* Fixed Delete conversation, and the Restore link after it, spinning without end when the site could not be reached
* Over the length limit, Send stays in place and says the message is too long when pressed, for a new message and an edit alike, as in 2.0
* Saving an edit with all of its text removed says the message is empty, as in 2.0, instead of doing nothing
* A call a site's own rules refuse between two members stays in the conversation header, greyed, and says why when pressed, as in 2.0
* The Messages tab of the corner widget says why when older conversations cannot be loaded, as in 2.0
* Enter in a guest's name field continues, as in 2.0
* Fixed a status picked on a phone's settings screen being saved twice
* Fixed the encryption error showing twice when an edit, or a message sent from New Conversation, could not be encrypted
* Fixed the Message status dialog marking Delivered with a single check, which on a message means sent, instead of the double check
* Fixed opening a conversation briefly showing an earlier day's date label at the top and fading other date labels in, with nothing being scrolled
* The ⋯ button is back on every conversation in the list, as in 2.0, opening the same menu as a right click — it shows on hover on desktop and always on phones, with a switch for each in **Appearance → Layout** and **Appearance → Mobile**
* Fixed search results, on-site message notifications and the reply box's quote showing a broken character (�) or part of an HTML code such as `&#` where a long message was cut short
* Fixed the search highlight landing one letter off the matched word in a message with a Turkish İ before it
* Fixed the conversation info panel listing no members in a course conversation, or in a private conversation an administrator opened without being in it
* A conversation among the search results has its menu again, as in 2.0 — a right click, a long press or its ⋯ pins, mutes or deletes it where it was found
* A conversation among the search results goes by its name in the conversations list again, as in 2.0, instead of by whoever wrote the matching message
* A conversation among the search results shows who wrote the match again, as in 2.0 — the writer's picture in a group, and the delivery tick on your own message
* Fixed a reply or edit being written getting cancelled when the unread filter was switched on with its conversation open
* Mark all as read is offered whenever a conversation is unread, as in 2.0, not only while that conversation is among the ones the list has loaded
* The Users and Friends tabs mark the person of the open conversation again when the conversations list has not loaded it or the unread filter is on
* On a phone, a conversation the list has not loaded no longer empties before it slides away on Back
* Fixed a guest in Do not disturb still hearing the message sound and the ringtone
* Fixed a guest's drafts and unsent messages being cleared on the next page load after the messenger reset its local database
* The forward dialog shows the badges a site adds to a member's name, as the conversations list does and as 2.0 did
* An administrator reading someone else's conversation sees it named by its subject, as in 2.0, instead of after one of the two people in it
* The favorites page shows 2.0's star on every message again, and a click on it takes the message off the list
* A reaction shows a number only once two or more people have picked the same emoji, so reactions in a private conversation show just the emoji
* The tick of a seen message is the accent color inside a conversation again, as in the conversations list and in 2.0 — on bubbles painted in the accent it keeps the message's text color
* The Appearance preview shows delivery ticks as delivered and seen, and a click on one opens who saw it instead of breaking the preview
* Choose the color of links in messages in **Appearance → Colors** — for your own and other people's messages on bubbles, and one for the Outlined and Classic designs
* Choose the outline color of your own and other people's messages for the Outlined design in **Appearance → Colors**, and each message color says what it still paints under Outlined and Classic
* **Appearance** opens on the Conversation tab, where the message design is chosen, ahead of Colors
* Fixed a blocked member's messages offering no menu — they can be reported again, and deleted by a moderator
* Fixed an encrypted message this device cannot decrypt offering no menu — its sender can delete it, and it can be answered, pinned, starred or reported
* On a phone, a conversation picked from the header Messages dropdown of BuddyBoss, PeepSo or Ultimate Member opens over the page again, as in 2.0, instead of loading the messages page
* Fixed the BuddyBoss header's Messages dropdown staying open after a conversation was picked from it
* On a phone, Private Message on a member or a message of a chat room embedded in a page opens over that page again, as in 2.0, instead of loading the messages page
* Fixed Private Message in the messenger taking a phone off the page when a chat room is embedded in it
* Fixed a person or conversation picked in the corner widget without mini chats opening the profile owner's messages page on someone else's BuddyPress profile, instead of your own
* On a phone, Back leaves the page at the first press again after the messenger was opened over it, as in 2.0
* Links carrying `openFullScreen` open the messages page maximized again
* A message notification clicked on the messages page opens the conversation in that messenger instead of a mini chat over it, unless another conversation is open there
* Private Message on a participant or on a message can open the new conversation in a mini chat, so a chat room it was started from stays open — switch on **Private messages from a conversation** in **Appearance → Mini widgets**
* Message buttons still carrying 2.0's `bpbm-pm-button` class — copied into a page or kept in a page cache — work again
* A mention in a message opens the profile in the same tab again, as in 2.0, and passes the click to the `better_messages_before_avatar_click` filter first, as an avatar does
* Fixed a long name in a mention spilling out of its pill in mini chats, or out of the message on a phone
* Fixed notifications covering the bottom menu of MasterStudy account pages narrower than 1280px
* FluentNotify shows its own card for a new message again where the messenger's on-site notifications are turned off
* Fixed a swipe through a conversation on iPhone and iPad stopping dead and jumping back, in Safari and in apps that show the messenger in a web view
* Fixed the conversation scrolling to the bottom a second time a moment after sending a message, pulling you back down if you had scrolled up again
* Older messages load further ahead of the scroll, and on iPhone and iPad while a swipe is still moving, instead of stopping it at the top of what was loaded
* Loading older messages no longer redraws every message already in the conversation, which made long conversations stutter more the further back they were scrolled
* A conversation too short to scroll shows "Start of conversation" above its first message again, as in 2.0
* Fixed a new message flashing once before it fades in, in a conversation too short to scroll
* On a phone, the slide between the conversations list and a conversation no longer stutters while the conversation opens, and a swipe back no longer jumps as it starts to follow the finger
* In a web app installed to a phone's home screen, the tab bar and the reply area stand clear of the bottom edge again, as in 2.0
* Fixed a gap between the tab bar and FluentCommunity's bottom menu when the community is installed as an app on iPhone or iPad
* Fixed the messenger on iPhone and iPad staying stuck until Safari was restarted — phones and tablets now keep the local database in each tab's own worker
* Fixed a "Database not opened" error, and a messenger that never finished loading, after another tab closed or reset the local database
* Fixed a new message, or another change made in one browser tab, sometimes not showing in the site's other open tabs
* The messenger keeps working on a device that has run out of storage, and keeps its local copy on sites that serve plugin files from a CDN
* The conversation list and arriving messages show sooner, and a large local history no longer freezes the page while it loads, in the browser and in the apps
* Fixed conversations staying on the loading placeholder on a slow phone with a large local history
* Fixed a one-to-one conversation's header showing your own name after the site's data was cleared in the browser with the messenger open
* Fixed a message that arrived while another tab was loading its local copy, or while encrypted conversations were being read, not showing until the conversation changed again
* Fixed a message on a site without WebSocket sometimes never reaching the other person when it took a few seconds to send, or went out once the connection was back
* Fixed older end-to-end encrypted messages reading as undecryptable until a reload, after the encryption module once failed to load
* With end-to-end encryption on, closing a tab in a chat room that shows who is present leaves the room while other tabs stay open
* A call pressed before the messenger has connected opens at once, says it is connecting and goes out once connected, as in 2.0, instead of doing nothing or saying the connection is not established
* The Android app says when full-screen notifications are off, which keeps incoming calls off a locked screen, and opens the setting that allows them — at start, after a call missed that way and in its Settings (rebuild the app to get it)
* A deleted message disappears as soon as the delete is confirmed — or shows "This message was deleted" where the site replaces deleted messages — and comes back if the delete fails
* Fixed the loading placeholder showing instead of an empty conversation when its only message was deleted while the conversation was still loading
* Fixed pictures not filling their frame on some themes, which left an empty band below a wide picture — in messages, reply quotes, the reply box and the info panel's photos
* Fixed the AI moderation, pre-moderation, voice transcription and translation switches getting stuck on after the OpenAI API key, license or Messages Viewer they need was gone
* Fixed a link to a chat room landing on the Messages tab when the conversations list is collapsed, and collapsing the list switching it back to Messages
* Fixed an empty dot on the Users tab of the collapsed conversations list while nobody else is online — its online count is green again, as in 2.0

= 3.0.7 - 3.0.8 =
* Text pasted into the reply box keeps its bold, italics, underline and strikethrough, whether it was copied from a message or from another page — fonts, colours and everything else stay behind
* Fixed quotes, ampersands and angle brackets showing as HTML codes in the mobile app's message notifications and the conversation title above them
* Fixed the messenger's loading placeholder jumping on phones and in narrow page columns — it now shows the same single-column layout the messenger opens in
* Fixed an iPhone placing or answering a video call in Chrome still showing its own picture at half its width in a black frame
* Fixed the reply box losing its focus and cursor about a second after a new conversation was opened from a link, which closed the keyboard on a phone
* Fixed an emoji from a phone's keyboard or a paste appearing in the reply box as WordPress's emoji image, with the cursor jumped in front of it and the emoji missing from the sent message
* Fixed presence-based chat rooms offering **Pin to top**, which pinned nothing because those rooms never appear in the conversations list
* Fixed the conversation going blank for a moment between the loading placeholder and a conversation opened from a link
* Fixed a message sent just as the reply box saved its draft coming back into the reply box after sending, and staying there as the conversation's draft
* Fixed text typed just before reloading the page or closing the tab missing from the conversation's draft
* Fixed a long press on a conversation in the list selecting the list's text on a phone instead of opening the conversation's menu, and no list of conversations, people, groups or chat rooms selects its text on a long press or a mouse drag any more
* Fixed a long message filling the search results and the favourites list with its whole text — a search result now shows the words around the match on two lines
* Fixed the text of a message not being selectable with a mouse on a Windows 2-in-1 or tablet the browser treats as a touch screen — a long press with a finger still opens the message menu
* Fixed **Copy message text** losing the message's line breaks and formatting — a copied message pastes back into a conversation as it was written, and into other editors with its bold, italics and links
* Members keep their end-to-end encryption keys in the browser while encryption is switched off, so switching it back on no longer asks them for their backup password
* Audio Call and Video Call are offered for guests too in the users list, search results, a chat room's online users and a conversation's participants, as they already were inside a conversation with a guest
* Fixed the Minimize button still appearing on the BuddyBoss Messages page with **Hide Mini Widget on Messages Page** turned on, where pressing it sent the conversation into a mini chat that setting had already hidden
* Phones and mini chats can show every button beside a message, the ⋯ menu alone or none, at **Appearance → Mobile → Buttons beside a message** and **Appearance → Mini widgets → Mini chat windows → Buttons beside a message**, which take the place of **Tap a message to show its actions** and **Message actions in mini chats**
* Messages on a phone and in a mini chat take all the width their buttons leave, in every message design, instead of stopping at the Maximum bubble width
* A favorited message shows its star beside the time where the buttons beside it carry none
* Fixed turning **Tap a message to show its actions** off in 3.0.6 also taking reactions away on a phone — a tap brings up the reactions picker whatever the buttons beside a message are set to
* **No bubbles** is now **Classic**, laid out as 2.0's Standard template was: every message on one side, its buttons and time on its first line and no room kept beside it, with **Message side** applying to the bubble designs only
* Fixed **Pointing tail toward the avatar** moving the sender name away from the avatar along with the bubble
* Reactions are now at the top of the message menu as well, which is what makes them reachable on a picture at last — long press the image, or open the same menu from the image viewer's own button
* Fixed the reactions picker sliding away the moment a reaction was picked, which put a different emoji under a cursor that had not moved
* Fixed the message menu sliding in from the side of the screen on a phone instead of opening where the message was pressed
* Fixed Escape closing the image viewer together with the message menu opened over it
* A sticker, a GIF or a picture carrying reactions now shows its time on the same row as the pills, the way a message with text already did, instead of spending a line on each
* Fixed a landscape GIF or sticker leaving its bubble wider than the picture, with the time and ticks beside it instead of on it
* Fixed the messenger being pushed sideways and squeezed into a narrow strip by a theme's floated element, most visibly on a BuddyPress group's Messages tab on a phone
* Fixed the messenger, and the page around it, being stretched to the width of the longest conversation preview on a theme that sizes its layout from its own content
* Fixed a theme's text color taking over the messenger's search and picker fields, which could leave their text unreadable on a dark palette
* Fixed opening the conversation menu during a call taking the conversation off screen and closing the menu again, with the call stretched across the whole messenger in its place
* Fixed the call controls drawing, and taking clicks, over the conversation information panel opened beside a call
* Fixed a GIF or sticker being cut off at the edge of the conversation a call squeezes, instead of shrinking to the room it has
* The conversation beside a call can be made wider or narrower, at Appearance → Layout → During a call, where its width had always been fixed at 350px
* The other messages' text color at Appearance → Colors now says when the selected message design does not paint it, instead of looking live while changing nothing
* Fixed pinning or muting a conversation, changing your status, opening a sticker pack and following a refused Private Message link reporting "AxiosError: Request failed with status code 403" or "[object Object]" in place of the reason the site gave
* Fixed a connection that drops raising "Network Error" notices over the messenger, most visible on a phone, where a suspended tab or a move from Wi-Fi to cellular could put several of them on screen at once
* A firewall or CORS rule that keeps the messenger from reaching the site now says so in one readable notice, where it used to show "Network Error"
* An action that could not reach the site, such as pinning, muting, a reaction or a setting, now says so in one readable notice instead of "Network Error"
* Notification cards now step around open mini chats, the mini chats bar and the phone's chat button instead of covering them
* A new message no longer raises a notification card while its conversation can already be seen, open or in view in a conversations list — one pushed below the pinned conversations, or behind another tab of the mini widget, still raises it
* Fixed a setting that the site would not save saying nothing at all, on the messenger's own settings screen
* Fixed Private Message taking you off the page instead of opening a mini chat, in the participants and online users lists of a conversation embedded on a page and in a mini chat's own message menu
* Fixed typing @ in a presence-based chat room offering only the people who had already written there, which left somebody sitting in the room who has never spoken impossible to mention
* Fixed the name search behind @ finding nobody in a conversation holding more participants than the messenger had loaded
* Fixed the list of names that opens on @ landing far from the message field on a phone once the on-screen keyboard was up, and not appearing at all where the messenger had taken the whole screen
* Typing @ searches a whole name again, spaces included, where the list had been closing at the first space and leaving a member findable only by the word their name starts with
* Fixed the list of names that opens on @ appearing behind the mobile app's own screen, where Enter then picked a name nobody could see
* Fixed a group conversation viewed before anyone had written in it never granting moderator rights to the first person who then sent a message
* Fixed an error while preparing a conversation update for one participant leaving the rest of that request acting as that participant
* Fixed the "New messages" line disappearing a moment after opening a conversation from another one, and landing above messages already read when a conversation is opened again
* Fixed the message field sometimes opening partly under the on-screen keyboard on an iPhone, where only closing the keyboard and tapping again brought it into view
* Fixed a conversation left showing loading placeholders instead of its empty state once its last message was deleted or it was cleared, which on a WebSocket site lasted until the page was reloaded
* Fixed the bubble-style mini widget's conversation panel closing while its emoji picker, formatting bar or image viewer was in use
* Fixed end-to-end encryption keys being lost when the messenger rebuilt its local data right after the page loaded, which left the member restoring them with their backup password
* Fixed chat room moderators no longer being offered Delete on other members' messages
* Fixed chat room moderators being shown the group call settings of a room, which only a site moderator can change
* Fixed Private Message missing from the message menu in a course conversation between two people
* Fixed Kick participant being offered in a group's chat, whose members come from the group itself
* One-to-one calls now move to the room only when they cannot connect directly or through the relay server at all, so a brief network change, such as a phone switching from Wi-Fi to mobile data, keeps a call on its direct connection
* One-to-one calls can now last as long as needed — a long call no longer ends when its connection has to move to the room, and a call carried by the relay server no longer drops after six hours
* Fixed a one-to-one call that had moved to the room ending by itself a minute after a brief loss of the realtime connection
* Fixed the caller waiting on "Connecting" for good when the other side answered but could not join, where the call now ends with "The other side could not join the call"
* Fixed the caller of a call that starts in the room waiting on "Connecting" for good when the other side accepted and never arrived, where the call now ends after a minute
* Fixed a one-to-one call sometimes not recovering after its connection dropped for more than a few seconds
* Fixed a phone's camera no longer reaching the other side of a one-to-one video call after the browser had spent more than a few seconds in the background
* Fixed the camera or microphone staying on after a call when it had been turned on while the call was still ringing
* Fixed a phone's own camera preview being drawn at half its width in a black frame, at the start of a call and after coming back to the browser
* Fixed a Firefox participant's camera never reaching the others in a room call, including a one-to-one call that had moved to the room
* Fixed the iOS and Android apps hanging up a one-to-one call as it moved to the room, and turning a muted microphone or a switched-off camera back on there — the apps need a new build to get this
* Fixed the iOS and Android apps saying the other side had lost connection for the rest of a call after a moment's drop of their own connection — the apps need a new build to get this
* Fixed a call answered from the iOS app's own ringing screen sometimes having no sound in either direction — the app needs a new build to get this
* Fixed a series of call problems in the iOS and Android apps, in group calls and in one-to-one calls that reconnect or move to the room — the apps need a new build to get this
* Fixed avatars in the conversations list, the compact icons-only list included, showing an arrow instead of the hand pointer the rest of the row shows
* Fixed the New Conversation button missing from the conversations list with **Messaging → Single Conversation Per Recipient** turned on
* Fixed **Hide in private conversations** and **Hide in group conversations** at Appearance → Conversation → Avatars treating a conversation of three or more people as a private one
* Fixed a visitor who is not logged in getting an error on opening a member, an AI bot or a chat room from a list, instead of being asked to log in or continue as a guest
* Fixed **Calls → Call Restrictions → Restricted Roles** also taking group audio and video chats away from those roles, where it covers one-to-one calls only
* Audio Call and Video Call are back beside people in the mini widget, in search results, in a chat room's online users list and among the participants of a conversation embedded on a page
* Fixed a search typed with any tab other than Messages in front showing no results
* The points balance on the account row follows **User Menu** and **User Menu Popup** at Integrations → Points Systems → Balance Display again, instead of appearing in its menu whenever the balance was shown anywhere else
* Fixed FluentNotify showing its own notification for a new message a few seconds after the messenger had already shown one on the same page
* Fixed Reply in the image viewer only closing the picture in a mini chat that had been closed and opened again since the picture was first viewed
* Other minor bugfixes and improvements

= 3.0.4 - 3.0.6 =
* A conversation full of long, heavily formatted messages opens far faster and no longer locks up a phone while it loads
* Fixed a PHP warning on every message push to a member whose only registered device is an Android phone, which filled the debug log of any site running the mobile app with WordPress debugging on
* The member's own avatar and name at the foot of the conversation list can be hidden again — the new **Appearance → Layout → Interface elements → Account row** decides it, and the settings button stays behind as it did in 2.x
* Fixed My profile still being offered at the foot of the settings screen on a phone when the Appearance switch for it was turned off
* Fixed the last conversation in the list staying on screen after it was erased, deleted or left, until the page was reloaded
* Fixed a chat room's online users list taking its width out of the conversation during a call, which left messages wrapping at about one character a line
* Fixed the Login button on a chat room's sign-in prompt taking its label colour from the theme, which left it unreadable on the accent fill in some colour schemes
* Fixed the Indigo palette's dark mode putting white on its accent, where the other palettes already use dark ink
* Fixed the user settings buttons — "Restore encryption keys", "Free up space" and "Clear local data" — arriving in dark mode as outlines with nothing legible inside them, and "Clear local data" not reading as the destructive action it is
* A microphone or camera that will not open now says why — not allowed yet, missing, or already in use by another application — and points at the fix it needs
* Security improvement: a sent message now carries only the metadata the messenger is meant to send, with everything else written on the server — developers sending custom metadata can allow their keys through the new `better_messages_client_message_meta_keys` filter
* Security improvement: a display name can no longer carry an element into the messenger — names now pass an allowlist on the server and in the browser, which badges, icons and the links around them pass untouched, and a tag it does not carry can be added through the new `better_messages_display_name_allowed_html` filter in [PHP](https://www.better-messages.com/hooks/php-filters/#better_messages_display_name_allowed_html) and [JavaScript](https://www.better-messages.com/hooks/js-filters/#better_messages_display_name_allowed_html)
* The "Chatting as …" bar above the message field, with its login and register links, is back on every screen a guest can be on — mini chats included, which had never carried it
* A link to a chat room opens the Chat Rooms tab again, rather than leaving the list on Conversations
* A role that may not start conversations, guests included, no longer gets a "Start a new conversation" button on the screen beside the conversations list
* Every link inside a message opens in a new tab again, markdown links and links written as HTML included
* Fixed "Pointing tail toward the avatar" pointing away from it, outlined messages being unable to carry the tail at all, and an outlined message losing its own edge while it was clicked
* Fixed the reason a conversation could not be started never reaching the member who tried, or staying in the address bar and coming back as a stray error on the next screen — most visible on the interval a member must wait between starting conversations
* The reply, favorite and more buttons are back beside messages in mini chat windows, now as a setting — **Appearance → Mini chat windows → Message actions in mini chats**, on by default as in 2.x
* Opening an image no longer hides the ways to answer it — the viewer's toolbar now carries Reply, the favorite star and the whole message menu
* Whether a tap on a message reveals its buttons is now yours to choose — **Appearance → Conversation → Messages → Tap a message to show its actions**, on by default as it has been since 2.x
* Fixed the buttons beside a message being clipped at the edge of the conversation, which on a phone cut the last one in half
* Fixed "Copy message text" being offered on a message with no text to copy, such as a voice message, a sticker, a GIF or attachments sent without a caption
* Notification cards are yours to colour — **Appearance → Colors → Notifications** now carries their background, text and border in both schemes, and a choice of Inverted as before or Match the messenger
* Fixed typing @ in a presence-based chat room offering no names — the list is now built from whoever is in the room and whoever has spoken in it
* Fixed the Appearance preview filling the debug log with WordPress deprecation notices every time the settings page was opened
* Fixed an email notification from a chat room arriving with `&#038;` in its subject line in place of the `&` in the room's name, and the same for an apostrophe, a quotation mark, a dash and an ellipsis — a room named before this is corrected as the email goes out, so nothing has to be re-saved
* Reliability improvements for one-to-one calls — a call whose connection fails now recovers, or moves to the room, in seconds rather than tens of seconds, and the iOS and Android apps need a new build to get them
* Erasing a conversation removes it from your own list straight away, rather than leaving a row that opens to "the conversation does not exist" — leaving one, pinning, muting and editing a message all answer at once in the same way
* "Clear messages" now clears the whole conversation, instead of removing the first fifty messages and reporting success with the rest still there
* A conversation that no longer exists, or that you can no longer open, is cleared from the messenger for guests too, and one left behind by a missed realtime message is noticed again after a reload
* The time on a hover card keeps counting while the card is open, in the narrow conversations rail and on the chat heads alike
* Other minor bugfixes and improvements

= 3.0.0 - 3.0.3 =
* The messenger has been redesigned from the ground up — every surface, from the conversations list to mini chats and popups, is new, while keeping the layout and workflows you know
* The **Appearance** tab has been rebuilt around the new design — repaint any part of the messenger, reshape its corners and spacing, tune dark mode, and watch every change land in a live preview before saving. The colors and sizes you set in the Customizer are carried over
* The messenger's font is now yours to set at Appearance → Typography — pick a stack, type your own, or hand it to your theme's font
* The Mobile App page has been rebuilt and is no longer in alpha — a readiness checklist says what a build still needs before you start one, and the installed app now tells you when an update needs a restart, or a newer version is waiting in the App Store or Google Play
* Messages can now carry a location — a map picker with nearby place suggestions, off until you turn it on in the new **Location** tab, which also chooses the map and place providers and which roles may send one
* Voice messages can be answered with a video message, through the **Voice and Video Messages** add-on 2.0 — the new **Video Messages** tab sets round or square, a maximum length, auto-deletion and which roles may send them
* AI chat bots can now be spoken to — send a voice message and the bot answers what was said, whatever model it runs on. Each bot has its own Voice Input switch, and all it needs is a transcription provider picked on the **Voice Messages** tab
* Voice messages can be transcribed the moment they are sent — the new Auto Transcription option on the **Voice Messages** tab does it for every voice message, and the bubble shows the transcription running instead of asking for a tap
* A conversation can now be read in your own language — turn translation on for that conversation and every message arrives translated, with the original one tap away. The **Translation** tab now reaches group conversations, chat rooms and chat bot messages, and can have it on by default
* Messages and files sent while offline are kept on the device and sent by themselves once you are back online, or cancelled before that
* Conversations cached on a device are now kept across plugin updates and settings changes, and trimmed by themselves once the copy grows large — a new Storage section in the user settings shows what the device holds and can free it up, and Tools can reset every device's copy
* A reply to a photo or file now carries a thumbnail of it, and the attachments list can jump straight to the message a file was sent in
* Answering a call on one device now stops the others ringing at once, instead of leaving them to ring on until the caller gave up
* The Classic design, the follow-the-device color scheme, the Settings → Mobile tab and Mini Widgets → Layout have been removed — the Appearance tab replaces them, and the WordPress Customizer integration is gone with them, so snippets calling `Better_Messages()->customize` no longer work
* Custom CSS and caching exclusions need updating: the messenger's CSS classes are now prefixed `bm-` rather than `bpbm-` and `bp-messages-`, and the script and style files were renamed (`bp-messages*` → `better-messages*`, `bpbm-worker.js` → `bm-worker.js`)
* Security improvement: a crafted guest registration could pass as an AI chat bot, which let it into role-restricted chat rooms
* Security improvement: a chat room's messages and participants were readable over the REST API by visitors its guest setting turns away
* Fixed a crafted icon SVG smuggling markup past the sanitizer in a CDATA section, which let it run script on the icon preview screen
* Fixed a phone notification from an AI chat bot showing `<!-- BM-AI -->` in front of the text, and an empty one being sent the moment a bot began answering in a one-to-one conversation
* Fixed the user menu showing no name or avatar for a member or guest who does not have any conversations yet
* Fixed the guest registration bar losing its right-hand edge on themes that do not set border-box sizing
* Fixed the installed app staying on a broken update until it was retried by hand — it now replaces or rolls one back on its own
* Fixed chat notifications still being sent to phones the app had been removed from, and those devices counting as reachable
* Fixed a failed call to the app build server being reported as a success, hiding the real error
* Everything released in the 2.15 line, up to 2.15.33, is included — those entries are listed separately below
* Other minor bugfixes and improvements

= 2.15.33 =
* Added [**Unique Guest Names**](https://www.better-messages.com/docs/features/guest-access/#can-two-guests-use-the-same-display-name) setting at Settings → General — turn it off to let guests use a display name someone else already took
* Added [`BetterMessages.openGroupCall()`](https://www.better-messages.com/hooks/js-functions/#openGroupCall) JavaScript function — take a member straight into a chat room's group call from any page
* Fixed an AI chat bot's Conversations list failing with a critical error and reporting no conversations, when the bot was in a group or course
* Fixed a new encrypted conversation being created without a key when encryption was not yet set up on that device, leaving it unusable
* Fixed the other person's video staying black in a one-to-one call answered in Firefox, while their audio and the call itself worked
* Fixed the default avatar at Settings → Discussion being ignored on BuddyPress and BuddyBoss — users without a Gravatar showed the Gravatar logo
* Fixed a guest display name containing an underscore or percent sign being wrongly rejected as already taken
* Fixed unread counters bound to `better_messages_update_thread_unread` never dropping back to zero once a conversation was read
* Fixed text smiles containing `<`, `>` or `&`, such as `<3`, never turning into an emoji, and the conversion staying on when it was switched off
* Fixed a voice message shorter than a second arriving with no length shown, and the recording timer lagging up to a second behind
* Fixed a JavaScript error when an on-site notification was dismissed just as a new message reopened it
* Fixed conversations rendering blank when every emoji was removed from the reaction list
* Fixed the reaction picker still appearing on messages after reactions were switched off in the settings
* Fixed FluentCommunity's pull to refresh reloading the page while scrolling a conversation in an installed iOS app
* Other minor bugfixes and improvements

= 2.15.32 =
* Chat rooms and conversations can now be exported as a transcript — plain text, a web page or a CSV spreadsheet
* Push notifications can now be delivered through [FluentNotify](https://www.better-messages.com/docs/integrations/fluent-notify/), using a Firebase project you control
* Fixed a mini chat not opening for a chat room after the full screen view had been opened and closed
* Fixed incoming call notifications being hidden behind the full screen view, leaving no way to answer
* Added [`get_group_call_participants`](https://www.better-messages.com/hooks/php-functions/#get_group_call_participants) PHP function — read how many people are in a conversation's group video or audio call
* Added [`BetterMessages.getGroupCallParticipants()`](https://www.better-messages.com/hooks/js-functions/#getGroupCallParticipants) JavaScript function — the same counts on the page, over the WebSocket, with no request to your own server
* Added [`better_messages_group_call_status`](https://www.better-messages.com/hooks/js-actions/#better_messages_group_call_status) JavaScript action — fires whenever a group call's participant count changes
* Added [`BetterMessages.subscribeGroupCallStatus()`](https://www.better-messages.com/hooks/js-functions/#subscribeGroupCallStatus) and [`unsubscribeGroupCallStatus()`](https://www.better-messages.com/hooks/js-functions/#unsubscribeGroupCallStatus) — watch the live count of any chat room, including one the visitor has not joined
* Added [`better_messages_group_call_participants_cache_time`](https://www.better-messages.com/hooks/php-filters/#better_messages_group_call_participants_cache_time) PHP filter — how long a group call participant count is cached
* Added [`better_messages_fluent_notify_integration`](https://www.better-messages.com/hooks/php-filters/#better_messages_fluent_notify_integration) PHP filter — return `false` to disable the FluentNotify integration
* Other minor bugfixes and improvements

= 2.15.30 - 2.15.31 =
* Chat attachments are no longer listed by the WordPress media API
* Fixed guests being counted as BuddyPress members, which could report hundreds of members on a site with only a handful registered — updating clears the records already left behind
* Fixed a **Send Message** button in a members or friends list on a BuddyPress or Youzify profile page opening a conversation with the profile owner instead of the member it belongs to
* Fixed the **Create encrypted conversation** button being cut off at the bottom of a mini chat, with no way to scroll down to reach it
* Member and online counts in the chat rooms list no longer read "1 members" for a single member
* Presence-based chat rooms no longer carry an **Open** label in the chat rooms list
* The **User Inbox** block is now called **Messages**, and the settings that spoke of an "inbox" name the messages page or the conversation list instead
* Added [`better_messages_fluent_notify_integration`](https://www.better-messages.com/hooks/php-filters/#better_messages_fluent_notify_integration) PHP filter — return `false` to disable the FluentNotify integration
* Other minor bugfixes and improvements

= 2.15.29 =
* Fixed the messenger not loading at all on a site whose Ultimate Member Groups extension is too old for the installed Ultimate Member — the extension never starts up in that pairing, and the conversations list stayed permanently empty
* An Ultimate Member group with no picture of its own now shows a group marker, in place of an image that had been failing to load since the service hosting it shut down
* Fixed a chat room with no picture showing the generic person avatar in the chat rooms list, which made it look like a member — presence-based rooms, which keep no stored members, hit this every time
* A link to a chat room now opens the Chat Rooms tab only when that room is not in the conversations list — a room left in the inbox opens there, next to everything else the member is talking in
* Fixed the settings button missing from the messenger on phones — a site whose mobile tab bar comes from Chat Rooms, Users or AI Bots rather than Friends or Groups had no way to reach user settings there
* Fixed line breaks vanishing from messages typed over several lines when Enter starts a new line instead of sending — browser extensions that tag page elements, such as Bitdefender, were collapsing them into one run-on line
* Names decorated by the site keep that decoration in profile tooltips, as they did before 2.15.28 — only the avatar description, which is read aloud by screen readers, takes the name on its own
* Fixed a name decorated by the site through the username filters losing that decoration in the conversations and users lists — on a phone those lists are most of the messenger

= 2.15.28 =
* Added **Remember Last Tab** at Settings → Mini Widgets → Layout — the messenger reopens on the tab each member used last, the way the mini widgets already do
* Users can now be given control over more of their own messenger — how Enter sends a message (**Send on Enter Control**, Settings → Messaging), whether the new message popup appears (**Popup Notification Control**, Settings → Notifications), and the sound played when they send one
* Sound switches are no longer offered to users for a sound that is silenced site-wide
* Buttons on the [end-to-end encryption](https://www.better-messages.com/docs/websocket/e2e-encryption/) screens now follow the **Messages Window Roundness** setting
* Corrected the **Send on Enter** description, which named Ctrl+Enter as the alternative — it has always been Shift+Enter
* Fixed a "Send message" link from a forum or profile opening the side panel on the chat rooms list instead of the conversations list
* Fixed the call restriction at Settings → Calls having no effect on guests — calls are now refused for every restricted role, not only hidden
* Fixed **Auto-Delete Old Messages** leaving an unread badge that could never be cleared, and conversations now refresh once the cleanup has run instead of keeping removed messages on screen
* Fixed guests losing their [end-to-end encryption](https://www.better-messages.com/docs/websocket/e2e-encryption/) keys on every page load — a guest was asked for the password again on each visit
* Fixed the report reason arriving untranslated in the moderation email — it showed "inappropriate" instead of "Inappropriate"
* Fixed the sidebar collapse button doing nothing when **Compact Mode** was set to Always Expanded or Always Compact
* Fixed a name decorated by the site, such as a role badge, repeating itself in the avatar description and the profile tooltip
* Fixed a prefilled message on the new conversation screen being inserted as HTML instead of plain text

= 2.15.27 =
* Added support for the **gpt-image-2** image generation model in [AI chat bots](https://www.better-messages.com/docs/features/ai-chat-bots/)
* Added built-in pricing for the GPT-5.5 and GPT-5.6 models, so their token cost and point charges are calculated instead of reported as zero
* Fixed [AI chat bot](https://www.better-messages.com/docs/features/ai-chat-bots/) replies from gpt-5.4-mini and gpt-5.4-nano being charged at the full gpt-5.4 price
* The **Context Messages Limit** of an [AI chat bot](https://www.better-messages.com/docs/features/ai-chat-bots/) now also applies to OpenAI bots in one-to-one conversations — a long-running chat no longer makes every new reply more expensive than the last
* Fixed the [AI chat bot](https://www.better-messages.com/docs/features/ai-chat-bots/) model list offering models that cannot answer messages — such as ChatGPT's `-chat-latest` aliases and the image, audio and transcription models — where choosing one left the bot failing on every message
* Fixed an [AI chat bot](https://www.better-messages.com/docs/features/ai-chat-bots/) whose model is no longer offered by the provider answering with a generic error, instead of telling the site administrator that the model needs to be changed
* Fixed the title and the YouTube logo on a shared video doing nothing when clicked — they open the video on YouTube in a new tab again, while the conversation itself still cannot be navigated away
* Fixed shared videos not responding to a click inside [mini chats](https://www.better-messages.com/docs/features/mini-chats/) — a mini chat is smaller than any video service will play in, so videos there now open from a poster with a play button
* Fixed **Privacy-friendly oEmbeds** rendering a broken placeholder with the video title spilled into the message as text
* Videos opened from a placeholder now start playing straight away instead of waiting for a second click on the play button
* Fixed the video placeholder ignoring the first tap on phones and tablets
* Fixed the Conversations tab being listed last at Settings → Mini Widgets → Layout on sites that arranged their tabs before it became sortable, while the messenger kept opening on it
* Fixed the unread counter on a side panel or mobile tab covering the tab icon when tab labels are shown — the count now sits in front of the icon
* Fixed the unread counter on a tab being unreadable in dark mode, where it was drawn in white on a white badge
* Fixed the search box of the friends, groups, courses, chat rooms and users lists being drawn as a rounded white field by the theme, which left it unreadable in dark mode
* Themes can no longer round the corners of the messenger's own input fields
* Fixed the page appearing extremely tall while the messenger loads and then jumping once it is ready — the loading placeholder now fits the window exactly like the loaded messenger, including with **Max Height** set to a large value like 9999
* Renamed the **Fixed Header Height** setting to **Window Height Offset**, as it reserves window space for any fixed element on the page, not only a sticky header

= 2.15.26 =
* Added [`better_messages_push_notification`](https://www.better-messages.com/hooks/php-filters/#better_messages_push_notification) PHP filter — change the link, title and text of push notifications on every delivery path
* Added [`better_messages_mobile_push_content`](https://www.better-messages.com/hooks/php-filters/#better_messages_mobile_push_content) PHP filter — change the wording of push notifications sent to the [native mobile app](https://www.better-messages.com/docs/category/mobile-app/)
* The messenger now opens on whichever tab is placed first at Settings → Mini Widgets → Layout, and the Conversations tab is now sortable like every other tab
* The collapsed side panel now keeps every tab usable as a vertical icon column, and on windows too narrow for the panel the tabs move to a strip at the top of the messenger
* Chat rooms now show unread and mention counters in the [chat rooms list](https://www.better-messages.com/docs/features/chat-rooms/)
* The Messages tab of the side panel and the mobile tab bar now shows an unread counter, configurable at Settings → Mini Widgets → Conversations
* The open conversation is now highlighted in every side panel list
* Fixed moderation in [presence-based chat rooms](https://www.better-messages.com/docs/features/chat-rooms/#chat-room-types) — muting, banning and appointing moderators no longer fail with a permissions error, and bans and mutes are now enforced
* Fixed the muted and banned lists of a conversation returning expired bans and restrictions of other conversations
* Fixed the page scrolling to the chat on every conversation switch made from inside the messenger
* Fixed the **Participants List Order** setting being ignored by the online users sidebar and the participants list of presence-based rooms
* Fixed online counters not including the viewer right after logging in
* Fixed the browser tab title being emptied when an SEO plugin or theme outputs the title tag after the plugin scripts
* Fixed starting an [end-to-end encrypted](https://www.better-messages.com/docs/websocket/e2e-encryption/) conversation failing with a "not on your friends list" error when messaging was restricted to friends or followers
* Fixed a new end-to-end encrypted conversation losing its encryption when the first message was held by [pre-moderation](https://www.better-messages.com/docs/features/pre-moderation/) — encrypted conversations now always skip the moderation queue
* Fixed [AI chat bot](https://www.better-messages.com/docs/features/ai-chat-bots/) replies occasionally left as unformatted, cut-off or garbled text after streaming finished, most often in the [native mobile app](https://www.better-messages.com/docs/category/mobile-app/)
* Fixed tapping a shared YouTube or Vimeo video navigating the page to the video site instead of playing it — video players are now sandboxed, adjustable with the [`better_messages_embed_sandbox`](https://www.better-messages.com/hooks/php-filters/#better_messages_embed_sandbox) PHP filter
* Fixed links typed with a capitalised address, such as the `Https://` phone keyboards produce, not being replaced by their preview
* Fixed shared videos refusing to play in the [mobile app](https://www.better-messages.com/docs/category/mobile-app/) on iPhone and iPad — video services now require the address of the embedding page, which an app cannot provide, so players are loaded through a small page served from your own site
* Fixed a conversation opening as an empty messenger when one of its messages quoted HTML or JSX source code, most often an [AI chat bot](https://www.better-messages.com/docs/features/ai-chat-bots/) reply — code in messages is now always shown as text
* User statuses, call messages and end-to-end encryption notices of the WebSocket version are now translatable on WordPress.org
* Other minor bugfixes and improvements

= 2.15.25 =
* Added [`better_messages_thread_header_actions`](https://www.better-messages.com/hooks/js-filters/#better_messages_thread_header_actions) JavaScript filter — the conversation header buttons (calls, minimize, maximize, the More menu) are now built as a single filterable list, so custom buttons can be added at any position and the built-in ones can be reordered, removed or replaced. Until now the header had no supported extension point: a button inserted into it by hand was moved or removed again whenever the header re-rendered. Custom buttons pick up the styling of the built-in ones, and the same filter also runs for mini chat headers
* Added [`better_messages_fluent_community_group_chat_members`](https://www.better-messages.com/hooks/php-filters/#better_messages_fluent_community_group_chat_members) and [`better_messages_fluent_community_course_chat_members`](https://www.better-messages.com/hooks/php-filters/#better_messages_fluent_community_course_chat_members) PHP filters — exclude specific users from the automatic membership sync of [FluentCommunity](https://www.better-messages.com/docs/integrations/fluentcommunity/) Space and Course group chats: user IDs removed by the filter are taken out of the chat by the sync itself and are no longer re-added by later enrollment events
* Fixed YouTube videos shared in messages staying locked inside the message bubble on iPhone and iPad — tapping one now opens the full screen player again, as it did before YouTube changed the default playback behaviour of its embeds
* Fixed link previews showing raw HTML codes such as `&amp;` in titles, and dropping the thumbnail when the image address contained one
* Link previews now also find the page title when it is spread over several lines or carries attributes, and can no longer be spoofed by markup hidden inside a page's scripts
* The minimum required WordPress version is now 6.3, matching what the Better Messages blocks have needed since they were introduced
* Added **Button Icon** setting at Settings → Mobile → Floating Chat Button — choose a preset icon or paste your own SVG for the floating chat button on mobile, which previously always used the built-in messages icon with no way to change it
* Fixed the "Chatting as" persona banner in the Houzez and RealHomes integrations briefly appearing to the other side of the conversation and vanishing from the persona side's own view while messages were delivered in the WebSocket version — viewer-specific conversation details are no longer part of the shared realtime payloads
* Other minor bugfixes and improvements

= 2.15.20 - 2.15.24 =
* Added [**Chat Room Moderators**](https://www.better-messages.com/docs/features/chat-rooms/#moderators) — assign per-room moderators in the chat room editor: moderators can remove, mute and ban participants of their room, can reply while the room is closed, and see the participants list even when it is hidden from regular members
* Added **Moderators can add participants** per-room setting — moderators get an "Add new participants" action right in the chat interface, so room membership can be managed without contacting site administrators
* Added [**Presence-based chat rooms**](https://www.better-messages.com/docs/features/chat-rooms/#chat-room-types) (WebSocket version) — a new chat room type where participants are only the users currently in the room: closing the page or navigating away removes them immediately, no membership is stored, and the participants list always shows who is really present
* Added per-room **Group video calls** and **Group audio calls** toggles to chat room settings — disable group calls in specific chat rooms while keeping them enabled globally
* Added [**Website Context**](https://www.better-messages.com/docs/features/ai-content-moderation/#website-context) setting to AI Content Moderation — describe what your website is used for and Better Messages Moderation AI will judge messages by your community norms, fixing overly aggressive moderation on dating sites and similar communities
* Added [**Roles that can send Bulk Messages**](https://www.better-messages.com/docs/features/mass-messaging/#permissions) setting — allow selected roles (for example HR or communications staff) to send bulk messages from the Administration page without full administrator access: they see and manage only their own bulk messages and cannot send on behalf of another user
* Added [**Roles that can access Administration**](https://www.better-messages.com/docs/features/site-moderators/) setting — grant selected roles the Administration page and site-wide moderation powers without full administrator access, replacing the need for a role editor plugin to assign the moderation capability
* Added [**Markdown support**](https://www.better-messages.com/docs/features/markdown-support/) to **Bulk Messages** — the bulk message editor now understands the same Markdown syntax as regular chat messages, so headings, bullet and numbered lists and links typed in the editor are delivered formatted
* Site administrators can now add participants to any regular chat room directly from the chat interface
* Fixed chat room moderators being unable to send messages in closed chat rooms
* Chat room moderators are never removed by **Auto exclude users** or **Auto-remove inactive participants**
* Fixed the [**Chat Rooms**](https://www.better-messages.com/docs/features/chat-rooms/) list showing only the first 100 rooms — rooms now load page by page as you scroll, search covers every room you have access to, and rooms you were added to are no longer missing from the list on sites with many chat rooms
* Fixed the [**Browser push notifications**](https://www.better-messages.com/docs/websocket/web-push/) opt-in missing from the messenger user settings on sites where the email notification interval was set to 0 and **Sound Notification Control** was disabled, leaving users with no way to subscribe to web push
* Added [`better_messages_onesignal_integration`](https://www.better-messages.com/hooks/php-filters/#better_messages_onesignal_integration) PHP filter — return `false` to fully disable the [OneSignal integration](https://www.better-messages.com/docs/integrations/onesignal/), including the script which associates WordPress user IDs with OneSignal subscriptions
* Added **Open online users list by default** per-room setting (WebSocket version) — when the online users sidebar is enabled, it can open automatically when users enter the chat room on desktop
* Added [**GTranslate**](https://www.better-messages.com/docs/integrations/gtranslate/) integration — on GTranslate paid plans the messenger interface now follows the language of the page the visitor is on, instead of staying in the site default language on every translated sub-domain or sub-directory
* WebSocket version now stops AJAX fallback polling by default — when a visitor's WebSocket connection cannot be established, their browser makes a single sync request per page load instead of polling the server every few seconds. The new [**Continuous Fallback Mode**](https://www.better-messages.com/docs/websocket/continuous-fallback-mode/) setting restores continuous fallback polling for the rare setups that need it, such as audiences behind country-level firewalls that block WebSocket traffic
* Improved settings page mobile menu layout
* Other minor bugfixes and improvements

= 2.15.13 - 2.15.19 =
* Added [**Automatic Message Cleanup**](https://www.better-messages.com/docs/features/chat-rooms/#automatic-message-cleanup) for chat rooms
* Added [**Participants List Order**](https://www.better-messages.com/docs/features/chat-rooms/#participants-list-order) setting at Settings → Messaging → Group Conversation Settings
* Better Messages → Administration moderation area now showing message timestamps in the site timezone from Settings → General
* Fixed user badge icons (e.g. PeepSo VIP icons) showing as HTML code instead of images in WP Admin user lists
* Fixed user badge icons (e.g. PeepSo VIP icons) appearing as raw HTML code in moderation and report email notifications
* Fixed encrypted conversations staying locked forever after a participant reset their encryption keys — the conversation key is now reliably re-shared as soon as any other participant visits the site or unlocks their encryption keys
* Fixed MasterStudy mobile bottom menu bar showing through the full-screen messenger on the student dashboard
* Fixed Better Messages mobile floating chat button and new-message notification being hidden behind the MasterStudy bottom menu bar on account pages
* Fixed SureDash integration message button on member profiles opening the messages page without starting a conversation with the selected member
* PeepSo integration: members banned in PeepSo can no longer send messages or start new conversations in Better Messages
* PeepSo integration: group chats are now accessible to group members only
* Fixed messenger failing to load with error 500 — infinite loop when an encrypted conversation awaiting encryption key sharing was deleted or no longer accessible
* Update Freemius SDK to 2.13.4
* Banned members in chat room cant join group video and audio calls anymore
* Added [**Weglot**](https://www.better-messages.com/docs/integrations/weglot/) integration — the messenger interface now automatically follows the current Weglot language on multilingual sites
* Added `better_messages_i18n_locale` filter to control which language the messenger interface loads
* Fixed fatal PHP error (allowed memory size exhausted) when opening or starting a private conversation on sites with a very large accumulated history of no-reply bulk messages
* Fixed the LMS **Courses** tab (LearnPress, LearnDash, MasterStudy, TutorLMS, FluentCommunity) not showing in the mobile tab bar even when enabled — it now appears on mobile devices as it does on desktop
* Fixed MOV videos not playing in Safari on iPhone, iPad and macOS when **File Protection Proxy** is enabled
* Fixed OneSignal JavaScript error
* Other minor bugfixes and improvements

= 2.15.9 - 2.15.12 =
* Migration to new [Roadmap](https://www.better-messages.com/roadmap/)
* Added **Shortcode Builder** — visual admin tool at Settings → Shortcodes that configures the [`[better_messages_live_chat_button]`](https://www.better-messages.com/docs/shortcodes/better_messages_live_chat_button/) shortcode without code.
* Added initial [BuddyBoss ReadyLaunch theme](https://www.better-messages.com/docs/integrations/buddyboss/#buddyboss-readylaunch) integration
* Added new BuddyBoss settings group at Better Messages → Settings → Integrations → BuddyPress — separate **Full-page messenger**, **Full Width**, **Page Title**, and **Hide Mini Widget on Messages Page** toggles for the ReadyLaunch theme and the classic BuddyBoss Theme
* Fixed FluentCommunity integration script throwing `Cannot read properties of null` on non-FluentCommunity pages
* Hide the messenger Minimize button on the FluentCommunity `/messages` route — the mini widgets are hidden there, so minimize had no surface to restore from
* Fixed image download from the lightbox opening a stuck Quick Look preview when Better Messages is used in an iPhone PWA — now uses the native iOS share sheet
* Fixed guest authentication being silently dropped after long tab-idle periods in some websites
* Fixed BuddyBoss user-dropdown My Messages item not showing the unread counter on sites where the BuddyBoss Theme renders the user dropdown from a WordPress nav menu instead of the standard admin-bar nodes
* Fixed MultiVendorX vendor dashboard "Messages" sidebar link missing on some sites
* Fixed in-thread message Delivered tick rendering white in dark mode
* Added Settings → Integrations → WooCommerce → MultiVendorX toggle "Hide Messages tab when vendor disables live chat" — off by default
* Fixed the "Sound Notification Control" setting not hiding the sound mute toggle from user settings when disabled
* Fixed the [Guest Messages Page](https://www.better-messages.com/docs/features/guest-access/#guest-messages-page) rendering the raw `[bp-better-messages]` placeholder instead of the messenger when no main Messages Location page is set
* Fixed user avatars and names not loading for not-yet-registered guests in chat rooms and the mini widget
* Other minor bugfixes and improvements

= 2.15.8 =
* Fixed pages with the slug `messages` returning 404 on sites that use WooCommerce as the Messages Location
* Fixed the compact-sidebar hover tooltip lingering on the conversation screen after tapping an avatar on mobile
* Added [Guest Messages Page](https://www.better-messages.com/docs/features/guest-access/#guest-messages-page) setting
* Added per-thread participant override mechanism — addons can display a participant under a different name, avatar and profile URL inside one specific thread without touching their real WordPress identity elsewhere. Same WP user can wear different identities in different threads at the same time. See the [developer guide](https://www.better-messages.com/docs/development/guides/per-thread-fake-users/) for the reusable pattern
* Added initial [Houzez Real Estate Theme](https://www.better-messages.com/docs/integrations/houzez/) integration
* Added initial [RealHomes Real Estate Theme](https://www.better-messages.com/docs/integrations/realhomes/) integration
* Other minor bugfixes and improvements

= 2.15.7 =
* Added Send Message, Audio Call and Video Call buttons to the [PeepSo user hovercard](https://www.better-messages.com/docs/integrations/peepso/#user-hovercard)
* Added [emoji search translations](https://www.better-messages.com/docs/features/emoji-selector/#multilingual-search) — admin can download per-locale annotations so emoji picker search works in 30+ languages (e.g. German "gesicht" finds 😀)
* Optimized emoji and stickers data delivery
* Fixed guest users seeing their own name and avatar in one-on-one conversation headers, mini chat heads, and thread list previews instead of the other participant in some cases
* Fixed MasterStudy LMS account mobile bottom menu overlapping the chat on the Messages page in full-screen mobile view
* Other minor bugfixes and improvements

= 2.15.6 =
* Added JavaScript filter slots in the guest authentication screen — [`better_messages_auth_required_top`](https://www.better-messages.com/hooks/js-filters/#better_messages_auth_required_top), [`better_messages_auth_required_between`](https://www.better-messages.com/hooks/js-filters/#better_messages_auth_required_between), and [`better_messages_auth_required_bottom`](https://www.better-messages.com/hooks/js-filters/#better_messages_auth_required_bottom) — for injecting custom HTML into the pre-chat popup, mini-widget banner, and full messages page wall
* Added live unread counter badge to the BuddyBoss Theme profile dropdown Messages item
* Added Audio Call and Video Call buttons to the members directory and group member rows for both BuddyPress (Nouveau theme) and BuddyBoss Platform
* Added [`better_messages_group_call_join_custom_error`](https://www.better-messages.com/hooks/php-filters/#better_messages_group_call_join_custom_error) PHP filter for blocking group audio/video call join with a custom error message, mirroring the existing [`better_messages_call_join_custom_error`](https://www.better-messages.com/hooks/php-filters/#better_messages_call_join_custom_error) filter for 1-to-1 calls
* Settings → Integrations tab label and section titles now read "BuddyBoss" instead of "BuddyPress" when the BuddyBoss Platform is active
* Improved the bbPress reply Private Message link layout in BuddyBoss Theme
* Added initial [Motors – Car Dealer, Classifieds & Listing](https://www.better-messages.com/docs/integrations/motors/) integration
* Added initial [Classified Listing](https://www.better-messages.com/docs/integrations/classified-listing/) integration
* Other minor bugfixes and improvements

= 2.15.5 =
* Added per-role filter for the auto-remove inactive chat room participants feature, so an admin can target guests or other specific roles only and leave members untouched
* Fixed new chat room participants could be remove if auto-removal option is enabled for users who did not wrote any message in the chat room
* Fixed online participant count in the chat rooms list not updating in real time when a user joined or was added to a room
* Fixed some group chats threads could reappear after the admin deleted them
* Other minor bugfixes and improvements

= 2.15.3 =
* Added [System Messages](https://www.better-messages.com/docs/features/system-messages/)
* Added per-role restrictions for group calls — Settings → Group Calls → Group Call Restrictions lets admins block specific WordPress roles from starting and / or joining group audio and video calls
* Group calls are now available to guest visitors
* Added possibility to auto-remove inactive chat room participants
* Added possibility to enable group audio/video calls button in mini chats
* Added support for [LearnDash Instructor Role](https://www.learndash.com/instructor-role/) add-on
* Added shortcodes for every Send Message / Message Instructor button in the GeoDirectory, Directorist, LearnDash, LearnPress, Tutor LMS and MasterStudy LMS integrations, so they are possible to use with page builder. Check Integrations tab in plugin settings to find appropriate shortcode
* Reorganized Settings → General tab — added a Quick Actions dashboard with shortcuts to the Chat Rooms, AI Chat Bots and Administration screens and added easy access to detected integrations
* End to end encryption is moved to Messaging settings tab
* Fixed PHP 8.5 deprecation notices
* Fixed sticker images pointing to the previous site URL after a domain migration
* Fixed guest visitors being redirected to wp-login after starting a chat from a WooCommerce

= 2.15.2 =
* Added initial [MasterStudy LMS](https://www.better-messages.com/docs/integrations/masterstudy-lms/) integration
* Added initial [Directorist](https://www.better-messages.com/docs/integrations/directorist/) integration
* Added initial [GeoDirectory](https://www.better-messages.com/docs/integrations/geodirectory/) integration
* Remake database displaying in plugin settings which make it easier to fix database if something not migrated properly
* LMS course chats are now their own thread type in database
* Added "Email Notifications" and "Push Notifications" toggles for LMS course chats under Settings → Integrations → LMS → Shared Course Settings
* Other minor bugfixes and improvements

= 2.15.1 =
* Added initial [LearnPress](https://www.better-messages.com/docs/integrations/learnpress/) LMS integration
* Added initial [Tutor LMS](https://www.better-messages.com/docs/integrations/tutor-lms/) integration
* Added initial [LearnDash](https://www.better-messages.com/docs/integrations/learndash/) LMS integration
* Added [MultiVendorX 5.0+](https://www.better-messages.com/docs/integrations/multivendorx/) integration alongside the existing < 5.0 support
* Older MultiVendorX 4.x sites are unaffected — the previous integration continues to load on those installations
* Added FluentCommunity Courses integration
* Added a dedicated [Courses widget](https://www.better-messages.com/docs/features/mini-widgets/) to the Mini Widgets which will be showing user enrolled courses in LMS
* Added "Maximum Message Length" setting (Settings → Messaging) — cap the number of characters allowed in each message
* Other minor bugfixes and improvements

= 2.15.0 =
* Added three new [widgets](https://www.better-messages.com/docs/features/mini-widgets/): **Users** (browse and message any site member, with optional online-only filtering, online-first ordering, sort by last activity or registration date, and three display modes — all / by role / hand-picked), **AI Bots** (start or continue conversations with configured AI chat bots), and **Chat Rooms** (browse public chat rooms with optional online-count badge)
* Redesigned the Settings → Mini Widgets page into per-widget sub-tabs, with each widget exposing its own icon picker, search-box toggle, role restrictions matrix (mini bar / side panel / mobile bar), and widget-specific options
* Added "Hide Tab When Empty" toggle per widget — hides the Friends / Groups / AI Bots / Chat Rooms / Users tab entirely when the current user has nothing to show, instead of rendering an empty list
* Added AI Chat Bot [welcome message](https://www.better-messages.com/docs/features/ai-chat-bots/#welcome-message) — bots can greet users with a configurable opening message and placeholder
* Added dynamic [placeholders](https://www.better-messages.com/docs/features/ai-chat-bots/#placeholders) which allows to dynamically change ai chat bots system prompts and welcome messages
* Renamed [`better_messages_open_ai_bot_instruction`](https://www.better-messages.com/hooks/php-filters/#better_messages_ai_bot_instruction) filter to `better_messages_ai_bot_instruction` since it applies to all AI providers, and added new `$thread_id` and `$message_id` arguments so callbacks can read the conversation context and the triggering user message — the old name remains available as a deprecated alias
* Added per-message edit time limit — restrict how long users can edit their own messages after sending
* Fixed fatal error when uploading attachments at the bulk messages screen
* Fixed `hideParticipants` chat room setting being ignored when the attachments browser was enabled
* Fixed stale sticker suggestions remaining visible in the composer after a sticker was sent
* Fixed AI Chat Bots admin layout breaking on older PHP versions and removed a misleading missing-key error
* Fixed sticker pack "Add language" button appearing when no remaining locales were available
* Fixed reply form not being blocked for deleted conversations when PeepSo friendship filter was active
* Fixed Private Message button still showing in chat room user list and message context menu when "Hide New Conversation Button" was enabled
* Improved performance of reported-messages admin screen for sites with millions of messages — queries now scale cleanly instead of relying on transient caches
* Other minor bugfixes and improvements

= 2.14.16 =
* Making Stipop Sticker provider legacy as it increased price significantly since initial integration
* Added [built-in sticker packs system](https://www.better-messages.com/docs/features/stickers/) - create and manage your own sticker packs, with role-based access control and per-locale support
* Added 8 pre-created sticker packs which can be installed from plugin settings
* Added inline sticker suggestions — stickers are suggested as you type based on keywords if enabled in plugin settings
* Rebuilt [GIF integration](https://www.better-messages.com/docs/features/giphy-integration/) into multi-provider system with support for GIPHY and Klipy providers — select your preferred provider in Settings → Integrations
* Fixed pasted emojis being converted to WordPress emoji images in reply editor
* Other minor bugfixes and improvements

= 2.14.14 =
* Added [WooCommerce integration](https://www.better-messages.com/docs/integrations/woocommerce/) — adds contact buttons on product, cart, checkout, and order pages with configurable placement and recipient
    * Added Product Page contact button with 4 placement options (above/below summary, above/below add-to-cart) — works in both classic and block themes
    * Added Order Page contact button on My Account → View Order
    * Added Pre-purchase Help Button on cart and checkout pages
    * Added automatic cart snapshot — when a customer starts a chat from cart or checkout, the contents of their cart are auto-posted as a rich message in the conversation.
    * Added rich product cards in chat — plain WooCommerce product URLs pasted in any chat message are auto-expanded into rich cards with image, title, and price
    * Fixed bug where saving plugin settings could wipe registered rewrite endpoints (WooCommerce, BuddyPress, Better Messages) until permalinks were manually re-saved
* Removed hardcoded logo width and height in the email notifications template
* Other minor bugfixes and improvements

= 2.14.13 =
* Added new "Floating Bubble" display style for mini widgets — replaces the classic bottom tab bar with a circular button that expands into a chat panel on click
* Added "Bubble Chat Heads" option — shows recently closed conversations as avatar bubbles stacked above the floating bubble button (similar to Messenger chat heads), with hover tooltips showing thread name, time, and last message preview
* Added Bubble Icon picker in admin settings
* Added customizer controls for bubble button and chat head sizes and roundness
* Added smooth open/close/transition animations for mini widgets, bubble panel, and chat heads (can be disabled in admin settings)
* Fixed bug where photos uploaded from iOS could appear rotated in chat — caused by buggy EXIF orientation handling in iOS Safari's createImageBitmap
* Fixed bug where the "Select Logo" button on the Email template settings page did nothing because the WordPress media library was not enqueued
* Other minor bugfixes and improvements

= 2.14.11 - 2.14.12 =
* Added [Better Messages Translation AI](https://www.better-messages.com/docs/features/ai-message-translation/) — automatic message translation for 1-to-1 conversations
* Added [Better Messages Transcription AI](https://www.better-messages.com/docs/websocket/cloud-ai/) — voice message transcriptions
* Added Test [Callback URL](https://www.better-messages.com/docs/websocket/cloud-ai/#callback-url) button to the Settings page in the WebSocket version, which allows testing the callback URL for the Better Messages Cloud AI
* Initial integration with [WordPress Abilities API](https://www.better-messages.com/docs/ai-mcp/ai-mcp-integration/), which allows using MCP and AI
* Fixed bug with AI Chat Bots not allowing to select model if no global api key setting
* Fixed bug with attachments being sent to previously opened conversation when using "Send now" button in the file uploader popup
* Fixed bug where disabling End-to-End Encryption would lock users out of previously encrypted conversations and prevent starting new ones with the same participants when the Single Conversation Per Recipient option is enabled
* Other minor bugfixes and improvements

= 2.14.8 - 2.14.10 =
* Initial release of Better Messages Cloud AI
* Added [Better Messages Moderation AI](https://www.better-messages.com/docs/features/ai-content-moderation/) — included with WebSocket license at no additional cost, no third-party API keys required.
    * Cloud-powered content moderation with extended categories, custom rules, and conversation context awareness
    * Added AI moderation provider selection: choose between OpenAI Moderation API and Better Messages Moderation AI
    * Added custom moderation rules — define your own rules in plain text (e.g. block contact sharing, promotions)
    * Added conversation context for AI moderation — detect patterns like phone numbers split across multiple messages
    * Added 10 new moderation categories for Better Messages AI: spam, scam/phishing, minor safety, contact sharing, profanity, impersonation, doxxing, drugs/alcohol, threats, commercial promotion
* Translations now loaded as cacheable external file instead of inline scripts to make it more efficient
* Added ability to open and close chat rooms
* Added chat room management actions: duplicate, clear messages, remove all participants
* Fixed PeepSo Notifications Popup overlapping Better Messages Popup
* Fixed PeepSo Vip Icons displaying incorrectly in administration panel
* Reworked reactions selector displaying as they became a bit jumpy, especially on mobile devices
* Improved database reset detection and connection timeout for settings changes
* Added FluentCommunity Spaces integration for groups widgets (mini widgets, side panel tabs, mobile tabs)
* It's now possible to find users by email in admin user search
* Fixed PHP warning for undefined 'lang' key in mobile device registration
* Improved SharedWorker reconnect, plugin updates no longer require page reload
* Updated Freemius SDK to latest version
* Other minor bugfixes and improvements

[Full changelog history] (https://www.better-messages.com/changelog/)

== Upgrade Notice ==

= 3.0.0 =
A full redesign: a rebuilt Appearance tab with live preview, location and video messages, per-conversation translation, and the Mobile App page out of alpha. CSS classes and script filenames changed — update custom CSS and caching exclusion lists. The Customizer is gone, but its colors carry over.
