From 071e48497b002fca0c1b55c70b30415ad2471d2c Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Mon, 16 Sep 2024 08:16:33 -0400 Subject: [PATCH 1/7] V10.0 Docs (#7342) * Update conf.py * Added missing mobile app performance metrics link * Removed feature flag references to MM_FEATUREFLAGS_GLOBALDRAFTS in favour of server-side config setting * Added mobile FAQ re: gathering app logs * Playbooks v1 vs v2 clarifications (#7394) * Playbooks v1 vs v2 clarifications * Update source/guides/repeatable-processes.rst Co-authored-by: Eric Sethna <14333569+esethna@users.noreply.github.com> --------- Co-authored-by: Eric Sethna <14333569+esethna@users.noreply.github.com> * v10.0 changelog (#7345) * Update mattermost-server-releases.md * Update open-source-components.rst * Update download-latest-tarball.rst * Update mattermost-v10-changelog.md * Update mattermost-server-releases.md * Update mattermost-v10-changelog.md * Update deprecated-features.rst * Update important-upgrade-notes.rst * Update deprecated-features.rst * Update mattermost-v10-changelog.md * Update important-upgrade-notes.rst * Apply suggestions from code review Co-authored-by: Jesse Hallam * Update mattermost-v10-changelog.md * Apply suggestions from code review * Update important-upgrade-notes.rst * Update mattermost-v10-changelog.md * Update source/about/deprecated-features.rst Co-authored-by: Ben Schumacher * Update mattermost-v10-changelog.md * Update important-upgrade-notes.rst * Update source/about/deprecated-features.rst Co-authored-by: Ben Schumacher * Update source/about/mattermost-v10-changelog.md Co-authored-by: Ben Schumacher * Update important-upgrade-notes.rst * Update mattermost-v10-changelog.md * Update important-upgrade-notes.rst * Update mattermost-v10-changelog.md * Update mattermost-v10-changelog.md * Update important-upgrade-notes.rst * Update mattermost-v10-changelog.md * Update mattermost-v10-changelog.md * Update mattermost-v10-changelog.md * Update mattermost-v10-changelog.md * Update mattermost-v10-changelog.md * Update deprecated-features.rst * Update mattermost-v10-changelog.md * Update important-upgrade-notes.rst * Update mattermost-v10-changelog.md * Update mattermost-v10-changelog.md * Update important-upgrade-notes.rst * Update mattermost-v10-changelog.md --------- Co-authored-by: Jesse Hallam Co-authored-by: Ben Schumacher * Update mattermost-v10-changelog.md * Update mattermost-v10-changelog.md * Added shard replica guidance for Channel, Post, and User (#7389) * Docs listening v10 enhancements (#7379) * Added availability names in text & removed classes from icons * Deprecated API team, user, and channel deletion configs from experimental * Updated Desktop app MSI URL to match standard offerings via GH * Added important note re: rate limiting settings intended for smaller deployments * Added connecting link betwn admin notification management & end user preferences * Converted Export User note to subsection * Added DND/outside reg hours warning for DMs (#7388) * Support packet HA aware note update (#7390) * Added MaximumPayloadSizeBytes config setting (#7391) * Clarified the need to purge before indexing (#7398) * Doc'd prepkg'd plugin install paths & cloud-available list (#7387) * Doc'd prepkg'd plugin install paths & cloud-available list * RST syntax updates * Calls updates for v10 (#7395) * Calls updates for v10 * Simplification for preferences & Calls pref * Editorial updates * Update source/preferences/customize-your-channel-sidebar.rst * Update source/preferences/manage-your-display-options.rst * Update source/preferences/manage-your-display-options.rst * Editorial fixes * Update mattermost-server-releases.md --------- Co-authored-by: Carrie Warner (Mattermost) <74422101+cwarnermm@users.noreply.github.com> Co-authored-by: Eric Sethna <14333569+esethna@users.noreply.github.com> Co-authored-by: Jesse Hallam Co-authored-by: Ben Schumacher --- source/about/cloud-dedicated.rst | 5 +- source/about/cloud-shared.rst | 7 +- source/about/cloud-supported-integrations.rst | 16 +++ source/about/deprecated-features.rst | 10 ++ source/about/faq-license.rst | 2 +- source/about/integrations.rst | 31 ++--- source/about/mattermost-server-releases.md | 1 + source/about/mattermost-v10-changelog.md | 107 ++++++++++++++++-- source/collaborate/channel-types.rst | 4 + source/collaborate/install-desktop-app.rst | 2 +- source/collaborate/make-calls.rst | 6 +- source/collaborate/send-messages.rst | 6 +- source/conf.py | 6 +- source/configure/calls-deployment.rst | 10 +- .../deprecated-configuration-settings.rst | 43 +++++++ .../elasticsearch-configuration-settings.rst | 49 +++++--- .../experimental-configuration-settings.rst | 66 ----------- source/configure/manage-user-surveys.rst | 21 ++-- .../rate-limiting-configuration-settings.rst | 8 +- .../reporting-configuration-settings.rst | 7 +- ...user-management-configuration-settings.rst | 14 ++- .../web-server-configuration-settings.rst | 18 +++ source/deploy/mobile-faq.rst | 4 + source/guides/integrate-and-extend.rst | 3 +- source/guides/preferences.rst | 2 + source/guides/repeatable-processes.rst | 4 + source/install/download-latest-tarball.rst | 2 +- .../microsoft-calendar-interoperability.rst | 16 ++- .../microsoft-teams-interoperability.rst | 4 + ...rosoft-teams-meetings-interoperability.rst | 18 ++- .../playbooks-for-microsoft-teams.rst | 4 +- source/manage/common-support-packet.rst | 3 +- source/manage/mmctl-command-line-tool.rst | 9 -- source/manage/telemetry.rst | 2 +- .../customize-your-channel-sidebar.rst | 2 +- source/preferences/customize-your-theme.rst | 17 ++- .../preferences/manage-advanced-options.rst | 2 +- .../manage-your-calls-preferences.rst | 14 +++ .../manage-your-display-options.rst | 34 +++--- .../manage-your-sidebar-options.rst | 8 +- .../set-your-status-availability.rst | 16 ++- ...eus-grafana-for-performance-monitoring.rst | 1 + source/scale/elasticsearch.rst | 5 + source/upgrade/important-upgrade-notes.rst | 32 +++++- source/upgrade/open-source-components.rst | 2 + 45 files changed, 443 insertions(+), 200 deletions(-) create mode 100644 source/about/cloud-supported-integrations.rst create mode 100644 source/preferences/manage-your-calls-preferences.rst diff --git a/source/about/cloud-dedicated.rst b/source/about/cloud-dedicated.rst index 7febdc2725f..b08205c5bbc 100644 --- a/source/about/cloud-dedicated.rst +++ b/source/about/cloud-dedicated.rst @@ -90,7 +90,10 @@ Mattermost Cloud Dedicated provides access to :doc:`audit and system logs `_. See the :ref:`plugins ` documentation for details on supported plugins in Mattermost Cloud deployments. +Approved plugins developed and/or tested by Mattermost are supported and available in the `Mattermost Cloud Marketplace `_, including: + +.. include:: ./cloud-supported-integrations.rst + :start-after: :nosearch: Migrate from a self-hosted instance ------------------------------------ diff --git a/source/about/cloud-shared.rst b/source/about/cloud-shared.rst index c0209d2308a..3d14265583c 100644 --- a/source/about/cloud-shared.rst +++ b/source/about/cloud-shared.rst @@ -90,7 +90,12 @@ Mattermost Cloud Dedicated provides access to :doc:`audit and system logs `_. Custom plugins and integrations outside of Mattermost Marketplace aren’t currently supported. See the :ref:`plugins ` documentation for details on supported plugins in Mattermost Cloud deployments. +Approved plugins developed and/or tested by Mattermost are supported and available in the `Mattermost Cloud Marketplace `_, including: + +.. include:: ./cloud-supported-integrations.rst + :start-after: :nosearch: + +Custom plugins and integrations outside of Mattermost Marketplace aren’t currently supported. Migrate from a self-hosted instance ------------------------------------ diff --git a/source/about/cloud-supported-integrations.rst b/source/about/cloud-supported-integrations.rst new file mode 100644 index 00000000000..0e382b4c22a --- /dev/null +++ b/source/about/cloud-supported-integrations.rst @@ -0,0 +1,16 @@ +:orphan: +:nosearch: + +- :ref:`Mattermost Calls ` +- :doc:`Mattermost Copilot ` +- :doc:`Mattermost for Microsoft Teams ` interoperability +- :doc:`Mattermost Playbooks ` +- :doc:`Microsoft Calendar ` interoperability +- :doc:`Microsoft Teams Meetings ` interoperability +- :doc:`GitHub ` interoperability +- :doc:`GitLab ` interoperability +- :doc:`Jira ` interoperability +- :doc:`ServiceNow ` interoperability +- :doc:`User Survey ` integration +- :doc:`User satisfaction surveys ` +- :doc:`Zoom ` \ No newline at end of file diff --git a/source/about/deprecated-features.rst b/source/about/deprecated-features.rst index a2d1218ec74..524e9b1c289 100644 --- a/source/about/deprecated-features.rst +++ b/source/about/deprecated-features.rst @@ -19,6 +19,16 @@ Mattermost Server v10.2.0 Removed features by Mattermost version ---------------------------------------- +Mattermost Server v10.0.0 +~~~~~~~~~~~~~~~~~~~~~~~~~ + +- We no longer support new installations using MySQL starting in v10. All new customers and/or deployments will only be supported with the minimum supported version of the PostgreSQL database. End of support for MySQL is targeted for Mattermost v11. +- Apps Framework is deprecated for new installs. Please extend Mattermost using webhooks, slash commands, OAuth2 apps, and plugins. +- Fully deprecated the ``/api/v4/image`` endpoint when the image proxy is disabled. +- Removed deprecated ``Config.ProductSettings``, ``LdapSettings.Trace``, and ``AdvancedLoggingConfig`` configuration fields. +- Removed deprecated ``pageSize`` query parameter from most API endpoints. +- Deprecated the experimental Strict CSRF token enforcement. This feature will be fully removed in Mattermost v11. + Mattermost Server v9.9.0 ~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/source/about/faq-license.rst b/source/about/faq-license.rst index f5686a5cb32..df7f1e11074 100644 --- a/source/about/faq-license.rst +++ b/source/about/faq-license.rst @@ -263,7 +263,7 @@ Rebranding Copyright and Licensing of ``/mattermost`` open source code ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -- Compiling and distributing your own version of the open source Mattermost ``/mattermost`` repo requires a) compliance with licenses in the repo, including `NOTICE.txt `_, and b) the compiled version of the ``/mattermost`` source code should have the same open source license as the source code, `per our licensing policy `_. +- Compiling and distributing your own version of the open source Mattermost ``/mattermost`` repo requires a) compliance with licenses in the repo, including `NOTICE.txt `_, and b) the compiled version of the ``/mattermost`` source code should have the same open source license as the source code, :doc:`per our licensing policy `. Other considerations ^^^^^^^^^^^^^^^^^^^^ diff --git a/source/about/integrations.rst b/source/about/integrations.rst index 7272320b2fb..177c9e9de59 100644 --- a/source/about/integrations.rst +++ b/source/about/integrations.rst @@ -3,7 +3,7 @@ Integrations overview Mattermost provides a variety of methods to add functionality and customize the end-user experience to suit your organization’s needs, whether you want to add new user capabilities with slash commands, build an advanced chatbot, or completely change the functionality of your server. -A wide array of open source integrations are available and ready to use from Mattermost and our community. To see a list of open source integrations please see the `Mattermost Marketplace `__. +A wide array of open source integrations are available and ready to use from Mattermost and our community. To see a list of open source integrations please see the `Mattermost Marketplace `_. For self-hosted deployments in small setups, you might host integrations on the same server on which Mattermost is installed. For larger deployments, you can set up a separate server for integrations, or add them to the server on which the external application is hosted. For example, if you’re self-hosting a Jira server, you could deploy a Jira integration on the Jira server itself. When self-hosting restrictions are less strict, AWS, Heroku, and other public cloud options can also be used. @@ -14,42 +14,43 @@ Custom Apps Apps are lightweight, interactive add-ons that can be written in any language and run on any HTTP-compatible hosting service. They enable you to connect with external services and build interactions that users can easily follow and work across the Mattermost web app, desktop app, and mobile app. -Prebuilt apps are available on the `Mattermost Marketplace `__. +Prebuilt apps are available on the `Mattermost Marketplace `_. API ---- -Mattermost provides complete access to `server APIs `__, along with language-specific drivers to integrate into your own applications. Interact with users, channels, and everything else that happens on your Mattermost server via a REST API that meets the OpenAPI specification. The API is for developers who want to build bots and other interactions that don’t rely on customizing the Mattermost user experience. - -`View the Mattermost API Reference `__. +Mattermost provides complete access to `server APIs via the Mattermost API Reference `_, along with language-specific drivers to integrate into your own applications. Interact with users, channels, and everything else that happens on your Mattermost server via a REST API that meets the OpenAPI specification. The API is for developers who want to build bots and other interactions that don’t rely on customizing the Mattermost user experience. Plugins ------- Plugins are the most comprehensive way to add new features and customization to self-hosted Mattermost deployments. These powerful integrations are written in Go and React and they’re ideal for customers wanting to change the behavior of the Mattermost server, desktop, and web apps without forking the core codebase to suit their organization’s needs. -Prebuilt plugins are available on the `Mattermost Marketplace `__, or you can `build your own plugin `__. +Prebuilt plugins are available on the `Mattermost Marketplace `_, or you can `build your own plugin `_. .. note:: - - :doc:`Mattermost Cloud Dedicated ` customers supports custom Mattermost plugin uploads. - - Custom Mattermost plugins aren't available in :doc:`Mattermost Cloud Shared ` deployments. You're limited to the plugins available in the Cloud Marketplace, including: :ref:`Mattermost Calls `, :doc:`Mattermost Copilot `, :doc:`GitHub ` interoperability, :doc:`GitLab ` interoperability, :doc:`Jira ` interoperability, :doc:`Playbooks `, :doc:`ServiceNow ` interoperability, :doc:`user satisfaction surveys `, and :doc:`Zoom `. + - :doc:`Mattermost Cloud Dedicated ` customers supports custom Mattermost plugin uploads. + - Custom Mattermost plugins aren't available in :doc:`Mattermost Cloud Shared ` deployments. You're limited to the plugins available in the Cloud Marketplace, including: + + .. include:: ./cloud-supported-integrations.rst + :start-after: :nosearch: Bots ----- You can deploy interactive bots to help users with processes and tasks with Mattermost by issuing messages to users they can respond to using buttons and dropdown menus. Bots can be used together with apps and plugins. The Hubot open source project, created by GitHub, Inc., is among the most popular of the bot options. -Prebuilt bots are available on the `Mattermost Marketplace `__, or you can `configure your own bots `__. +Prebuilt bots are available on the `Mattermost Marketplace `_, or you can `configure your own bots `_. -Learn about `Mattermost Hubot integration (hubot-matteruser on npm) `__ and `other open source community bots available `__ or you can `build your own `__. +Learn about `Mattermost Hubot integration (hubot-matteruser on npm) `_ and `other open source community bots available `_ or you can `build your own `_. Custom slash commands --------------------- -A :doc:`slash command ` is similar to an `outgoing webhooks `__, but instead of listening to a channel, it's used as a command tool in a channel. +A :doc:`slash command ` is similar to an `outgoing webhooks `_, but instead of listening to a channel, it's used as a command tool in a channel. -Slash commands enable users to trigger custom actions, such as creating Jira tickets or GitHub pull requests within Mattermost channels. See the :doc:`built-in slash commands ` product documentation and the `custom slash command `__ developer documentation to learn more. +Slash commands enable users to trigger custom actions, such as creating Jira tickets or GitHub pull requests within Mattermost channels. See the :doc:`built-in slash commands ` product documentation and the `custom slash command `_ developer documentation to learn more. .. tip:: The Mattermost slash command format is compatible with Slack's format, so you can easily port commands from Slack. @@ -57,9 +58,9 @@ Slash commands enable users to trigger custom actions, such as creating Jira tic Webhooks -------- -A webhook is a way for one app to send real-time data to another app. In Mattermost, `incoming webhooks `__ receive data from external applications and make a post in a specified channel. They’re great for setting up notifications when something happens in an external application. +A webhook is a way for one app to send real-time data to another app. In Mattermost, `incoming webhooks `_ receive data from external applications and make a post in a specified channel. They’re great for setting up notifications when something happens in an external application. -`Outgoing webhooks `__ take data from Mattermost, and send it to an external application. Then the outgoing webhook can post a response back in Mattermost. They’re great for listening in on channels, and then notifying external applications when a trigger word is used. +`Outgoing webhooks `_ take data from Mattermost, and send it to an external application. Then the outgoing webhook can post a response back in Mattermost. They’re great for listening in on channels, and then notifying external applications when a trigger word is used. .. tip:: @@ -71,4 +72,4 @@ Source code customizations -------------------------- As an open source project, we support your ability to modify the source code for the server or web app to make changes and customizations to meet your specific needs. -Learn about `forking our open source repositories `__. +Learn about `forking our open source repositories `_. diff --git a/source/about/mattermost-server-releases.md b/source/about/mattermost-server-releases.md index 59b838cb45d..94ff657e0ee 100644 --- a/source/about/mattermost-server-releases.md +++ b/source/about/mattermost-server-releases.md @@ -19,6 +19,7 @@ Mattermost releases a new server version on the 16th of each month in [binary fo | **Release** | **Released on** | **Support ends** | |:---|:---|:---| +| v10.0 [Download](https://releases.mattermost.com/10.0.0/mattermost-10.0.0-linux-amd64.tar.gz) \| {ref}`Changelog ` | 2024-09-16 | 2024-12-15 | | v9.11 [Download](https://releases.mattermost.com/9.11.1/mattermost-9.11.1-linux-amd64.tar.gz) \| {ref}`Changelog ` | 2024-08-16 | 2025-05-15 {ref}`EXTENDED ` | | v9.10 [Download](https://releases.mattermost.com/9.10.2/mattermost-9.10.2-linux-amd64.tar.gz) \| {ref}`Changelog ` | 2024-07-16 | 2024-10-15 | | v9.9 [Download](https://releases.mattermost.com/9.9.3/mattermost-9.9.3-linux-amd64.tar.gz) \| {ref}`Changelog ` | 2024-06-14 | 2024-09-15 | diff --git a/source/about/mattermost-v10-changelog.md b/source/about/mattermost-v10-changelog.md index f7415dd593a..302ec4b7dd0 100644 --- a/source/about/mattermost-v10-changelog.md +++ b/source/about/mattermost-v10-changelog.md @@ -7,17 +7,108 @@ Support for Mattermost Server v9.5 [Extended Support Release](https://docs.matte - See the [changelog in progress](https://bit.ly/2nK3cVf) for details about the upcoming release. ``` -(release-v10.0-feature-release)= -## Release v10.0 - Major Release +(release-v10.0-major-release)= +## Release v10.0 - [Major Release](https://docs.mattermost.com/about/release-policy.html#release-types) **Release day: 2024-09-16** -More information on this Mattermost major release coming soon. See the {doc}`Mattermost release policy ` documentation for details on {ref}`release types `. +### Important Upgrade Notes + - We no longer support new installations using MySQL starting in v10. All new customers and/or deployments will only be supported with the minimum supported version of the PostgreSQL database. End of support for MySQL is targeted for Mattermost v11. + - Apps Framework is deprecated for new installs. Please extend Mattermost using webhooks, slash commands, OAuth2 apps, and plugins. + - Mattermost v10 introduces Playbooks v2 for all Enterprise licensed customers. New Playbooks features and security updates will only be added to Playbooks v2 moving forward; however, Playbooks v1 will be maintained for Team Edition and Professional instances running [supported v9.x Mattermost server releases](https://docs.mattermost.com/about/mattermost-server-releases.html). + - Renamed ``Channel Moderation`` to ``Advanced Access Control`` in the channel management section in the **System Console**. + - Renamed announcement banner feature to “system-wide notifications”. + - Renamed “Collapsed Reply Threads” to “Threaded Discussions” in the System Console. + - Renamed “System Roles” to “Delegated Granular Administration” in the System Console. + - Renamed "Office 365" to "Entra ID" for SSO logins. + - Fully deprecated the ``/api/v4/image`` endpoint when the image proxy is disabled. + - Pre-packaged Calls plugin [v1.0.1](https://github.com/mattermost/mattermost-plugin-calls/releases/tag/v1.0.1). This includes breaking changes such as allowing calls in direct message channels only on unlicensed servers. + - Removed deprecated ``Config.ProductSettings``, ``LdapSettings.Trace``, and ``AdvancedLoggingConfig`` configuration fields. + - Removed deprecated ``pageSize`` query parameter from most API endpoints. + - Deprecated the experimental Strict CSRF token enforcement. This feature will be fully removed in Mattermost v11. -### Upcoming Breaking Changes in v10.0 Release +```{Important} +If you upgrade from a release earlier than v9.11, please read the other [Important Upgrade Notes](https://docs.mattermost.com/upgrade/important-upgrade-notes.html). +``` + +### Highlights + +#### Mattermost Microsoft Teams Plugin + - Pre-packaged the Microsoft Teams plugin for Mattermost, [v2.0.3](https://github.com/mattermost/mattermost-plugin-msteams/releases/tag/v2.0.3). + +#### Mattermost Microsoft Calendar and Microsoft Teams Meetings Plugins + - Pre-packaged Microsoft Calendar [v1.3.4](https://github.com/mattermost/mattermost-plugin-mscalendar/releases/tag/v1.3.4) and Microsoft Teams Meetings [v2.2.0](https://github.com/mattermost-community/mattermost-plugin-msteams-meetings/releases/tag/v2.2.0) plugins. + +#### Mattermost Copilot GA + - Pre-packaged Mattermost Copilot plugin version [v1.0.0](https://github.com/mattermost/mattermost-plugin-ai/releases/tag/v1.0.0). + +### Improvements + +#### User Interface (UI) + - Pre-packaged Calls plugin [v1.0.1](https://github.com/mattermost/mattermost-plugin-calls/releases/tag/v1.0.1). + - Added Playbooks [v2.0.1](https://github.com/mattermost/mattermost-plugin-playbooks/releases/tag/v2.0.1) to the prepackaged plugins. + - Added Mattermost user survey plugin to pre-packaged plugins, [v1.1.1](https://github.com/mattermost/mattermost-plugin-user-survey/releases). + - Changed the right-hand side scroll direction and fixed the advanced text editor to the bottom. + - Added Do not disturb and late timezone warnings to Direct Message posts. + - Added user statuses to the Group Members modal. + - Added labels for channel header and purpose in the right-hand side channel info view. + - Added pagination user interface to the ``BackstageList`` component. + - Made various improvements to code involving user preferences. + - Promoted GIF picker, custom groups and message priority out of Beta. + - Removed the **Pre-release features** section from **Settings > Advanced** due to lack of usage. + +#### Administration + - Made payload size limit error more clearly visible and recognisable in API responses and server error logs. + - Extended the plugin schema to support defining sections for **System Console** settings. + - Added support for a default team on secure connections for incoming channel invites. + - Remote clusters can now be created without explicitly providing a password. + - Files are now fetched from all nodes in a cluster when generating a Support Packet. + - Docker images are now based on Ubuntu Noble. + +#### Performance + - Removed a re-render on channel change. + - Batched requests made by certain components for loading users and their statuses from the server. + - Cleaned up some unused post handling logic. + +### Bug Fixes + - Fixed an issue with web app notifications not being shown in the **Notification Center** on Windows or Mac. + - Fixed an issue with ``mmctl webhooks list`` to paginate past 200 results. + - Fixed an issue where scrolling capability and a visible scrollbar were missing in post textboxes. + - Fixed an issue where false warnings about Channel indexes being incorrect were sent to system admins. + - Fixed an issue where indexing would always be done async even after setting ``LiveIndexingBatchSize`` to ``1``. Now we respect the config and index synchronously if the value is set to ``1``. + - Fixed an issue where the **Edit Post Time Limit** button was not being displayed in the System Console. + - Fixed another issue where users would not see channels they were added to/messages from those channels in clustered environments. + +### config.json +New setting options were added to ``config.json``. Below is a list of the additions and their default values on install. The settings can be modified in ``config.json``, or the System Console when available. + +#### Changes to all plans: + - Under ``ServiceSettings`` in ``config.json``: + - Added a new setting ``MaximumURLLength`` to remove the hardcoded URL length limit. + - Removed deprecated ``Config.ProductSettings``. + - Removed ``EnablePreviewFeatures`` setting. + +#### Changes to the Enterprise plan: + - Removed deprecated ``LdapSettings.Trace`` setting. + - Removed deprecated ``AdvancedLoggingConfig`` setting. + +### API Changes + - Reduced the number of API requests made to fetch user information for Group Messages on page load. + - User APIs now enforce username beginning with alphabetic character, matching client-side validation. + - Added a new request parameter ``include_total_count`` to API endpoint ``GET /api/v4/hooks/incoming``. + +### Go Version + - v10.0 is built with Go ``v1.21.8``. + +### Open Source Components + - Added ``redis/rueidis`` to https://github.com/mattermost/mattermost. -Mattermost v10.0 is planned for September, 2024. Below is a list of planned breaking changes for this release: +### Known Issues + - The cursor is not placed in the "Write to" field on login [MM-60275](https://mattermost.atlassian.net/browse/MM-60275). + - Searching stop words in quotation marks with Elasticsearch enabled returns more than just the searched terms. + - Slack import through the CLI fails if email notifications are enabled. + - The Playbooks left-hand sidebar doesn't update when a user is added to a run or playbook without a refresh. + - If a user isn't a member of a configured broadcast channel, posting a status update might fail without any error feedback. As a temporary workaround, join the configured broadcast channels, or remove those channels from the run configuration. -1. **MySQL Databases** - We will no longer support new installations using MySQL starting in v10. All new customers and/or deployments will only be supported with the minimum supported version of the PostgreSQL database. End of support for MySQL is targeted for Mattermost v11. -2. **Apps Framework** - Apps framework will be deprecated in the Mattermost v10 release. Please extend Mattermost using webhooks, slash commands, oAuth2 apps, and plugins. -3. **Collaborative playbooks for Enterprise** - An Enterprise license will be required to use v2.0+ Playbooks functionality starting in v10. Team Edition and Professional deployments can continue to use Playbooks v1.x. Security and feature updates will only be added to Playbooks v2.0+. +### Contributors + - [abhijit-singh](https://github.com/abhijit-singh), [agarciamontoro](https://github.com/agarciamontoro), [agnivade](https://github.com/agnivade), [alexcekay](https://github.com/alexcekay), [amyblais](https://github.com/amyblais), [andreabia](https://github.com/andreabia), [andrleite](https://github.com/andrleite), [angeloskyratzakos](https://github.com/angeloskyratzakos), [Aryakoste](https://github.com/Aryakoste), [asaadmahmood](https://github.com/asaadmahmood), [AshishDhama](https://github.com/AshishDhama), [axu-trex](https://github.com/axu-trex), [ayusht2810](https://github.com/ayusht2810), [azigler](https://github.com/azigler), [BenCookie95](https://github.com/BenCookie95), [Boruus](https://github.com/Boruus), [BrandonS09](https://github.com/BrandonS09), [bruno-keiko](https://github.com/bruno-keiko), [Camillarhi](https://github.com/Camillarhi), [catalintomai](https://github.com/catalintomai), [crspeller](https://github.com/crspeller), [ctlaltdieliet](https://translate.mattermost.com/user/ctlaltdieliet), [cwarnermm](https://github.com/cwarnermm), [danielsischy](https://github.com/danielsischy), [DemoYeti](https://github.com/DemoYeti), [devinbinnie](https://github.com/devinbinnie), [DHaussermann](https://github.com/DHaussermann), [Eleferen](https://translate.mattermost.com/user/Eleferen), [elewis787](https://github.com/elewis787), [enahum](https://github.com/enahum), [enzowritescode](https://github.com/enzowritescode), [esethna](https://github.com/esethna), [ezekielchow](https://github.com/ezekielchow), [fmartingr](https://github.com/fmartingr), [frankps](https://translate.mattermost.com/user/frankps), [gabrieljackson](https://github.com/gabrieljackson), [Gesare5](https://github.com/Gesare5), [gvarma28](https://github.com/gvarma28), [hanzei](https://github.com/hanzei), [harshilsharma63](https://github.com/harshilsharma63), [hereje](https://github.com/hereje), [hmhealey](https://github.com/hmhealey), [ifoukarakis](https://github.com/ifoukarakis), [imanmagomedov.said](https://translate.mattermost.com/user/imanmagomedov.said), [isacikgoz](https://github.com/isacikgoz), [ja49619](https://translate.mattermost.com/user/ja49619), [jasonblais](https://github.com/jasonblais), [jespino](https://github.com/jespino), [johnsonbrothers](https://github.com/johnsonbrothers), [jprusch](https://translate.mattermost.com/user/jprusch), [JulienTant](https://github.com/JulienTant), [jwilander](https://github.com/jwilander), [kaakaa](https://github.com/kaakaa), [Kshitij-Katiyar](https://github.com/Kshitij-Katiyar), [KvngMikey](https://github.com/KvngMikey), [larkox](https://github.com/larkox), [lieut-data](https://github.com/lieut-data), [lynn915](https://github.com/lynn915), [M-ZubairAhmed](https://github.com/M-ZubairAhmed), [majo](https://translate.mattermost.com/user/majo), [marianunez](https://github.com/marianunez), [master7](https://translate.mattermost.com/user/master7), [matt-w99](https://github.com/matt-w99), [matthew-w](https://translate.mattermost.com/user/matthew-w), [matthewbirtch](https://github.com/matthewbirtch), [MattSilvaa](https://github.com/MattSilvaa), [mgdelacroix](https://github.com/mgdelacroix), [movion](https://github.com/movion), [mvitale1989](https://github.com/mvitale1989), [NCPSNetworks](https://translate.mattermost.com/user/NCPSNetworks), [nickmisasi](https://github.com/nickmisasi), [ovrheat](https://github.com/ovrheat), [petersauvignon](https://translate.mattermost.com/user/petersauvignon), [phoinixgrr](https://github.com/phoinixgrr), [raghavaggarwal2308](https://github.com/raghavaggarwal2308), [rahimrahman](https://github.com/rahimrahman), [Rajat-Dabade](https://github.com/Rajat-Dabade), [RS-labhub](https://github.com/RS-labhub), [saturninoabril](https://github.com/saturninoabril), [sbishel](https://github.com/sbishel), [sblaisot](https://github.com/sblaisot), [Sn-Kinos](https://github.com/Sn-Kinos), [spirosoik](https://github.com/spirosoik), [stafot](https://github.com/stafot), [streamer45](https://github.com/streamer45), [tasnim0tantawi](https://github.com/tasnim0tantawi), [TealWater](https://github.com/TealWater), [theaino](https://github.com/theaino), [ThrRip](https://translate.mattermost.com/user/ThrRip), [Tihomir-N](https://github.com/Tihomir-N), [tnir](https://translate.mattermost.com/user/tnir), [toninis](https://github.com/toninis), [vish9812](https://github.com/vish9812), [wiggin77](https://github.com/wiggin77), [willypuzzle](https://github.com/willypuzzle), [yasserfaraazkhan](https://github.com/yasserfaraazkhan), [yomiadetutu1](https://github.com/yomiadetutu1), [ZubairImtiaz3](https://github.com/ZubairImtiaz3) diff --git a/source/collaborate/channel-types.rst b/source/collaborate/channel-types.rst index 038a5703b8c..7ca2731d7e7 100644 --- a/source/collaborate/channel-types.rst +++ b/source/collaborate/channel-types.rst @@ -29,6 +29,10 @@ Direct messages conversations between 2 people. You can start a direct message w Direct messages increment the numbered badge and trigger a notification unless the direct message is muted, or your notifications are disabled. See the :doc:`notification documentation ` for details on customizing notifications based on your preferences. +.. tip:: + + From Mattermost v10, when sending a direct message, Mattermost warns you that the recipient's availability is set to :ref:`Do Not Disturb `, and when the recipient's local time is outside of regular business hours (between 10PM and 6AM). This warning displays directly above the message text field. + Group messages -------------- diff --git a/source/collaborate/install-desktop-app.rst b/source/collaborate/install-desktop-app.rst index aee92d140cf..c01228d30be 100644 --- a/source/collaborate/install-desktop-app.rst +++ b/source/collaborate/install-desktop-app.rst @@ -25,7 +25,7 @@ You can download the `desktop app `_ directly from **Install the Mattermost Desktop App** - 1. Download the latest version of the Mattermost desktop app for the `64-bit version of Windows `_ + 1. Download the latest version of the Mattermost desktop app for the `64-bit version of Windows `_ 2. From the **\Downloads** folder, right-click on the file ``mattermost-desktop-setup-5.9.0-win.exe``, then select **Open** to start an installer for the app. Once finished, the Mattermost desktop app opens automatically. **MSI Installer and group policies** diff --git a/source/collaborate/make-calls.rst b/source/collaborate/make-calls.rst index fec3220378d..4af73ccbd92 100644 --- a/source/collaborate/make-calls.rst +++ b/source/collaborate/make-calls.rst @@ -225,7 +225,7 @@ Troubleshooting My audio doesn't work when I join a call ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -If you can hear the other participants in the call but they can't hear you, select the horizontal dots next to the call end button in the widget. From there, you can check and change your audio output and microphone settings. Select the horizontal dots again to close the menu. +If you can hear the other participants in the call but they can't hear you, select the Gear icon |gear| next to the call end button in the widget. From there, you can check and change your audio output and microphone settings. Select |gear| again to close the menu. Alternatively, you can :doc:`manage your audio and microphone preferences ` in **Settings**. My call is disconnected after a few seconds ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -244,7 +244,7 @@ There's a known bug on macOS with some versions of Chrome (which is used by Matt 5. Select **Screen share** and give it permissions again. 6. Restart Mattermost again. -If the issue persists please post in the public calls channel. +If the issue persists please post on the Mattermost Community Server in the `Developer: Calls `_ channel to troubleshoot further. Debugging --------- @@ -286,7 +286,7 @@ You can access and share debug logs from **Account screen > Settings > Report a Call stats dump ~~~~~~~~~~~~~~~ -In cases where there are audio/video issues, difficulty in hearing other participants, and/or stuttering video and/or choppy audio, run the ``/call stats`` slash command in the channel where the call is currently active. This returns a JSON object via an ephemeral message. +In cases where there are audio/video issues, difficulty in hearing other participants, and/or stuttering video and/or choppy audio, run the ``/call stats`` slash command in the channel where the call is currently active. This returns a JSON object via an ephemeral message. Additionally, run the ``/call logs`` command to review the client logs for the last call session. You can run this command in an active call or after leaving the call in question. However, we will only save data for the last joined call so joining again will delete the previous call's feedback. diff --git a/source/collaborate/send-messages.rst b/source/collaborate/send-messages.rst index 0213be7dcbf..8588ba0bd31 100644 --- a/source/collaborate/send-messages.rst +++ b/source/collaborate/send-messages.rst @@ -12,6 +12,10 @@ Enter a message in the text field, then select **Send** |send-icon| to send the Compose a message by typing into the text box at the bottom of the Mattermost screen, then select the **Send** |send-icon| icon. +.. tip:: + + From Mattermost v10, when sending a direct message, Mattermost warns you that the recipient's availability is set to :ref:`Do Not Disturb `, and when the recipient's local time is outside of regular business hours (between 10PM and 6AM). This warning displays directly above the message text field. + .. tab:: Web/Desktop You can also use a keyboard to send messages: @@ -50,7 +54,7 @@ By default, message drafts are synchronized on the Mattermost server and are acc .. note:: - To disable global drafts, system admins can set the feature flag ``MM_FEATUREFLAGS_GLOBALDRAFTS`` to ``false`` to disable it server-wide. It can't be disabled on a per-user basis. The code is located `here `_. + System admins can disable global drafts by disabling the `message draft server sychronization configuration setting ` in the System Console. Edit messages -------------- diff --git a/source/conf.py b/source/conf.py index 15e9d586924..ce2ff913ddf 100644 --- a/source/conf.py +++ b/source/conf.py @@ -1837,6 +1837,8 @@ def setup(_: Sphinx): "https://docs.mattermost.com/configure/site-configuration-settings.html#enable-system-wide-notifications", "configure/plugins-configuration-settings.html#playbooks": "https://docs.mattermost.com/configure/plugins-configuration-settings.html#collaborative-playbooks", +"configure/manage-user-surveys.html#upload": + "https://docs.mattermost.com/configure/manage-user-surveys.html#install", # Deploy redirects "deploy/mobile-apps-faq.html": @@ -3528,9 +3530,9 @@ def setup(_: Sphinx): # built documents. # # The short X.Y version. -# version = '9.11' +# version = '10.0' # The full version, including alpha/beta/rc tags. -# release = '9.11' +# release = '10.0' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/source/configure/calls-deployment.rst b/source/configure/calls-deployment.rst index 130bb42d1ab..cf5b186603b 100644 --- a/source/configure/calls-deployment.rst +++ b/source/configure/calls-deployment.rst @@ -64,12 +64,10 @@ Network Limitations ----------- -- In Mattermost Cloud, up to 50 participants per channel can join a call. -- In Mattermost self-hosted deployments, the default maximum number of participants is unlimited; however, we recommend a maximum of 50 participants per call. Maximum call participants is configurable by going to **System Console > Plugin Management > Calls > Max call participants**. Call participant limits greatly depends on instance resources. For more details, refer to the :ref:`performance section ` below. - -.. note:: - - We recommend that Enterprise self-hosted customers looking for group calls beyond 50 concurrent users consider using the external, dedicated, and scalable rtcd service. See the :doc:`self-hosted calls deployment ` documentation for details. +- All Mattermost customers can start, join, and participate in 1:1 audio calls with optional screen sharing. +- For group calls up to 50 concurrent users, Mattermost Enterprise, Professional, or Mattermost Cloud is required. +- Enterprise customers can also `record calls <#record-a-call>`__, enable :ref:`live text captions ` during calls, and `transcribe recorded calls <#transcribe-recorded-calls>`__. We recommend that Enterprise self-hosted customers looking for group calls beyond 50 concurrent users consider using the :ref:`dedicated rtcd service `. +- For Mattermost self-hosted deployments, System admins need to enable and configure the plugin :ref:`using the System Console `. The default maximum number of participants is unlimited; however, we recommend a maximum of 50 participants per call. Maximum call participants is configurable by going to **System Console > Plugin Management > Calls > Max call participants**. Call participant limits greatly depends on instance resources. For more details, refer to the :ref:`performance section ` below. Configuration ------------- diff --git a/source/configure/deprecated-configuration-settings.rst b/source/configure/deprecated-configuration-settings.rst index 63378358d88..71f06c1bd3c 100644 --- a/source/configure/deprecated-configuration-settings.rst +++ b/source/configure/deprecated-configuration-settings.rst @@ -20,6 +20,7 @@ The following Mattermost configuration settings are deprecated and are no longer - `Permission policy settings <#permission-policy-settings>`__ - `Image settings <#image-settings>`__ - `Experimental display settings <#experimental-display-settings>`__ +- `Experimental API endpoint settings <#experimental-api-endpoint-settings>`__ - `Other deprecated settings <#other-deprecated-settings>`__ ---- @@ -806,6 +807,48 @@ The file must be in the same directory as your ``config.json`` file if you set a ---- +Experimental API endpoint settings +---------------------------------- + +Enable API team deletion +~~~~~~~~~~~~~~~~~~~~~~~~ + +*Removed in Mattermost v10 (Sept 2024) release* + +This setting isn't available in the System Console and can only be set in ``config.json``. + +**False**: The API endpoint cannot be called. Note that ``api/v4/teams/{teamid}`` can still be used to soft delete a team. + ++-------------------------------------------------------------------------------+ +| This feature's ``config.json`` setting is ``"EnableAPITeamDeletion": false``. | ++-------------------------------------------------------------------------------+ + +Enable API user deletion +~~~~~~~~~~~~~~~~~~~~~~~~ + +*Removed in Mattermost v10 (Sept 2024) release* + +This setting isn't available in the System Console and can only be set in ``config.json``. + +**False**: The API endpoint cannot be called. Note that ``api/v4/users/{userid}`` can still be used to soft delete a user. + ++-------------------------------------------------------------------------------+ +| This feature's ``config.json`` setting is ``"EnableAPIUserDeletion": false``. | ++-------------------------------------------------------------------------------+ + +Enable API channel deletion +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*Removed in Mattermost v10 (Sept 2024) release* + +This setting isn't available in the System Console and can only be set in ``config.json``. + +**False**: The API endpoint cannot be called. Note that ``api/v4/channels/{channelid}`` can still be used to soft delete a channel. + ++----------------------------------------------------------------------------------+ +| This feature's ``config.json`` setting is ``"EnableAPIChannelDeletion": false``. | ++----------------------------------------------------------------------------------+ + Other deprecated settings -------------------------- diff --git a/source/configure/elasticsearch-configuration-settings.rst b/source/configure/elasticsearch-configuration-settings.rst index 75161a30d92..37130f6f7fd 100644 --- a/source/configure/elasticsearch-configuration-settings.rst +++ b/source/configure/elasticsearch-configuration-settings.rst @@ -262,9 +262,12 @@ Bulk indexing | posts in the database, from oldest to newest. | - ``config.json`` setting: N/A | | | - Environment variable: N/A | +---------------------------------------------------------------+--------------------------------------------------------------------------+ -| Select the **Index Now** button in the System Console to start a bulk index of all posts, and review all index jobs in progress. | -| Elasticsearch is available during indexing but search results may be incomplete until the indexing job is complete. | -| If an in-progress indexing job is canceled, the index and search results will be incomplete. | +| **Notes**: | +| | +| - Always `purge indexes <#purge-indexes>`__ before bulk indexing. | +| - Select the **Index Now** button in the System Console to start a bulk index of all posts, and review all index jobs in progress. | +| - Elasticsearch is available during indexing, but search results may be incomplete until the indexing job is complete. | +| - If an in-progress indexing job is canceled, the index and search results will be incomplete. | +---------------------------------------------------------------+--------------------------------------------------------------------------+ .. config:setting:: elastic-rebuildchannelsindex @@ -292,7 +295,7 @@ Rebuild channels index :systemconsole: Environment > Elasticsearch :configjson: N/A :environment: N/A - :description: Purge the entire Elasticsearch index by selecting Purge Indexes. + :description: Purge the entire Elasticsearch index by selecting Purge Indexes before creating a new index. Purge indexes ~~~~~~~~~~~~~ @@ -301,14 +304,14 @@ Purge indexes

Also available in legacy Mattermost Enterprise Edition E10 or E20

-+---------------------------------------------------------------+-------------------------------------------------------------+ -| Purge the entire Elasticsearch index. | - System Config path: **Environment > Elasticsearch** | -| Typically only used if the index has corrupted and search | - ``config.json`` setting: N/A | -| isn't behaving as expected. | - Environment variable: N/A | -+---------------------------------------------------------------+-------------------------------------------------------------+ -| Select the **Purge Indexes** button in the System Console to purge the index. | -| After purging the index, create a new index by selecting the **Index Now** button. | -+---------------------------------------------------------------+-------------------------------------------------------------+ ++-------------------------------------------+-------------------------------------------------------------+ +| Purge the entire Elasticsearch index. | - System Config path: **Environment > Elasticsearch** | +| | - ``config.json`` setting: N/A | +| | - Environment variable: N/A | ++-------------------------------------------+-------------------------------------------------------------+ +| Select the **Purge Indexes** button in the System Console to purge the index. | +| After purging the index, create a new index by selecting the **Index Now** button. | ++-------------------------------------------+-------------------------------------------------------------+ .. config:setting:: elastic-indexestoskipwhilepurging :displayname: Indexes to skip while purging (Elasticsearch) @@ -413,8 +416,13 @@ Post index replicas | | - ``config.json`` setting: ``".Elasticsearchsettings.PostIndexReplicas: 1",`` | | Numerical input. Default is **1**. | - Environment variable: ``MM_ELASTICSEARCHSETTINGS_POSTINDEXREPLICAS`` | +---------------------------------------------------------------+-------------------------------------------------------------------------------+ -| **Important note**: If this setting is changed, the changed configuration only applies to newly-created indexes. To apply the change to | -| existing indexes, purge and rebuild the index after changing this setting. | +| **Important notes**: | +| | +| - If this setting is changed, the changed configuration only applies to newly-created indexes. To apply the change to existing indexes, | +| purge and rebuild the index after changing this setting. | +| - If there are ``n`` data nodes, the number of replicas per shard for each index should be ``n-1``. | +| - If the number of nodes in an Elasticsearch cluster changes, this configuration setting, as well as | +| `Channel Index Replicas <#channel-index-replicas>`__ and `User Index Replicas <#user-index-replicas>`__ must also be updated accordingly. | +---------------------------------------------------------------+-------------------------------------------------------------------------------+ .. config:setting:: elastic-postindexshards @@ -436,10 +444,11 @@ Post index shards | | - ``config.json`` setting: ``".Elasticsearchsettings.PostIndexShards: 1",`` | | Numerical input. Default is **1**. | - Environment variable: ``MM_ELASTICSEARCHSETTINGS_POSTINDEXSHARDS`` | +---------------------------------------------------------------+-------------------------------------------------------------------------------+ -| **Important note**: If this setting is changed, the changed configuration only applies to newly-created indexes. To apply the change to | -| existing indexes, purge and rebuild the index after changing this setting. | +| **Important note**: If this configuration setting is changed, the changed configuration only applies to newly-created indexes. | +| To apply the change to existing indexes, purge and rebuild the index after changing this setting. | +---------------------------------------------------------------+-------------------------------------------------------------------------------+ + .. config:setting:: elastic-channelindexreplicas :displayname: Channel index replicas (Elasticsearch) :systemconsole: N/A @@ -459,6 +468,10 @@ Channel index replicas | | - ``config.json`` setting: ``".Elasticsearchsettings.ChannelIndexReplicas: 1",`` | | Numerical input. Default is **1**. | - Environment variable: ``MM_ELASTICSEARCHSETTINGS_CHANNELINDEXREPLICAS`` | +---------------------------------------------------------------+----------------------------------------------------------------------------------+ +| **Note**: If there are ``n`` data nodes, the number of replicas per shard for each index should be ``n-1``. If the number of nodes in an | +| Elasticsearch cluster changes, this configuration setting, as well as `Post Index Replicas <#post-index-shards>`__ and | +| `User Index Replicas <#user-index-replicas>`__ must also be updated accordingly. | ++---------------------------------------------------------------+----------------------------------------------------------------------------------+ .. config:setting:: elastic-channelindexshards :displayname: Channel index shards (Elasticsearch) @@ -499,6 +512,10 @@ User index replicas | | - ``config.json`` setting: ``".Elasticsearchsettings.UserIndexReplicas: 1",`` | | Numerical input. Default is **1**. | - Environment variable: ``MM_ELASTICSEARCHSETTINGS_USERINDEXREPLICAS`` | +---------------------------------------------------------------+-------------------------------------------------------------------------------+ +| **Note**: If there are ``n`` data nodes, the number of replicas per shard for each index should be ``n-1``. If the number of nodes in an | +| Elasticsearch cluster changes, this configuration setting, as well as `Post Index Replicas <#post-index-replicas>`__ and | +| `Channel Index Replicas <#channel-index-replicas>`__ must also be updated accordingly. | ++---------------------------------------------------------------+-------------------------------------------------------------------------------+ .. config:setting:: elastic-userindexshards :displayname: User index shards (Elasticsearch) diff --git a/source/configure/experimental-configuration-settings.rst b/source/configure/experimental-configuration-settings.rst index 7ff197264aa..aee50dced51 100644 --- a/source/configure/experimental-configuration-settings.rst +++ b/source/configure/experimental-configuration-settings.rst @@ -1948,72 +1948,6 @@ This setting isn't available in the System Console and can only be set in ``conf .. note:: This is a client only override that doesn't affect the listening port of the server process which is controlled by the :ref:`Web server listen address ` setting. -.. config:setting:: exp-enableapiteamdeletion - :displayname: Enable API team deletion (Experimental) - :systemconsole: N/A - :configjson: EnableAPITeamDeletion - :environment: N/A - - - **true**: The ``api/v4/teams/{teamid}?permanent=true`` API endpoint can be called by team admins and system admins to permanently delete a team. - - **false**: **(Default)** The API endpoint cannot be called. - -Enable API team deletion -~~~~~~~~~~~~~~~~~~~~~~~~ - -This setting isn't available in the System Console and can only be set in ``config.json``. - -**True**: The ``api/v4/teams/{teamid}?permanent=true`` API endpoint can be called by team admins and system admins to permanently delete a team. - -**False**: The API endpoint cannot be called. Note that ``api/v4/teams/{teamid}`` can still be used to soft delete a team. - -+-------------------------------------------------------------------------------------------------------------------+ -| This feature's ``config.json`` setting is ``"EnableAPITeamDeletion": false`` with options ``true`` and ``false``. | -+-------------------------------------------------------------------------------------------------------------------+ - -.. config:setting:: exp-enableapiuserdeletion - :displayname: Enable API user deletion - :systemconsole: N/A - :configjson: EnableAPIUserDeletion - :environment: N/A - - - **true**: The ``api/v4/users/{userid}?permanent=true`` API endpoint can be called by system admins, or users with appropriate permissions, to permanently delete a user. - - **false**: **(Default)** The API endpoint cannot be called. - -Enable API user deletion -~~~~~~~~~~~~~~~~~~~~~~~~ - -This setting isn't available in the System Console and can only be set in ``config.json``. - -**True**: The ``api/v4/users/{userid}?permanent=true`` API endpoint can be called by system admins, or users with appropriate permissions, to permanently delete a user. - -**False**: The API endpoint cannot be called. Note that ``api/v4/users/{userid}`` can still be used to soft delete a user. - -+-------------------------------------------------------------------------------------------------------------------+ -| This feature's ``config.json`` setting is ``"EnableAPIUserDeletion": false`` with options ``true`` and ``false``. | -+-------------------------------------------------------------------------------------------------------------------+ - -.. config:setting:: exp-enableapichanneldeletion - :displayname: Enable API channel deletion (Experimental) - :systemconsole: N/A - :configjson: EnableAPIChannelDeletion - :environment: N/A - - - **true**: The ``api/v4/channels/{channelid}?permanent=true`` API endpoint can be called by system admins, or users with appropriate permissions, to permanently delete a channel. - - **false**: **(Default)** The API endpoint cannot be called. - -Enable API channel deletion -~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -This setting isn't available in the System Console and can only be set in ``config.json``. - -**True**: The ``api/v4/channels/{channelid}?permanent=true`` API endpoint can be called by system admins, or users with appropriate permissions, to permanently delete a channel. - -**False**: The API endpoint cannot be called. Note that ``api/v4/channels/{channelid}`` can still be used to soft delete a channel. - -+----------------------------------------------------------------------------------------------------------------------+ -| This feature's ``config.json`` setting is ``"EnableAPIChannelDeletion": false`` with options ``true`` and ``false``. | -+----------------------------------------------------------------------------------------------------------------------+ - .. config:setting:: exp-enableopentracing :displayname: Enable OpenTracing (Experimental) :systemconsole: N/A diff --git a/source/configure/manage-user-surveys.rst b/source/configure/manage-user-surveys.rst index 33aa5a29ebe..3e30ad2823e 100644 --- a/source/configure/manage-user-surveys.rst +++ b/source/configure/manage-user-surveys.rst @@ -15,25 +15,26 @@ You must be a Mattermost system admin to `upload the plugin <#upload>`__ to your The User Survey integration is compatible with the following Mattermost Server versions: + - v9.11.2 (Extended Support Release) - v9.8 or later - v9.5.2+ (Extended Support Release) - v8.1 (Extended Support Release) -Upload ------- +Install +-------- -The User Survey integration must be installed using the `latest binary available for download from the plugin repository `_ +.. important:: -1. Download the binary file from the GitHub repository. -2. Go to **System Console > Plugin Management**. -3. Next to **Upload Plugin**, select **Choose File**. -4. Select the binary file, select **Open**, and then select **Upload**. + Mattermost offers an additonal :doc:`User Satisfaction Surveys ` option with limited customization options within the **Plugins** list where surveys are enabled by default. We recommend :ref:`disabling the User Satisfaction Surveys functionality ` when using this user survey integration. -Once the binary is uploaded, the **User Survey** integration is added in the navigation pane under **Plugins**. +1. Log in to your Mattermost workspace as a system administrator. +2. In Mattermost, from the Product menu |product-list|, select **App Marketplace**. +3. Search for or scroll to User Survey, and select **Install**. +4. Once installed, select **Configure**. You're taken to the System Console, directly to the **User Survey** integration page, under **Plugins**. .. note:: - Mattermost offers an additonal :doc:`User Satisfaction Surveys ` option with limited customization options within the **Plugins** list where surveys are enabled by default. We recommend :ref:`disabling the User Satisfaction Surveys functionality ` when using this user survey integration. + From Mattermost v9.11.2 (ESR) and Mattermost Cloud v10, this plugin is pre-packaged with the Mattermost Server. If your Mattermost deployment is on a release prior to v9.11.2, download the `latest plugin binary release `_, and upload it to your server via **System Console > Plugin Management**. Upgrade ~~~~~~~ @@ -50,7 +51,7 @@ Go to **System Console > Plugins > User Survey** to enable this integration. Once the integration is installed and enabled, create surveys by completing configuration in the System Console, as described below. Create surveys --------------- +~~~~~~~~~~~~~~~ Under **Survey setup**, specify the date, time, and details for a new survey: diff --git a/source/configure/rate-limiting-configuration-settings.rst b/source/configure/rate-limiting-configuration-settings.rst index a36e2880884..7f5bdbb3f2f 100644 --- a/source/configure/rate-limiting-configuration-settings.rst +++ b/source/configure/rate-limiting-configuration-settings.rst @@ -1,7 +1,13 @@ :orphan: :nosearch: -Rate limiting prevents your Mattermost server from being overloaded with too many requests, and decreases the risk and impact of third-party applications or malicious attacks on your server. Configure rate limiting settings by going to **System Console > Environment > Rate Limiting**, or by editing the ``config.json`` file as described in the following tables. Changes to configuration settings in this section require a server restart before taking effect. +Rate limiting prevents your Mattermost server from being overloaded with too many requests, and decreases the risk and impact of third-party applications or malicious attacks on your server. + +Configure rate limiting settings by going to **System Console > Environment > Rate Limiting**, or by editing the ``config.json`` file as described in the following tables. Changes to configuration settings in this section require a server restart before taking effect. + +.. important:: + + Mattermost rate limiting configuration settings are intended for small deployments of Mattermost up to a few hundred users, and is not intended for larger, Enterprise-scale deployments. .. config:setting:: ratelimit-enableratelimiting :displayname: Enable rate limiting (Rate Limiting) diff --git a/source/configure/reporting-configuration-settings.rst b/source/configure/reporting-configuration-settings.rst index 5ba1a86c6db..67d1e46909b 100644 --- a/source/configure/reporting-configuration-settings.rst +++ b/source/configure/reporting-configuration-settings.rst @@ -21,10 +21,9 @@ Site statistics +----------------------------------------------------------------+-------------------------------------------------------------+ | View statistics on a wide variety of activities in Mattermost, | - System Config path: **Reporting > Site Statistics** | -| including: activated users, seats, teams, channels, posts, | - ``config.json setting``: N/A | -| sessions, commands, webhooks, daily and monthly active users, | - Environment variable: N/A | -| websocket and database connections, collaborative playbooks, | | -| and calls. | | +| including: users, seats, teams, channels, posts, calls, | - ``config.json setting``: N/A | +| sessions, commands, webhooks, websocket and database | - Environment variable: N/A | +| connections, and collaborative playbooks, | | +----------------------------------------------------------------+-------------------------------------------------------------+ | **Notes**: | | | diff --git a/source/configure/user-management-configuration-settings.rst b/source/configure/user-management-configuration-settings.rst index 72d05a35fcd..4d1a86014df 100644 --- a/source/configure/user-management-configuration-settings.rst +++ b/source/configure/user-management-configuration-settings.rst @@ -83,10 +83,16 @@ You can filter System Console user searches to narrow down results based on the .. tip:: - From Mattermost v9.6, you can also: + From Mattermost v9.6, you can also filter users by activity timeframes, including the last 30 days, the previous month, and the last 6 months. - - Filter users by activity timeframes, including the last 30 days, the previous month, and the last 6 months. - - Mattermost Enterprise and Professional customers can export user data as a CSV report. You'll receive the report as a direct message in Mattermost. +Export user data +~~~~~~~~~~~~~~~~~ + +From Mattermost v9.6, Mattermost Enterprise and Professional system admins can export user data as a CSV report. + +1. Go to **System Console > User Management > Users** to access all user accounts. +2. `Filter <#filter-user-searches>`__ the user data as needed. +3. Select **Export** located in the top right corner of the System Console interface, and then select **Export data**. You'll receive the report in CSV format as a direct message in Mattermost. Activate or deactivate users ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -137,7 +143,7 @@ Manage user's settings .. include:: ../_static/badges/ent-only.rst :start-after: :nosearch: -From Mattermost v9.11, system admins can help users customize their Mattermost experience by editing the user's settings within the System Console. Users can view, modify, and override their own settings at any time. +From Mattermost v9.11, system admins can help end users customize their Mattermost notifications by editing the user's :doc:`notification settings
` on the user's behalf within the System Console. Users can view, modify, and override their own settings at any time. 1. Go to **System Console > User Management > Users** to access all user accounts. 2. Select the user you want to manage. diff --git a/source/configure/web-server-configuration-settings.rst b/source/configure/web-server-configuration-settings.rst index 78b4cb3a9e5..41093d2f967 100644 --- a/source/configure/web-server-configuration-settings.rst +++ b/source/configure/web-server-configuration-settings.rst @@ -36,6 +36,24 @@ Site URL | - Plugins may not work as expected. | +-------------------------------------------------------------------------------------------------------------------------------+ +.. config:setting:: max-url-length + :displayname: Maximum URL length (Web Server) + :systemconsole: N/A + :configjson: .ServiceSettings.MaximumURLLength + :environment: MM_SERVICESETTINGS_MAXIMUMURLLENGTH + :description: The longest URL, in characters, including query parameters, accepted by the Mattermost server. Default is 2048 characters. + +Maximum URL length +~~~~~~~~~~~~~~~~~~ + ++---------------------------------------------------------------+--------------------------------------------------------------------------+ +| The longest URL, in characters, including query parameters, | - System Config path: N/A | +| accepted by the Mattermost server. Longer URLs are rejected, | - ``config.json`` setting: ``.ServiceSettings.MaximumURLLength: 2048",`` | +| and API calls fail with an error. | - Environment variable: ``MM_SERVICESETTINGS_MAXIMUMURLLENGTH`` | +| | | +| Numeric value. Default is **2048** characters. | | ++---------------------------------------------------------------+--------------------------------------------------------------------------+ + .. config:setting:: web-listenaddress :displayname: Web server listen address (Web Server) :systemconsole: Environment > Web Server diff --git a/source/deploy/mobile-faq.rst b/source/deploy/mobile-faq.rst index c8e731c0451..9dd53f259dd 100644 --- a/source/deploy/mobile-faq.rst +++ b/source/deploy/mobile-faq.rst @@ -378,3 +378,7 @@ The team members / users can access their notification logs based on their devic Android users can view the logs using ``logcat``. iOS users can acess the logs in the ``console app`` on their MacOS. +How do I gather mobile app logs? +-------------------------------- + +See the Mattermost Support Knowledge Base article on `gathering mobile app logs `_ for details. \ No newline at end of file diff --git a/source/guides/integrate-and-extend.rst b/source/guides/integrate-and-extend.rst index 9b5cb2c9bae..be463fbddb8 100644 --- a/source/guides/integrate-and-extend.rst +++ b/source/guides/integrate-and-extend.rst @@ -26,7 +26,8 @@ Your Mattermost deployment comes with the following integrations you can configu * :doc:`GitHub interoperability ` - Connect your GitHub instance to your Mattermost instance to subscribe to repositiories, and to stay current with reviews, assignments, and more. * :doc:`GitLab interoperability ` - Connect your GitLab instance to your Mattermost instance to subscribe to repositories, use GitLab events as Mattermost action triggers, and more. * :doc:`Jira interoperability ` - Connect your Jira instance to your Mattermost instance to create Jira tickets from messages in Mattermost, and to get notified of important Jira updates in Mattermost. -* :doc:`Mattermost Playbooks for Microsoft Teams ` - Improve cross-organizational alignment and awareness by enabling access to your active, repeatable processes and status updates in Mattermost directly in Microsoft Teams.* :doc:`Microsoft Calendar interoperability ` - Connect your Microsoft O365 Calendar to your Mattermost instance to receive daily sumamryies of calendar events, synchronize your Microsoft O365 status in Mattermost, and accept or decline calendar invites without leaving Mattermost. +* :doc:`Mattermost Playbooks for Microsoft Teams ` - Improve cross-organizational alignment and awareness by enabling access to your active, repeatable processes and status updates in Mattermost directly in Microsoft Teams. +* :doc:`Microsoft Calendar interoperability ` - Connect your Microsoft O365 Calendar to your Mattermost instance to receive daily sumamryies of calendar events, synchronize your Microsoft O365 status in Mattermost, and accept or decline calendar invites without leaving Mattermost. * :doc:`Microsoft Teams interoperability ` - Connect your Microsoft Teams instance to your Mattermost instance to forward real-time chat notifications from Teams to Mattermost. * :doc:`Microsoft Teams Meetings interoperability ` - Connect your Microsoft Teams Meetings instance to your Mattermost instance to start and join voice calls, video calls, and use screen sharing without leaving Mattermost. * :doc:`ServiceNow interoperability ` - Connect your ServiceNow instance to your Mattermost instance to subscribe to record changes in ServiceNow and manage them in Mattermost. diff --git a/source/guides/preferences.rst b/source/guides/preferences.rst index 0eaa6e006ea..fc62d1c56d4 100644 --- a/source/guides/preferences.rst +++ b/source/guides/preferences.rst @@ -26,6 +26,7 @@ Learn more Manage your display options Manage your sidebar options Manage advanced options + Manage your calls preferences Customize your desktop app experience Connect to multiple workspaces @@ -38,5 +39,6 @@ Learn more * :doc:`Customize your display options ` - Customize your Mattermost display to suit your preferences. * :doc:`Manage your sidebar options ` - Customize your Mattermost channel sidebar to suit your preferences. * :doc:`Manage advanced options ` - Customize advanced Mattermost user options to suit your preferences. +* :doc:`Manage your calls preferences ` - Custome Mattermost Calls to suit your preferences. * :doc:`Customize your desktop app experience ` - Learn about additional preferences available only in the desktop app. * :doc:`Connect to multiple Mattermost workspaces ` - Learn how to connect to multiple Mattermost workspaces using the Mattermost desktop or mobile app. \ No newline at end of file diff --git a/source/guides/repeatable-processes.rst b/source/guides/repeatable-processes.rst index b2f222653e2..0d42514a14a 100644 --- a/source/guides/repeatable-processes.rst +++ b/source/guides/repeatable-processes.rst @@ -4,6 +4,10 @@ Build repeatable processes .. include:: ../_static/badges/ent-cloud-selfhosted.rst :start-after: :nosearch: +.. important:: + + Mattermost v10 introduces Playbooks v2 for all Enterprise licensed customers. New Playbooks features & security updates will only be added to Playbooks v2 moving forward; however, Playbooks v1 will be maintained for Team Edition and Professional instances running :doc:`supported v9.x Mattermost server releases
`. + Use collaborative playbooks in Mattermost to provide structure, monitoring and automation for repeatable, team-based processes integrated with the Mattermost platform. Playbooks are :doc:`configurable checklists ` for teams to achieve :doc:`specific and predictable outcomes `, such as incident response, software release management, and logistical operations. Playbooks monitor channels for keywords or user actions to trigger a structured process, which brings up a set of individual or shared tasks, each associated with manual or automated actions. As playbooks are executed, some may have requirements for :doc:`broadcasting status updates to stakeholders ` at regular intervals, to populate workflow dashboards by conducting :ref:`retrospectives ` after the core process is complete, or other customer requirements as exit criteria for a :doc:`playbook “run” `. diff --git a/source/install/download-latest-tarball.rst b/source/install/download-latest-tarball.rst index 2c0112e6ca7..171921c7ea9 100644 --- a/source/install/download-latest-tarball.rst +++ b/source/install/download-latest-tarball.rst @@ -9,7 +9,7 @@ Using ``wget``, download the Mattermost Server release you want to install. .. code-block:: sh - wget https://releases.mattermost.com/9.11.1/mattermost-9.11.1-linux-amd64.tar.gz + wget https://releases.mattermost.com/10.0.0/mattermost-10.0.0-linux-amd64.tar.gz .. tab:: Current ESR diff --git a/source/integrate/microsoft-calendar-interoperability.rst b/source/integrate/microsoft-calendar-interoperability.rst index 3981a3a6ca8..6ed8fc01fbd 100644 --- a/source/integrate/microsoft-calendar-interoperability.rst +++ b/source/integrate/microsoft-calendar-interoperability.rst @@ -72,6 +72,18 @@ Create a Mattermost App in Azure You're all set for configuration in the Azure portal. +Install the Microsoft Calendar integration +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +1. Log in to your Mattermost workspace as a system administrator. +2. In Mattermost, from the Product menu |product-list|, select **App Marketplace**. +3. Search for or scroll to Microsoft Calendar, and select **Install**. +4. Once installed, select **Configure**. You're taken to the System Console, directly to the **Microsoft Calendar** integration page, under **Plugins**. + +.. note:: + + From Mattermost v9.11.2 (ESR) and Mattermost Cloud v10, this plugin is pre-packaged with the Mattermost Server. If your Mattermost deployment is on a release prior to v9.11.2, download the `latest plugin binary release `_, and upload it to your server via **System Console > Plugin Management**. + Enable and configure the Microsoft Calendar integration in Mattermost ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -82,10 +94,6 @@ Enable and configure the Microsoft Calendar integration in Mattermost 2. In Mattermost, go to **System Console > Plugins > Microsoft Calendar** to enable this integration. -.. note:: - - From Mattermost v10, this plugin is pre-packaged with the Mattermost Server. If your Mattermost deployment is on a release prior to v10, download the `latest plugin binary release `, and upload it to your server via **System Console > Plugin Management**. - 3. Copy the **Application (client) ID** and **Directory (tenant) ID** from the Azure portal. 4. In Mattermost, enter the following values in the fields provided. Select **Save** to apply the configuration: diff --git a/source/integrate/microsoft-teams-interoperability.rst b/source/integrate/microsoft-teams-interoperability.rst index 19c46f79302..77a0bf196df 100644 --- a/source/integrate/microsoft-teams-interoperability.rst +++ b/source/integrate/microsoft-teams-interoperability.rst @@ -99,6 +99,10 @@ Install and configure the Microsoft Teams integration in Mattermost See the :ref:`Microsoft Teams plugin configuration settings ` documentation for additional configuration options. +.. note:: + + From Mattermost v9.11.2 (ESR) and Mattermost Cloud v10, v2.0 of this plugin is pre-packaged with the Mattermost Server. If your Mattermost deployment is on a release prior to v9.11.2, download the `latest plugin binary release `_, and upload it to your server via **System Console > Plugin Management**. + Monitor performance -------------------- diff --git a/source/integrate/microsoft-teams-meetings-interoperability.rst b/source/integrate/microsoft-teams-meetings-interoperability.rst index 0c73738eb2a..bdae4064a79 100644 --- a/source/integrate/microsoft-teams-meetings-interoperability.rst +++ b/source/integrate/microsoft-teams-meetings-interoperability.rst @@ -62,6 +62,18 @@ Create a Mattermost App in Azure You're all set for configuration inside of the Azure portal. +Install the Microsoft Teams Meetings integration +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +1. Log in to your Mattermost workspace as a system administrator. +2. In Mattermost, from the Product menu |product-list|, select **App Marketplace**. +3. Search for or scroll to MS Teams Meetings, and select **Install**. +4. Once installed, select **Configure**. You're taken to the System Console, directly to the **MS Teams Meetings** integration page, under **Plugins**. + +.. note:: + + From Mattermost v9.11.2 (ESR) and Mattermost Cloud v10, this plugin is pre-packaged with the Mattermost Server. If your Mattermost deployment is on a release prior to v9.11.2, download the `latest plugin binary release `_, and upload it to your server via **System Console > Plugin Management**. + Enable and configure the Microsoft Teams Meetings integration in Mattermost ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -70,11 +82,7 @@ Enable and configure the Microsoft Teams Meetings integration in Mattermost .. image:: ../images/ms-teams-meetings-copy-ids.png :alt: In Azure, copy the Client ID and Tenant ID values. -2. In Mattermost, go to **System Console > Plugins > Microsoft Calendar** to enable this integration. - -.. note:: - - From Mattermost v10, this plugin is pre-packaged with the Mattermost Server. If your Mattermost deployment is on a release prior to v10, download the `latest plugin binary release `, and upload it to your server via **System Console > Plugin Management**. +2. In Mattermost, go to **System Console > Plugins > MS Teams Meetings** to enable this integration. 3. In Mattermost, enter the following values in the fields provided. Select **Save** to apply the configuration: diff --git a/source/integrate/playbooks-for-microsoft-teams.rst b/source/integrate/playbooks-for-microsoft-teams.rst index b9b601b7f33..b1f52db2090 100644 --- a/source/integrate/playbooks-for-microsoft-teams.rst +++ b/source/integrate/playbooks-for-microsoft-teams.rst @@ -58,8 +58,8 @@ To add the **@msteams** bot as a participant to a playbook run: 1. Ensure the **@msteams** bot is a member of the team to add it to a playbook or run. 2. Find the active run in Mattermost Playbooks (or go to the associated run channel). -2. Select the **Participants** in the right-hand sidebar. -3. Add the **@msteams** bot as a new participant. +3. Select the **Participants** in the right-hand sidebar. +4. Add the **@msteams** bot as a new participant. Playbooks and runs that include the **@msteams** bot as a participant are visible to users in Microsoft Teams. diff --git a/source/manage/common-support-packet.rst b/source/manage/common-support-packet.rst index 6ab2129f6c4..0ceb16931b7 100644 --- a/source/manage/common-support-packet.rst +++ b/source/manage/common-support-packet.rst @@ -1,6 +1,6 @@ :nosearch: -Use the System Console or the :ref:`mmctl system supportpacket ` command to generate a Mattermost Support Packet that includes configuration information, logs, plugin details, and data on external dependencies. Confidential data, such as passwords, are automatically stripped. +Use the System Console or the :ref:`mmctl system supportpacket ` command to generate a Mattermost Support Packet that includes configuration information, logs, plugin details, and data on external dependencies across all nodes in a high-availability cluster. Confidential data, such as passwords, are automatically stripped. Contents of a Support Packet ---------------------------- @@ -17,6 +17,7 @@ A Mattermost Support Packet can contain the following files: .. note:: + - Each node in the cluster of a :doc:`high availability ` deployment has its own ``mattermost.log`` file. - LDAP groups are not included during Support Packet generation. Only ``LDAP Version`` and ``LDAP Vendor`` are included when present. These values are included in the ``support_packet.yaml`` file. - From Mattermost v9.11, ``LDAP Vendor`` errors are included in the Support Packet. If fetching the LDAP Vendor name fails, the Support Packet generation includes the error in ``warning.txt``. If no LDAP Vendor name is found, the Support Packet lists them as ``unknown``. diff --git a/source/manage/mmctl-command-line-tool.rst b/source/manage/mmctl-command-line-tool.rst index 48657fd4570..3fccaa0cce8 100644 --- a/source/manage/mmctl-command-line-tool.rst +++ b/source/manage/mmctl-command-line-tool.rst @@ -943,9 +943,6 @@ mmctl channel delete Permanently delete channels along with all related information including posts from the database. -.. note:: - Requires the :ref:`Enable API Channel Deletion ` configuration setting to be enabled. If this configuration setting is disabled, attempting to delete the channel using mmctl fails. - **Format** .. code-block:: sh @@ -5468,9 +5465,6 @@ mmctl team delete Permanently delete a team along with all related information including posts from the database. -.. note:: - Requires the :ref:`Enable API Team Deletion ` configuration setting to be enabled. If this configuration setting is disabled, attempting to delete the team using mmctl fails. - **Format** .. code-block:: sh @@ -6224,9 +6218,6 @@ mmctl user delete Permanently delete users along with all related information including posts from the database. -.. note:: - Requires the :ref:`Enable API User Deletion ` configuration setting to be enabled. If this configuration setting is disabled, attempting to delete the user using mmctl fails. - **Format** .. code-block:: sh diff --git a/source/manage/telemetry.rst b/source/manage/telemetry.rst index bbbe71ec0f4..64606a7e456 100644 --- a/source/manage/telemetry.rst +++ b/source/manage/telemetry.rst @@ -89,7 +89,7 @@ Server Configuration Settings **Type values (enumerated integer and enumerated boolean)** - **ServiceSettings**: enum WebserverMode, bool EnableSecurityFixAlert, bool EnableInsecureOutgoingConnections, bool EnableIncomingWebhooks, bool EnableOutgoingWebhooks, bool EnableCommands, bool EnableDeveloper, bool EnableOnlyAdminIntegrations, bool EnablePostUsernameOverride, bool EnablePostIconOverride, bool EnableCustomEmoji, enum RestrictCustomEmojiCreation, bool EnableTesting, bool DeveloperFlags, bool EnableClientPerformanceDebugging, bool EnableMultifactorAuthentication, bool EnableOAuthServiceProvider, enum OutgoingIntegrationRequestsDefaultTimeout, enum ConnectionSecurity, bool UseLetsEncrypt, bool Forward80To443, enum ConnectionSecurity, bool TLSStrictTransport, bool EnforceMultifactorAuthentication, bool EnableUserTypingMessages, bool TimeBetweenUserTypingUpdatesMilliseconds, bool EnablePostSearch, bool EnableUserStatuses, bool EnableChannelViewMessages, bool EnableEmojiPicker, bool EnableGifPicker, bool EnableAuthenticationTransfer, enum TeammateNameDisplay, bool EnableUserAccessTokens, enum MaximumLoginAttempts, bool ExtendSessionLengthWithActivity, enum SessionLengthWebInHours, enum SessionLengthMobileInHours, enum SessionLengthSSOInHours, int SessionCacheInMinutes, enum SessionIdleTimeoutInMinutes, enum TimeBetweenUserTypingUpdatesMilliseconds, enum ClusterLogTimeoutMilliseconds, bool CloseUnusedDirectMessages, bool EnablePreviewFeatures, bool EnableTutorial, bool EnableOnboarding, bool ExperimentalEnableDefaultChannelLeaveJoinMessages, bool ExperimentalGroupUnreadChannels, bool AllowCookiesForSubdomains, bool EnableAPITeamDeletion, bool EnableAPITriggerAdminNotifications, bool EnableAPIUserDeletion, bool EnableAPIChannelDeletion, bool ExperimentalEnableHardenedMode, bool DisableLegacyMFA, bool ExperimentalStrictCSRFEnforcement, bool EnableEmailInvitations, bool ExperimentalChannelOrganization, bool EnableLegacySidebar, bool CorsAllowCredentials, bool CorsDebug, bool DisableBotsWhenOwnerIsDeactivated, bool EnableBotAccountCreation, bool RestrictLinkPreviews, bool EnablePermalinkPreviews, bool EnableSVGs, bool EnableLatex, bool EnableInlineLatex, bool EnableOpenTracing, bool Directory, bool RetentionDays, bool EnableLocalMode; **TeamSettings**: bool EnableUserCreation, bool EnableTeamCreation, bool RestrictTeamNames, bool EnableOpenServer, bool EnableUserDeactivation, bool EnableCustomBrand, bool RestrictDirectMessage, enum MaxNotificationsPerChannel, bool EnableConfirmNotificationsToChannel; enum MaxUsersPerTeam, enum MaxChannelsPerTeam, bool EnableJoinLeaveMessageByDefault, bool EnableCustomUserStatuses, bool EnableLastActiveTime, bool RefreshPostStatsRunTime, bool ExperimentalTownSquareIsReadOnly, bool ExperimentalHideTownSquareinLHS, bool EnableXToLeaveChannelsFromLHS, bool ExperimentalEnableAutomaticReplies, bool ExperimentalViewArchivedChannels, bool LockTeammateNameDisplay, bool MaxFieldSize; **ClientRequirementSettings**: enum AndroidLatestVersion; **GuestAccountsSettings**: bool Enable, bool AllowEmailAccounts, bool EnforceMultifactorAuthentication; **SqlSettings**: enum DriverName, bool Trace, enum ConnMaxIdleTimeMilliseconds, bool ConnMaxLifetimeMilliseconds; enum MaxOpenConns, enum QueryTimeout, bool DisableDatabaseSearch; **LogSettings**: bool EnableConsole, enum ConsoleLevel, bool ConsoleJson, bool EnableFile, enum FileLevel, bool FileJson, bool EnableWebhookDebugging; **NotificationLogSettings**: bool EnableConsole, bool ConsoleLevel, bool ConsoleJson, bool EnableFile, bool FileLevel, bool FileJson **PasswordSettings**: bool Lowercase, bool Number, bool Uppercase, bool Symbol, enum MinimumLength; **FileSettings**: bool EnablePublicLink, enum DriverName, enum MaxFileSize, enum FileSettings.MaxImageResolution, enum MaxImageDecoderConcurrency, bool FileSettings.ExtractContent, bool FileSettings.ArchiveRecursion, bool AmazonS3SSL, bool AmazonS3SignV2, bool AmazonS3SSE, bool AmazonS3Trace, bool MaximumPayloadSizeBytes, bool EnableFileAttachments, bool EnableMobileUpload, bool EnableMobileDownload; **EmailSettings**: bool EnableSignUpWithEmail, bool EnableSignInWithEmail, bool EnableSignInWithUsername, bool RequireEmailVerification, bool SendEmailNotifications, bool UseChannelInEmailNotifications, bool EmailNotificationContentsType, bool EnableSMTPAuth, enum ConnectionSecurity, bool SendPushNotifications, enum PushNotificationContents, bool EnableEmailBatching, bool SkipServerCertificateVerification, enum EmailBatchingBufferSize, enum EmailBatchingInterval, bool EnablePreviewModeBanner, enum SMTPServerTimeout; **MessageExportSettings**: bool DownloadExportResults; **RateLimitSettings**: bool EnableRateLimiter, bool VaryByRemoteAddr, bool VaryByUser, enum PerSec, enum MaxBurst, enum MemoryStoreSize; **PrivacySettings**: bool ShowEmailAddress, bool ShowFullName; **ThemeSettings**: bool EnableThemeSelection, bool AllowCustomThemes; **GitLabSettings**: bool Enable; **GoogleSettings**: bool Enable; **Office365Settings**: bool Enable; **SupportSettings**: bool CustomTermsOfServiceEnabled; enum CustomTermsOfServiceReAcceptancePeriod; **LdapSettings**: bool Enable, bool EnableSync, enum ConnectionSecurity, bool SkipCertificateVerification, enum SyncIntervalMinutes, enum QueryTimeout, enum MaxPageSize, bool EnableAdminFilter; **ComplianceSettings**: bool Enable, bool EnableDaily; **LocalizationSettings**: enum DefaultServerLocale, enum DefaultClientLocale, enum AvailableLocales; **SamlSettings**: bool Enable, bool EnableSyncWithLdap, bool IgnoreGuestsLdapSync, bool EnableSyncWithLdapIncludeAuth, bool Verify, bool Encrypt, bool SignRequest, bool EnableAdminFilter; **ClusterSettings**: bool Enable, bool UseIpAddress, bool ReadOnlyConfig, bool EnableExperimentalGossipEncryption, bool EnableGossipCompression; **MetricsSettings**: bool Enable, bool EnableClientMetrics, bool EnableNotificationMetrics, enum BlockProfileRate; **WebrtcSettings** (only in v5.5 and earlier): bool Enable; **ExperimentalSettings** bool ClientSideCertEnable, bool EnablePostMetadata, bool LinkMetadataTimeoutMilliseconds, bool EnableClickToReply, bool RestrictSystemAdmin, bool CloudBilling, bool RemoteClusters, bool EnableSharedChannels, bool EnableRemoteClusterService, bool Disableappbar, bool AllowSyncedDrafts; **AnnouncementSettings**: bool EnableBanner, bool AllowBannerDismissal, bool AdminNoticesEnabled, bool UserNoticesEnabled; **ElasticsearchSettings**: bool EnableIndexing, bool EnableSearching, bool Sniff, enum PostIndexReplicas, enum PostIndexShards, enum LiveIndexingBatchSize, enum BatchSize, bool SkipTLSVerification, bool Trace; **PluginSettings**: bool Enable, bool EnableUploads, bool EnableHealthCheck, bool EnableMarketplace, bool EnableRemoteMarketplace, bool AutomaticPrepackagedPlugins, bool RequirePluginSignature; **DataRetentionSettings**: bool EnableMessageDeletion, bool MessageRetentionDays, bool AllowInsecureDownloadUrl, bool EnableFileDeletion, bool FileRetentionDays, enum DeletionJobStartTime; **MessageExportSettings**: bool EnableExport, enum ExportFormat, enum DailyRunTime, enum ExportFromTimestamp, enum BatchSize, enum GlobalRelaySettings.CustomerType; **ExperimentalAuditSettings**: bool SysLogEnabled, bool SysLogInsecure, enum SysLogMaxQueueSize, bool FileEnabled, enum FileMaxSizeMB, enum FileMaxAgeDays, bool FileMaxBackups, bool FileCompress, enum FileMaxQueueSize; **BleveSettings**: bool EnableIndexing, bool EnableSearching, bool EnableAutocomplete, enum BatchSize; bool FeatureFlags + **ServiceSettings**: enum WebserverMode, bool EnableSecurityFixAlert, bool EnableInsecureOutgoingConnections, bool EnableIncomingWebhooks, bool EnableOutgoingWebhooks, bool EnableCommands, bool EnableDeveloper, bool EnableOnlyAdminIntegrations, bool EnablePostUsernameOverride, bool EnablePostIconOverride, bool EnableCustomEmoji, enum RestrictCustomEmojiCreation, bool EnableTesting, bool DeveloperFlags, bool EnableClientPerformanceDebugging, bool EnableMultifactorAuthentication, bool EnableOAuthServiceProvider, enum OutgoingIntegrationRequestsDefaultTimeout, enum ConnectionSecurity, bool UseLetsEncrypt, bool Forward80To443, enum ConnectionSecurity, bool TLSStrictTransport, bool EnforceMultifactorAuthentication, bool EnableUserTypingMessages, bool TimeBetweenUserTypingUpdatesMilliseconds, bool EnablePostSearch, bool EnableUserStatuses, bool EnableChannelViewMessages, bool EnableEmojiPicker, bool EnableGifPicker, bool EnableAuthenticationTransfer, enum TeammateNameDisplay, bool EnableUserAccessTokens, enum MaximumLoginAttempts, bool ExtendSessionLengthWithActivity, enum SessionLengthWebInHours, enum SessionLengthMobileInHours, enum SessionLengthSSOInHours, int SessionCacheInMinutes, enum SessionIdleTimeoutInMinutes, enum TimeBetweenUserTypingUpdatesMilliseconds, enum ClusterLogTimeoutMilliseconds, bool CloseUnusedDirectMessages, bool EnablePreviewFeatures, bool EnableTutorial, bool EnableOnboarding, bool ExperimentalEnableDefaultChannelLeaveJoinMessages, bool ExperimentalGroupUnreadChannels, bool AllowCookiesForSubdomains, bool EnableAPITeamDeletion, bool EnableAPITriggerAdminNotifications, bool EnableAPIUserDeletion, bool EnableAPIChannelDeletion, bool ExperimentalEnableHardenedMode, bool DisableLegacyMFA, bool ExperimentalStrictCSRFEnforcement, bool EnableEmailInvitations, bool ExperimentalChannelOrganization, bool EnableLegacySidebar, bool CorsAllowCredentials, bool CorsDebug, bool DisableBotsWhenOwnerIsDeactivated, bool EnableBotAccountCreation, bool RestrictLinkPreviews, bool EnablePermalinkPreviews, bool EnableSVGs, bool EnableLatex, bool EnableInlineLatex, bool EnableOpenTracing, bool Directory, bool RetentionDays, bool EnableLocalMode; **TeamSettings**: bool EnableUserCreation, bool EnableTeamCreation, bool RestrictTeamNames, bool EnableOpenServer, bool EnableUserDeactivation, bool EnableCustomBrand, bool RestrictDirectMessage, enum MaxNotificationsPerChannel, bool EnableConfirmNotificationsToChannel; enum MaxUsersPerTeam, enum MaxChannelsPerTeam, bool EnableJoinLeaveMessageByDefault, bool EnableCustomUserStatuses, bool EnableLastActiveTime, bool RefreshPostStatsRunTime, bool ExperimentalTownSquareIsReadOnly, bool ExperimentalHideTownSquareinLHS, bool EnableXToLeaveChannelsFromLHS, bool ExperimentalEnableAutomaticReplies, bool ExperimentalViewArchivedChannels, bool LockTeammateNameDisplay, bool MaxFieldSize; **ClientRequirementSettings**: enum AndroidLatestVersion; **GuestAccountsSettings**: bool Enable, bool AllowEmailAccounts, bool EnforceMultifactorAuthentication; **SqlSettings**: enum DriverName, bool Trace, enum ConnMaxIdleTimeMilliseconds, bool ConnMaxLifetimeMilliseconds; enum MaxOpenConns, enum QueryTimeout, bool DisableDatabaseSearch; **LogSettings**: bool EnableConsole, enum ConsoleLevel, bool ConsoleJson, bool EnableFile, enum FileLevel, bool FileJson, bool EnableWebhookDebugging; **NotificationLogSettings**: bool EnableConsole, bool ConsoleLevel, bool ConsoleJson, bool EnableFile, bool FileLevel, bool FileJson **PasswordSettings**: bool Lowercase, bool Number, bool Uppercase, bool Symbol, enum MinimumLength; **FileSettings**: bool EnablePublicLink, enum DriverName, enum MaxFileSize, enum FileSettings.MaxImageResolution, enum MaxImageDecoderConcurrency, bool FileSettings.ExtractContent, bool FileSettings.ArchiveRecursion, bool AmazonS3SSL, bool AmazonS3SignV2, bool AmazonS3SSE, bool AmazonS3Trace, bool MaximumPayloadSizeBytes, bool MaximumPayloadSizeBytes, bool EnableFileAttachments, bool EnableMobileUpload, bool EnableMobileDownload; **EmailSettings**: bool EnableSignUpWithEmail, bool EnableSignInWithEmail, bool EnableSignInWithUsername, bool RequireEmailVerification, bool SendEmailNotifications, bool UseChannelInEmailNotifications, bool EmailNotificationContentsType, bool EnableSMTPAuth, enum ConnectionSecurity, bool SendPushNotifications, enum PushNotificationContents, bool EnableEmailBatching, bool SkipServerCertificateVerification, enum EmailBatchingBufferSize, enum EmailBatchingInterval, bool EnablePreviewModeBanner, enum SMTPServerTimeout; **MessageExportSettings**: bool DownloadExportResults; **RateLimitSettings**: bool EnableRateLimiter, bool VaryByRemoteAddr, bool VaryByUser, enum PerSec, enum MaxBurst, enum MemoryStoreSize; **PrivacySettings**: bool ShowEmailAddress, bool ShowFullName; **ThemeSettings**: bool EnableThemeSelection, bool AllowCustomThemes; **GitLabSettings**: bool Enable; **GoogleSettings**: bool Enable; **Office365Settings**: bool Enable; **SupportSettings**: bool CustomTermsOfServiceEnabled; enum CustomTermsOfServiceReAcceptancePeriod; **LdapSettings**: bool Enable, bool EnableSync, enum ConnectionSecurity, bool SkipCertificateVerification, enum SyncIntervalMinutes, enum QueryTimeout, enum MaxPageSize, bool EnableAdminFilter; **ComplianceSettings**: bool Enable, bool EnableDaily; **LocalizationSettings**: enum DefaultServerLocale, enum DefaultClientLocale, enum AvailableLocales; **SamlSettings**: bool Enable, bool EnableSyncWithLdap, bool IgnoreGuestsLdapSync, bool EnableSyncWithLdapIncludeAuth, bool Verify, bool Encrypt, bool SignRequest, bool EnableAdminFilter; **ClusterSettings**: bool Enable, bool UseIpAddress, bool ReadOnlyConfig, bool EnableExperimentalGossipEncryption, bool EnableGossipCompression; **MetricsSettings**: bool Enable, bool EnableClientMetrics, bool EnableNotificationMetrics, enum BlockProfileRate; **WebrtcSettings** (only in v5.5 and earlier): bool Enable; **ExperimentalSettings** bool ClientSideCertEnable, bool EnablePostMetadata, bool LinkMetadataTimeoutMilliseconds, bool EnableClickToReply, bool RestrictSystemAdmin, bool CloudBilling, bool RemoteClusters, bool EnableSharedChannels, bool EnableRemoteClusterService, bool Disableappbar, bool AllowSyncedDrafts; **AnnouncementSettings**: bool EnableBanner, bool AllowBannerDismissal, bool AdminNoticesEnabled, bool UserNoticesEnabled; **ElasticsearchSettings**: bool EnableIndexing, bool EnableSearching, bool Sniff, enum PostIndexReplicas, enum PostIndexShards, enum LiveIndexingBatchSize, enum BatchSize, bool SkipTLSVerification, bool Trace; **PluginSettings**: bool Enable, bool EnableUploads, bool EnableHealthCheck, bool EnableMarketplace, bool EnableRemoteMarketplace, bool AutomaticPrepackagedPlugins, bool RequirePluginSignature; **DataRetentionSettings**: bool EnableMessageDeletion, bool MessageRetentionDays, bool AllowInsecureDownloadUrl, bool EnableFileDeletion, bool FileRetentionDays, enum DeletionJobStartTime; **MessageExportSettings**: bool EnableExport, enum ExportFormat, enum DailyRunTime, enum ExportFromTimestamp, enum BatchSize, enum GlobalRelaySettings.CustomerType; **ExperimentalAuditSettings**: bool SysLogEnabled, bool SysLogInsecure, enum SysLogMaxQueueSize, bool FileEnabled, enum FileMaxSizeMB, enum FileMaxAgeDays, bool FileMaxBackups, bool FileCompress, enum FileMaxQueueSize; **BleveSettings**: bool EnableIndexing, bool EnableSearching, bool EnableAutocomplete, enum BatchSize; bool FeatureFlags **Counts (integer)** diff --git a/source/preferences/customize-your-channel-sidebar.rst b/source/preferences/customize-your-channel-sidebar.rst index 23bbff7ba8c..d191e06d42e 100644 --- a/source/preferences/customize-your-channel-sidebar.rst +++ b/source/preferences/customize-your-channel-sidebar.rst @@ -4,7 +4,7 @@ Customize your channel sidebar .. include:: ../_static/badges/allplans-cloud-selfhosted.rst :start-after: :nosearch: -Conversations in Mattermost are crucial to company productivity and success. Keeping conversations organized in the sidebar creates an efficient workplace. You can customize your own channel sidebar in a browser or using the desktop app based on how you use Mattermost. Customizations you make are only visible to you, are visible when using the mobile app, and won't affect what your teammates see in their sidebars. +Conversations in Mattermost are crucial to company productivity and success. Keeping conversations organized in the sidebar creates an efficient workplace. Using a web browser or the desktop app, you can customize your own channel sidebar based on how you prefer to use Mattermost. Customizations you make are only visible to you, are visible when using the mobile app, and won't affect what your teammates see in their sidebars. Here's how your sidebar is set up by default: diff --git a/source/preferences/customize-your-theme.rst b/source/preferences/customize-your-theme.rst index 2b3b7329bc5..3a945ef12b4 100644 --- a/source/preferences/customize-your-theme.rst +++ b/source/preferences/customize-your-theme.rst @@ -16,13 +16,24 @@ To customize your Mattermost theme: .. tab:: Web/desktop - Select the **Settings** |gear| icon, then go to **Display > Theme**. Select **Theme Colors** to choose from five standard themes designed by the Mattermost team. + Select the **Settings** |gear| icon, then go to **Display > Theme**. Select **Theme Colors** to choose from five standard themes designed by the Mattermost team. - Using Mattermost in a browser or the desktop app, you can customize a standard theme further to truly make it your own. After selecting a standard theme, select **Custom Theme** and modify your color choices based on your preferences. See the `custom themes <#custom-themes>`__ documentation to learn what's configurable, and see the `custom theme examples <#custom-theme-examples>`__ documentation for inspiration. + You can customize a standard theme further to truly make it your own. After selecting a standard theme, select **Custom Theme** and modify your color choices based on your preferences. See the `custom themes <#custom-themes>`__ documentation to learn what's configurable, and see the `custom theme examples <#custom-theme-examples>`__ documentation for inspiration. .. tab:: Mobile - Tap your profile picture, and select **Settings**, then go to **Display > Theme**. + Tap **Theme** to select one of 5 standard Mattermost themes. + + .. note:: + + You can define a custom theme using Mattermost in a web browser or the desktop app. + +Import a Slack theme +-------------------- + +Using Mattermost in a web browser or the desktop app, you can select **Import theme colors from Slack** to import a Slack theme. + +In Slack, go to **Preferences > Sidebar Theme** and open the custom theme option. From there, copy the theme color vector and then paste it into the **Input Slack Theme** input box in Mattermost. Any theme settings that are not customizable in Slack will default to the “Sapphire” standard theme settings. Custom themes ------------- diff --git a/source/preferences/manage-advanced-options.rst b/source/preferences/manage-advanced-options.rst index eefbbc62a55..2f590e8d7e5 100644 --- a/source/preferences/manage-advanced-options.rst +++ b/source/preferences/manage-advanced-options.rst @@ -4,7 +4,7 @@ Manage advanced options .. include:: ../_static/badges/allplans-cloud-selfhosted.rst :start-after: :nosearch: -To customize Mattermost display options based on your preferences, select the gear icon |gear| next to your profile picture, then go to **Advanced**. +Using Mattermost in a web browser or the desktop app, you can customize advanced Mattermost options based on your preferences. Select the gear icon |gear| next to your profile picture, then select **Advanced**. Send messages on CTRL/⌘+ENTER ------------------------------ diff --git a/source/preferences/manage-your-calls-preferences.rst b/source/preferences/manage-your-calls-preferences.rst new file mode 100644 index 00000000000..958447c10b3 --- /dev/null +++ b/source/preferences/manage-your-calls-preferences.rst @@ -0,0 +1,14 @@ +Manage your Calls preferences +============================== + +.. include:: ../_static/badges/allplans-cloud-selfhosted.rst + :start-after: :nosearch: + +Using Mattermost in a web browser or the desktop app, you can customize Mattermost Calls based on your preferences. Select the gear icon |gear| next to your profile picture, then select **Calls**. + +Audio devices +------------- + +1. Select **Edit**. +2. Choose the microphone and speaker output used for Mattermost Calls. +3. Select **Save**. \ No newline at end of file diff --git a/source/preferences/manage-your-display-options.rst b/source/preferences/manage-your-display-options.rst index 7b750b9ead2..93a0381683b 100644 --- a/source/preferences/manage-your-display-options.rst +++ b/source/preferences/manage-your-display-options.rst @@ -4,37 +4,29 @@ Manage your display options .. include:: ../_static/badges/allplans-cloud-selfhosted.rst :start-after: :nosearch: -To customize Mattermost display options based on your preferences, select the gear icon |gear| next to your profile picture, then go to **Display**. +You can customize Mattermost display options based on your preferences. + +- Using Mattermost in a web browser or the desktop app, select the gear icon |gear| next to your profile picture, then go to **Display**. +- On the Mattermost mobile app, tap your profile picture, and then tap **Settings > Display**. Theme ----- .. tab:: Web/Desktop - Select **Theme** to apply a different look and feel to your Mattermost screen. + Select **Theme** to apply a different look and feel to Mattermost. Select **Theme Colors** to select one of 5 standard themes designed by the Mattermost team. Or, select **Custom Theme** to customize a standard theme even further. -.. tab:: Mobile - - Access **Settings** by tapping on your profile picture. Then, tap **Display** and **Theme**. - -Customize a theme ------------------ + See the :doc:`customize your theme ` documentation for more information. -Using Mattermost in a web browser or the desktop app, you can customize any of the standard themes by selecting a standard theme and then selecting **Custom Theme** to load the standard theme into the custom theme color selectors. - -Select **Custom Theme** to customize your theme colors and share them with others by copying and pasting theme vectors into the input box. Observe a live preview as you customize theme colors, then select **Save** to confirm your changes. Discard your changes by selecting **Cancel**, or by exiting the settings modal and selecting **Yes, Discard**. See the :doc:`customize your theme ` documentation to learn more about working with the custom theme color selectors. - -.. tip:: - In Enterprise edition, if you are a member of multiple teams, you can optionally select the checkbox **Apply new theme to all my teams** to have the theme show up across teams. Otherwise, the changes will only apply to the current team. +.. tab:: Mobile -Import a Slack theme -~~~~~~~~~~~~~~~~~~~~ + Tap **Theme** to select one of 5 standard Mattermost themes. -Using Mattermost in a web browser or the desktop app, you can select **Import theme colors from Slack** to import a Slack theme. + .. note:: -In Slack, go to **Preferences > Sidebar Theme** and open the custom theme option. From there, copy the theme color vector and then paste it into the **Input Slack Theme** input box in Mattermost. Any theme settings that are not customizable in Slack will default to the “Sapphire” standard theme settings. + You can define a custom theme using Mattermost in a web browser or the desktop app. See the :doc:`customize your theme ` documentation for more information. Threaded discussions --------------------- @@ -49,7 +41,7 @@ Depending on how your system admin has :ref:`configured threaded discussions `, including custom, collapsible channel categories, drag and drop, unread filtering, channel sorting options, and more. .. note:: - - The following sidebar settings apply to your current sidebar only. - - You must manage sidebar settings individually for every team you're a member of. - - You can manage these settings in a web browser or the desktop app. You can't manage these channel sidebar settings using the Mattermost mobile app. + - The following sidebar settings apply to your current sidebar only. + - You must manage sidebar settings individually for every team you're a member of. + - You can manage these settings in a web browser or the desktop app. You can't manage these channel sidebar settings using the Mattermost mobile app. Group unread channels separately -------------------------------- diff --git a/source/preferences/set-your-status-availability.rst b/source/preferences/set-your-status-availability.rst index 470d558810c..2faa0d056a7 100644 --- a/source/preferences/set-your-status-availability.rst +++ b/source/preferences/set-your-status-availability.rst @@ -45,11 +45,15 @@ To set your availability, select your profile picture, then specify your availab +------------------+-------------------------------------------------------------------------------------------------------------------+ | **Availability** | **Description** | +==================+===================================================================================================================+ -| |online| | - Set automatically for you when you're active on Mattermost using a browser, the desktop app, or the mobile app. | +| |online| | Online: | +| | | +| | - Set automatically for you when you're active on Mattermost using a browser, the desktop app, or the mobile app. | | | - When using the desktop app, any mouse or keyboard activity keeps your availabliliy set to **Online**. | | | - By default, notifications are sent to the browser, the desktop app, and the mobile app. | +------------------+-------------------------------------------------------------------------------------------------------------------+ -| |away| | - Set automatically for you when you've been inactive for more than 5 minutes. System admins can change this | +| |away| | Away: | +| | | +| | - Set automatically for you when you've been inactive for more than 5 minutes. System admins can change this | | | value using an experimental configuation setting called | | | :ref:`user status away timeout `. | | | | @@ -59,9 +63,13 @@ To set your availability, select your profile picture, then specify your availab | | - You can manually set yourself as **Away** any time. | | | - By default, notifications are sent to your Mattermost mobile app. | +------------------+-------------------------------------------------------------------------------------------------------------------+ -| |dnd| | - Set your availability as **Do Not Disturb** any time you don't want notifications for a period of time. | +| |dnd| | Do Not Disturb: | +| | | +| | - Set your availability as **Do Not Disturb** any time you don't want notifications for a period of time. | +------------------+-------------------------------------------------------------------------------------------------------------------+ -| |offline| | - Set automatically for you when you exit the Mattermost desktop app or close the browser window, sleep or | +| |offline| | Offline: | +| | | +| | - Set automatically for you when you exit the Mattermost desktop app or close the browser window, sleep or | | | lock your computer, or on mobile when you change apps, close the Mattermost mobile app, or lock your | | | mobile device screen. | | | - You can manually set yourself as **Offline** any time. | diff --git a/source/scale/deploy-prometheus-grafana-for-performance-monitoring.rst b/source/scale/deploy-prometheus-grafana-for-performance-monitoring.rst index 20c9d0a04a6..168a34ec606 100644 --- a/source/scale/deploy-prometheus-grafana-for-performance-monitoring.rst +++ b/source/scale/deploy-prometheus-grafana-for-performance-monitoring.rst @@ -115,6 +115,7 @@ To help you get started, you can download three sample dashboards shared in Graf - `Mattermost Performance Monitoring v2 `_, which contains detailed charts for performance monitoring including application, cluster, job server, and system metrics. - `Mattermost Notification Health Monitoring `_, which can be used to track different types of notifications sent from Mattermost. Accessing and enabling Mattermost Notification Health Monitoring requires the feature flag ``NotificationMonitoring`` to be set to ``true``. System admins can :ref:`disable notification monitoring data collection ` through the System Console. - `Mattermost Web App Performance Metrics `_, which contains detailed metrics for client-side performance, including web vitals and Mattermost-specifc metrics. +- `Mattermost Mobile App Performance Metrics `_, which contains detailed metrics for client-side mobile performance, including web vitals and Mattermost-specifc metrics. - `Mattermost Threaded Discussion Metrics `_, which contains detailed metrics on the queries involved in our threaded discussions feature. - `Mattermost Performance KPI Metrics `_, which contains key metrics for monitoring performance and system health. - `Mattermost Performance Monitoring (Bonus Metrics) `_, which contains additional metrics such as emails sent or files uploaded, which may be important to monitor in some deployments. diff --git a/source/scale/elasticsearch.rst b/source/scale/elasticsearch.rst index c9a941c7c25..4cc519c8a8d 100644 --- a/source/scale/elasticsearch.rst +++ b/source/scale/elasticsearch.rst @@ -210,6 +210,11 @@ My Elasticsearch indexes won't complete, what should I do? If you have an Elasticsearch indexing job that's paused, it's likely your Elasticsearch server has restarted. If you restart your Elasticsearch server, you must also restart Mattermost to ensure jobs are completed. If restarting the Mattermost server does not resolve the issue, `contact Mattermost Support `__. +Do I need to purge first then bulk index each time? +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Yes. + Required Permissions For Mattermost Service Account --------------------------------------------------- In "least privilege" environments you may need to further constrain the service account permissions to limit the access your Elasticsearch service account has. diff --git a/source/upgrade/important-upgrade-notes.rst b/source/upgrade/important-upgrade-notes.rst index 13f07b77c5f..7ee6d232434 100644 --- a/source/upgrade/important-upgrade-notes.rst +++ b/source/upgrade/important-upgrade-notes.rst @@ -9,15 +9,43 @@ Important Upgrade Notes - MySQL 8.0.22 contains an `issue with JSON column types `__ changing string values to integers which is preventing Mattermost from working properly. Users are advised to avoid this database version. - Upgrading the Microsoft Teams Calling plugin to v2.0.0 requires users to reconnect their accounts. - When upgrading to 7.x from a 5.x release please make sure to upgrade to 5.37.10 first for the upgrade to complete successfully. - - Disable global drafts. Admins can set the feature flag ``MM_FEATUREFLAGS_GLOBALDRAFTS`` to ``false`` to disable server-wide. It can't be disabled on a per-user basis. The code is located `here `__. - Mattermost plugins built with Go versions 1.22.0 and 1.22.1 do not work. Plugin developers should use go 1.22.2 or newer instead. - Keybase has stopped serving our Ubuntu repository signing key. If you were using it, update your installation scripts to retrieve the key as mentioned in our docs: https://docs.mattermost.com/install/install-ubuntu.html. - - Mattermost v10.0 is planned for September, 2024. See a list of planned breaking changes for this release `in the changelog `__. - Docker Content Trust (DCT) for signing Docker image artifacts will be replaced by Sigstore Cosign in our upcoming release, v10.2 (November, 2024). If you rely on artifact verification using DCT, please `transition to using Cosign `_. See the `upcoming DCT deprecation `_ Mattermost forum post for more details. +----------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | If you’re upgrading from a version earlier than... | Then... | +====================================================+==================================================================================================================================================================+ +| v10.0 | We no longer support new installations using MySQL starting in v10. All new customers and/or deployments will only be supported with the minimum supported | +| | version of the PostgreSQL database. End of support for MySQL is targeted for Mattermost v11. | +| +------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| | Apps Framework is deprecated for new installs. Please extend Mattermost using webhooks, slash commands, OAuth2 apps, and plugins. | +| +------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| | Mattermost v10 introduces Playbooks v2 for all Enterprise licensed customers. New Playbooks features and security updates will only be added to Playbooks v2 | +| | moving forward; however, Playbooks v1 will be maintained for Team Edition and Professional instances running | +| | `supported v9.x Mattermost server releases `__. | +| +------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| | Renamed ``Channel Moderation`` to ``Advanced Access Control`` in the channel management section in the **System Console**. | +| +------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| | Renamed announcement banner feature to “system-wide notifications”. | +| +------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| | Renamed “Collapsed Reply Threads” to “Threaded Discussions” in the System Console. | +| +------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| | Renamed “System Roles” to “Delegated Granular Administration” in the System Console. | +| +------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| | Renamed "Office 365" to "Entra ID" for SSO logins. | +| +------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| | Fully deprecated the ``/api/v4/image`` endpoint when the image proxy is disabled. | +| +------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| | Pre-packaged Calls plugin `v1.0.1 `__. This includes breaking changes such as allowing| +| | calls in direct message channels only on unlicensed servers. | +| +------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| | Removed deprecated ``Config.ProductSettings``, ``LdapSettings.Trace``, and ``AdvancedLoggingConfig`` configuration fields. | +| +------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| | Removed deprecated ``pageSize`` query parameter from most API endpoints. | +| +------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| | Deprecated the experimental Strict CSRF token enforcement. This feature will be fully removed in Mattermost v11. | ++----------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | v9.11 | Added support for Elasticsearch v8. Also added Beta support for Opensearch. A new config setting ``ElasticsearchSettings.Backend`` has been added to | | | differentiate between Elasticsearch and Opensearch. The default value is Elasticsearch. Note that this will break support for AWS Elasticsearch v7.10.x. The | | | official v8 client only works from Elasticsearch v7.11+ versions. Customers using AWS Elasticsearch are requested to upgrade to AWS Opensearch for future | diff --git a/source/upgrade/open-source-components.rst b/source/upgrade/open-source-components.rst index 0262e107a4f..d9f73fb238a 100644 --- a/source/upgrade/open-source-components.rst +++ b/source/upgrade/open-source-components.rst @@ -32,6 +32,7 @@ Desktop Mobile ------- +- Mattermost Mobile v2.20.0 - `View Open Source Components `__. - Mattermost Mobile v2.19.0 - `View Open Source Components `__. - Mattermost Mobile v2.18.0 - `View Open Source Components `__. - Mattermost Mobile v2.17.0 - `View Open Source Components `__. @@ -112,6 +113,7 @@ Mobile Server ------------------------------ +- Mattermost Enterprise Edition v10.0.0 - `View Open Source Components `__. - Mattermost Enterprise Edition v9.11.0 - `View Open Source Components `__. - Mattermost Enterprise Edition v9.10.0 - `View Open Source Components `__. - Mattermost Enterprise Edition v9.9.0 - `View Open Source Components `__. From 05e3e8206d9fe6cc61067f939c17c27f17dd017a Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Mon, 16 Sep 2024 08:21:15 -0400 Subject: [PATCH 2/7] Update version-archive.rst (#7396) --- source/about/version-archive.rst | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/source/about/version-archive.rst b/source/about/version-archive.rst index d60bab709e0..536b6cfdedb 100644 --- a/source/about/version-archive.rst +++ b/source/about/version-archive.rst @@ -11,6 +11,10 @@ Version archive .. tab:: Mattermost Enterprise + Mattermost Enterprise Edition v10.0.0 - `View Changelog `__ - `Download `__ + - ``https://releases.mattermost.com/10.0.0/mattermost-10.0.0-linux-amd64.tar.gz`` + - SHA-256 Checksum: ``4d6a4a3c26c6eeb6cc34dfbd02110ba9e469f8976b777ace6ac95206552a9b8b`` + - GPG Signature: https://releases.mattermost.com/10.0.0/mattermost-10.0.0-linux-amd64.tar.gz.sig Mattermost Enterprise Edition v9.11.1 *Extended Support Release (ESR)* - `View Changelog `__ - `Download `__ - ``https://releases.mattermost.com/9.11.1/mattermost-9.11.1-linux-amd64.tar.gz`` - SHA-256 Checksum: ``16045928a8828643228ec533fce998c5347f991679f551a42fe88dba5f240d96`` @@ -379,6 +383,10 @@ Version archive We generally recommend installing Enterprise Edition, even if you don't currently need a license. This provides the flexibility to seamlessly unlock Enterprise features should you need them. However, if you only want to install software with a fully open source code base, then Team Edition is the best choice for you. + Mattermost Team Edition v10.0.0 - `View Changelog `__ - `Download `__ + - ``https://releases.mattermost.com/10.0.0/mattermost-team-10.0.0-linux-amd64.tar.gz`` + - SHA-256 Checksum: ``fa56458e6aaa438b4387ff89b22b0ba390fe550f6220296542be383969b6a2f8`` + - GPG Signature: https://releases.mattermost.com/10.0.0/mattermost-team-10.0.0-linux-amd64.tar.gz.sig Mattermost Team Edition v9.11.1 *Extended Support Release (ESR)* - `View Changelog `__ - `Download `__ - ``https://releases.mattermost.com/9.11.1/mattermost-team-9.11.1-linux-amd64.tar.gz`` - SHA-256 Checksum: ``a60a8e1d3b0c153e57fca7c1997a1f48b04be377304930e958dcda886008befa`` From bd24adcf53fc5d9fdccff1a5575046f856e33862 Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Mon, 16 Sep 2024 08:31:45 -0400 Subject: [PATCH 3/7] Mobile v2.20 changelog (#7343) * Update mattermost-mobile-releases.md * Update mobile-app-changelog.md * Update mattermost-mobile-releases.md * Update mattermost-mobile-releases.md * Update mobile-app-changelog.md * Update mobile-app-changelog.md --------- Co-authored-by: Carrie Warner (Mattermost) <74422101+cwarnermm@users.noreply.github.com> --- source/about/mattermost-mobile-releases.md | 1 + source/about/mobile-app-changelog.md | 29 ++++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/source/about/mattermost-mobile-releases.md b/source/about/mattermost-mobile-releases.md index ee07a53a1f8..b962415a693 100644 --- a/source/about/mattermost-mobile-releases.md +++ b/source/about/mattermost-mobile-releases.md @@ -18,6 +18,7 @@ See the [Mobile app changelog](/about/mobile-app-changelog) for release details, | **Release** | **Released on** | **Support ends** | **Compatible with** | |:---|:---|:---|:---| +| v2.20 {ref}`FEATURE ` [Download](https://github.com/mattermost/mattermost-mobile/releases/tag/v2.20.0) \| {ref}`Changelog ` | 2024-09-16 | 2024-10-15 | {ref}`v10.0 `, {ref}`v9.11 `, {ref}`v9.10 `, {ref}`v9.9 `, {ref}`v9.5 ` | | v2.19 {ref}`FEATURE ` [Download](https://github.com/mattermost/mattermost-mobile/releases/tag/v2.19.2) \| {ref}`Changelog ` | 2024-08-16 | 2024-09-15 | {ref}`v9.11 `, {ref}`v9.10 `, {ref}`v9.9 `, {ref}`v9.8 `, {ref}`v9.5 ` | | v2.18 {ref}`FEATURE ` [Download](https://github.com/mattermost/mattermost-mobile/releases/tag/v2.18.1) \| {ref}`Changelog ` | 2024-07-16 | 2024-08-15 | {ref}`v9.10 ` | | v2.17 {ref}`FEATURE ` [Download](https://github.com/mattermost/mattermost-mobile/releases/tag/v2.17.1) \| {ref}`Changelog ` | 2024-06-16 | 2024-07-15 | {ref}`v9.9 ` | diff --git a/source/about/mobile-app-changelog.md b/source/about/mobile-app-changelog.md index 30d47c83d32..ff974048da9 100644 --- a/source/about/mobile-app-changelog.md +++ b/source/about/mobile-app-changelog.md @@ -5,6 +5,35 @@ This changelog summarizes updates to Mattermost mobile apps releases for [Mattermost](https://mattermost.com). +(release-v2-20-0)= +## 2.20.0 Release + - Release Date: September 16, 2024 + - Server Versions Supported: Server v9.5.0+ is required. Self-Signed SSL Certificates are not supported unless the user installs the CA certificate on their device. + +### Compatibility + - **Upgrade to server version v9.5.0 or later is required.** Support for server [Extended Support Release](https://docs.mattermost.com/upgrade/extended-support-release.html) (ESR) v8.1.0 has ended and upgrading to server ESR v9.5.0 or later is required. As we innovate and offer newer versions of our mobile apps, we maintain backwards compatibility only with supported server versions. Users who upgrade to the newest mobile apps while being connected to an unsupported server version can be exposed to compatibility issues, which can cause crashes or severe bugs that break core functionality of the app. + - Android operating system 7+ [is required by Google](https://android-developers.googleblog.com/2017/12/improving-app-security-and-performance.html). + - iPhone 6s devices and later with iOS 13.4+ is required. + +### Breaking Changes + - Calls: starting in Mattermost v10 and Calls plugin v1.0, calls functionality will be available in Direct Message channels only if running an unlicensed server. + +### Improvements + - Calls: added experimental support for receiving AV1 encoded screen sharing tracks. + - Calls: implemented client-side ICE candidate pairs metrics. + - Added support for SSL Pinning certificates on build your own. + - Added channel bookmarks (default off behind a feature flag). + +### Bug Fixes + - Fixed an issue with deep links that did not match the patterns of channel or permalink and were crashing the app. + +### Open Source Components + - Added ``node-html-parser`` to https://github.com/mattermost/mattermost-mobile. + +### Known Issues + - Users are unable to adjust the font size via the OS font size setting. + - Some Google Pixel phones on Android 12+ might not continue past the login screen. This is a known issue with the OS, and the current workaround is to restart the device. + (release-v2-19-2)= ## 2.19.2 Release - Release Date: August 29, 2024 From 2a943ab88f0fd213928b937da0ef15761697a41a Mon Sep 17 00:00:00 2001 From: Christopher Speller Date: Mon, 16 Sep 2024 05:48:44 -0700 Subject: [PATCH 4/7] Update docs for multi-bot LLM and name change. (#7167) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update docs for multi-bot LLM and name change. * Update docs for v1.0 * Clean up wording * Feedback fixes. * Update source/configure/enable-copilot.rst * Update source/collaborate/chat-with-copilot.rst * Update source/configure/enable-copilot.rst * Update source/configure/enable-copilot.rst * Update source/configure/enable-copilot.rst * Update source/configure/enable-copilot.rst * Update source/configure/enable-copilot.rst * Update source/configure/enable-copilot.rst * Update source/configure/enable-copilot.rst * 📝 (enable-copilot.rst): Update instructions for configuring large language models (LLMs) in Copilot The instructions for configuring LLMs in Copilot have been updated to provide more clarity and detail. The changes include specifying the need to select "Add an AI Bot" in the Copilot settings, providing more detailed instructions for integrating with Microsoft Azure's OpenAI services, and adding a new section on disabling tools. These changes aim to make the configuration process more straightforward and understandable for users. * Fix formatting * 9 comes after 8 * Update source/configure/enable-copilot.rst * Update source/configure/enable-copilot.rst * Update source/configure/enable-copilot.rst * Update source/configure/enable-copilot.rst * Update source/configure/enable-copilot.rst * Update source/configure/enable-copilot.rst * Update source/configure/enable-copilot.rst * Update source/configure/enable-copilot.rst * Formatting updates * Added LLM screenshot --------- Co-authored-by: Carrie Warner (Mattermost) <74422101+cwarnermm@users.noreply.github.com> Co-authored-by: Andrew Zigler --- source/collaborate/chat-with-copilot.rst | 40 +++++---- source/configure/enable-copilot.rst | 102 +++++++++++++++++------ source/images/multi-llm-copilot.png | Bin 0 -> 173548 bytes 3 files changed, 100 insertions(+), 42 deletions(-) create mode 100644 source/images/multi-llm-copilot.png diff --git a/source/collaborate/chat-with-copilot.rst b/source/collaborate/chat-with-copilot.rst index a1664be18ed..926b8e8908b 100644 --- a/source/collaborate/chat-with-copilot.rst +++ b/source/collaborate/chat-with-copilot.rst @@ -1,10 +1,10 @@ -Chat with Copilot (Beta) +Chat with Copilot ========================= .. include:: ../_static/badges/allplans-cloud-selfhosted.rst :start-after: :nosearch: -Overcome information overload and streamline communication and collaboration by chatting with Mattermost Copilot in your Mattermost instance. +Overcome information overload and streamline team communication and collaboration with Mattermost Copilot in your Mattermost instance. Copilot is a generative AI assistant with a flexible LLM backend that can be configured to meet your organization's needs. Copilot can summarize call recordings, threads, unread channel messages, and provide insights on any topic you're curious about. .. note:: @@ -14,28 +14,34 @@ Overcome information overload and streamline communication and collaboration by :start-after: :nosearch: Get started -~~~~~~~~~~~ +------------ -Select the **Copilot** icon in the apps bar located to the far right of the Mattermost screen to open the Copilot tab in the right pane. +Select the **Copilot** icon in Mattermost RHS (right-hand sidebar) to open the Copilot panel. .. image:: ../images/copilot-AI-RHS.webp :alt: Privately chat with Copilot inside Mattermost via the right-hand sidebar. :scale: 50 -Begin with suggested prompts, or engage in a private thread with the Copilot bot for a tailored experience. If you have follow-up questions or need further insights, simply ask! Copilot is designed to provide deeper understanding based on your inquiries. +Begin with suggested prompts, or engage in a private thread with Copilot for a tailored experience. If you have follow-up questions or need further insights, simply ask! Copilot is designed to provide deeper understanding based on your inquiries. -Copilot remembers the context for follow-on questions and requests. Access all previous conversations by selecting **View chat history**. from the Copilot pane. +Copilot remembers the context for follow-up questions and requests. Access all previous AI conversations by selecting **View chat history** from the Copilot panel. + +If your administrator has configured multiple bots, you can switch between them by selecting the bot name in the top right corner of the Copilot panel. + +.. image:: ../images/multi-llm-copilot.png + :alt: Switch between multiple bots by selecting the bot name in the top right corner of the Copilot panel. + :scale: 50 With Copilot you can perform the following tasks: -- Summarize your call recordings -- Turn long threads & unread channel messages into concise summarizes -- Stay on top of all of your commucations by identifying next steps, decisions made, and pinpointing unanswered questions +- Summarize your call and meeting recordings +- Turn long threads & unread channel messages into concise summaries +- Stay on top of your messages by identifying next steps, decisions, and unanswered questions - Extract learnings and transform content into charts, resources, documentation, articles, and more -- Dig further into any topic that's on your mind +- Dig further into any topic by asking for insights Summarize Mattermost call recordings -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +------------------------------------ .. include:: ../_static/badges/ent-only.rst :start-after: :nosearch: @@ -58,7 +64,7 @@ To summarize a Mattermost call recording: :scale: 50 Summarize threads & unread channel messages -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +------------------------------------------- .. include:: ../_static/badges/ent-only.rst :start-after: :nosearch: @@ -77,21 +83,23 @@ To summarize unread Mattermost channels: 1. In a channel with unread messages, scroll to the **New Messages** cutoff, select **Ask AI**, and then select **Summarize new messages**. 2. The channel summary is generated in the Copilot pane, and only you can view the summary. +When your system admin has :doc:`configured multiple bots `, you can switch between them by selecting one from the drop-down menu. + .. image:: ../images/Unread-Channel-Messages-Summarization-Updated-4-3.gif :alt: Quickly summarize new messages, find action opens, and seek out unanswered questions with your Copilot. Bring Copilot into any conversation -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +------------------------------------ .. include:: ../_static/badges/ent-only.rst :start-after: :nosearch: -Invoke the power of AI by @mentioning the Copilot bot (@copilot) in any thread to bring AI's capabilities to your conversation, allowing for quick extraction of information or transformation of discussions into charts, resources, documentation, articles, and more. Copilot will find action items and open questions in new messages. With the power of Mattermost integrations and interoperability, the potential to enhance your workflow is limitless. +Invoke the power of AI by @mentioning Copilot bots by their username such as ``@copilot`` in any thread to bring AI's capabilities to your conversation, allowing for quick extraction of information or transformation of discussions into charts, resources, documentation, articles, and more. Copilot will find action items and open questions in new messages. With the power of Mattermost integrations and interoperability, the potential to enhance your workflow is limitless. .. image:: ../images/Contextual-Interrogation-Updated-4-3.gif :alt: Bring your AI into the conversation. @mention your Copilot directly within any thread and use the context to work faster and smarter. Chat privately with Copilot -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +---------------------------- -In addition to chatting with Copilot in the right pane, you can also chat privately with Copilot in direct message threads like you would any other Mattermost user. \ No newline at end of file +In addition to chatting with Copilot in the right pane, you can also chat privately with Copilot in direct message threads like you would any other Mattermost user. diff --git a/source/configure/enable-copilot.rst b/source/configure/enable-copilot.rst index 54de4105ca2..6ad7553870f 100644 --- a/source/configure/enable-copilot.rst +++ b/source/configure/enable-copilot.rst @@ -1,5 +1,5 @@ -Enable Copilot (Beta) -======================= +Enable Copilot +============== .. include:: ../_static/badges/allplans-cloud-selfhosted.rst :start-after: :nosearch: @@ -9,10 +9,10 @@ Signficantly increase team productivity and decision-making speed by enhancing y Setup ------ -Mattermost AI Copilot comes preinstalled from Mattermost Server v9.7 or later. You must be a Mattermost system admin to `enable it <#enable>`__ and `configure it <#mattermost-configuration>`__ using the System Console. +Mattermost AI Copilot comes pre-installed from Mattermost Server v9.7 or later. You must be a Mattermost system admin to `enable <#enable>`__ and `configure <#mattermost-configuration>`__ it using the System Console. .. note:: - If you're running Mattermost Server v9.6 or earlier, AI Copilot must be installed using the `latest binary available for download from the plugin repository `_. For an optimized user experience and compatibility, we recommend using AI Copilot with Mattermost v9.7 and later. + If you're running Mattermost Server v9.6 or earlier, AI Copilot must be installed using the `latest binary available for download from the plugin repository `_. For an optimized user experience and compatibility, we recommend using Mattermost Copilot with Mattermost v9.7 and later. The Copilot integration is compatible with the following Mattermost Server versions: @@ -30,56 +30,106 @@ Go to **System Console > Plugins > Copilot** to enable this feature. Once the integration is installed and enabled, complete configuration in the System Console as described below, then notify your teams that they can use the Copilot in any Mattermost team or channel. Mattermost configuration -~~~~~~~~~~~~~~~~~~~~~~~~ +------------------------- With extensive customization and extensibility options, you can tailor Copilot to meet your specific needs, whether it's integrating with internal systems, customizing AI responses based on the team or project needs, or developing new capabilities that are unique to your operational requirements. You can also create custom integrations, workflows, and bots that leverage AI to meet your unique business needs. -Configure a large language model (LLM) for your Copilot integration by going to **System Console > Plugins > Copilot**. Mattermost supports the following LLMs: +Configure a large language model (LLM) for your Copilot integration by going to **System Console > Plugins > Copilot** and selecting **Add an AI Bot**. Mattermost supports the following LLMs: - `OpenAI `_ - `Anthropic (Claude) `_ - `Azure OpenAI `_ -- `OpenAI Compatible `_ +- `OpenAI-compatible (e.g., LocalAI) `_ + +.. note:: + + The ability to define multiple LLMs for your Copilot integration requires a Mattermost Enterprise license. .. tab:: Open AI 1. Obtain an `OpenAI API key `_. - 2. Select **OpenAI** in the **AI Service** dropdown. + 2. Select **OpenAI** in the **Service** dropdown. 3. Enter your OpenAI API key in the **API Key** field. - 4. Enter a model name in the **Default Model** field, such as `gpt-4` or `gpt-3.5-turbo`. - 5. (Optional) If using multiple organizations on OpenAI, specify your **Organization ID** to direct API usage and billing accordingly. + 4. Enter a model name in the **Default Model** field corresponding with the model's label in the API, such as `gpt-4o` or `gpt-3.5-turbo`. + 5. (Optional) If your API key belongs to an OpenAI organization, specify your **Organization ID**. .. tab:: Anthropic (Claude) 1. Obtain an `Anthropic API key `_. - 2. Select **Anthropic** in the **AI Service** dropdown. + 2. Select **Anthropic** in the **Service** dropdown. 3. Enter your Anthropic API key in the **API Key** field. - 4. Specify a model name in the **Default Model** field, like `claude-v1`. + 4. Specify a model name in the **Default Model** field corresponding with the model's label in the API, such as `claude-3-5-sonnet-20240620`. .. tab:: Azure OpenAI - For integrating with Microsoft Azure's OpenAI services, `see the official Azure Open AI documentation `_. + For more details about integrating with Microsoft Azure's OpenAI services, `see the official Azure OpenAI documentation `_. - 1. Get `access to Azure OpenAI `_. - 2. Create a new OpenAI resource in Azure. - 3. Ensure your model resource on Azure does not auto-update. - 4. In Mattermost, choose **OpenAI Compatible** in the **AI Service** dropdown. - 5. Enter your Azure resource's URL in the **API URL** field. - 6. Input your Azure resource API key in the **API Key** field. - 7. Specify your model name in the **Default Model** field, for example, `gpt-3.5-turbo`. + 1. Provision sufficient `access to Azure OpenAI `_ for your organization and access your `Azure portal `_. + 2. If you do not already have one, deploy an Azure AI Hub resource within Azure AI Studio + 3. Once the deployment is complete, navigate to the resource and select **Launch Azure AI Studio**. + 4. In the side navigation pane, select **Deployments** under **Shared resources**. + 5. Select **Deploy model** then **Deploy base model**. + 6. Select your model, such as `gpt-4o` and select **Confirm**. + 7. Select **Deploy** to start your model. + 8. In Mattermost, select **OpenAI Compatible** in the **Service** dropdown. + 9. In the **Endpoint** panel for your new model deployment, copy the base URI of the **Target URI** (everything up to and including `.com`) and paste it in the **API URL** field in Mattermost. + 10. In the **Endpoint** panel for your new model deployment, copy the **Key** and paste it in the **API Key** field in Mattermost. + 11. In the **Deployment** panel for your new model deployment, copy the **Model name** and paste it in the **Default Model** field in Mattermost. .. tab:: OpenAI Compatible - The OpenAI Compatible option allows integration with any OpenAI-compatible LLM provider: + The OpenAI Compatible option allows integration with any OpenAI-compatible LLM provider, such as `Ollama `_: - 1. Deploy your model, for example, on LocalAI. + 1. Deploy your model, for example, on `Ollama `_. 2. Select **OpenAI Compatible** in the **AI Service** dropdown. - 3. Enter the URL to your AI service in the **API URL** field. - 4. Enter your API key in the **API Key** field. + 3. Enter the URL to your AI service from your Mattermost deployment in the **API URL** field. + 4. If using Ollama, leave the **API Key** field blank. 5. Specify your model name in the **Default Model** field. +Custom instructions +------------------- + +Text input here is included in the prompt for every request. Use this to give your bots extra context or instructions. For example, you could list all of your organization's specific acronyms so the bot knows your vernacular and users can ask for definitions. Or you could give it specialized instructions such as adopting a specific personality or following a certain workflow. By customizing the instructions for each individual bot, you can create a more tailored AI experience for your specific needs. + +Enable vision (Beta) +~~~~~~~~~~~~~~~~~~~~~ + +Enabling vision allows images that are attached to posts to be sent to the upstream LLM for analysis. This requires that your upstream LLM supports these features. Only available with OpenAI and OpenAI-compatable services. + +Disable tools (Beta) +~~~~~~~~~~~~~~~~~~~~~ + +Disabling tools will prevent the LLM from making function calls. This is useful when a model technically supports tool usage but you want to prevent it from being used within Mattermost. Try toggling this feature if you encounter unpredictable tool-related behavior with your model. + +Copilot plugin metrics +----------------------- + +Metrics for Copilot are exposed through the ``/plugins/mattermost-ai/metrics`` subpath under the existing Mattermost server metrics endpoint. This is controlled by the :ref:`Listen address for performance ` configuration setting. It defaults to port ``8067``, and the following metrics are available: + +- ``copilot_system_plugin_start_timestamp_seconds``: The time the plugin started. +- ``copilot_system_plugin_info``: The plugin version and installation ID. +- ``copilot_api_time_seconds``: How long to execute API. +- ``copilot_http_requests_total``: The total number of API requests. +- ``copilot_http_errors_total``: The total number of http API errors. +- ``copilot_llm_requests_total``: The total number of requests to upstream LLMs. + +Integrations +------------- + +Currently integrations are limited to direct messages between users and the bots. The integrations won't operate from within public, private, or group message channels. + +Jira +----- + +Issues with public Jira instances can be fetched. No configuration is required for this integration. + +GitHub +------- + +If you have the Mattermost GitHub plugin enabled, you can use the integration to fetch issues and PRs from your public and private GitHub repositories. The user must be logged in to their GitHub account through the Mattermost GitHub plugin. + Upgrade -~~~~~~~ +-------- We recommend updating this integration as new versions are released. Generally, updates are seamless and don't interrupt the user experience in Mattermost. @@ -88,4 +138,4 @@ Visit the `Releases page ` documentation for details on using Copilot to overcome information overload and streamline communication and collaboration. \ No newline at end of file +See the :doc:`chat with Copilot ` documentation for details on using Copilot to overcome information overload and streamline communication and collaboration. diff --git a/source/images/multi-llm-copilot.png b/source/images/multi-llm-copilot.png new file mode 100644 index 0000000000000000000000000000000000000000..ddccb9d3f416a87415b1d95be9e0399fa0ca6aab GIT binary patch literal 173548 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 literal 0 HcmV?d00001 From e1240c7ec19e7eaa95ff59b024ec5b3c3e1d6e01 Mon Sep 17 00:00:00 2001 From: Ibrahim Serdar Acikgoz Date: Mon, 16 Sep 2024 15:28:10 +0200 Subject: [PATCH 5/7] Add FAQ to the mysql deprecation (#7299) --- source/deploy/manual-postgres-migration.rst | 13 +--- .../deploy/postgres-migration-assist-tool.rst | 7 +- source/deploy/postgres-migration.rst | 75 ++++++++++++++++++- 3 files changed, 83 insertions(+), 12 deletions(-) diff --git a/source/deploy/manual-postgres-migration.rst b/source/deploy/manual-postgres-migration.rst index cda23b059d6..7a82fec0477 100644 --- a/source/deploy/manual-postgres-migration.rst +++ b/source/deploy/manual-postgres-migration.rst @@ -375,7 +375,7 @@ Use the following configuration for the baseline of the data migration: type json to jsonb drop typemod using remove-null-characters EXCLUDING TABLE NAMES MATCHING ~, ~, 'schema_migrations', 'db_migrations', 'db_lock', - 'Configurations', 'ConfigurationFiles', 'db_config_migrations' + 'Configurations', 'ConfigurationFiles', 'db_config_migrations', 'calls' BEFORE LOAD DO $$ ALTER SCHEMA public RENAME TO {{ .source_db }}; $$, @@ -675,13 +675,6 @@ Use the following configuration for the baseline of the data migration: pgloader calls.load > calls_migration.log Troubleshooting ------------------ - -Unsupported authentication for MySQL -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -If you are facing an error due to authentication with MySQL v8, it may be related to a `known issue `_ with pgloader. The fix is to set the default authentication method to ``mysql_native_password`` in your MySQL configuration. To do so, add the ``default-authentication-plugin=mysql_native_password`` value to your ``mysql.cnf`` file. Also, do not forget to update your user to use this authentication method. - -.. code-block:: sql +--------------- - ALTER USER ''@'%' IDENTIFIED WITH mysql_native_password BY ''; \ No newline at end of file +See :ref:`troubleshooting errors during migration from MySQL to PostgreSQL ` diff --git a/source/deploy/postgres-migration-assist-tool.rst b/source/deploy/postgres-migration-assist-tool.rst index 1de93a8b434..1e8f55b6950 100644 --- a/source/deploy/postgres-migration-assist-tool.rst +++ b/source/deploy/postgres-migration-assist-tool.rst @@ -149,4 +149,9 @@ Use ``go install`` to install the tool: .. code-block:: shell - go install github.com/mattermost/migration-assist/cmd/migration-assist@latest \ No newline at end of file + go install github.com/mattermost/migration-assist/cmd/migration-assist@latest + +Troubleshooting +--------------- + +See :ref:`troubleshooting errors during migration from MySQL to PostgreSQL ` diff --git a/source/deploy/postgres-migration.rst b/source/deploy/postgres-migration.rst index 732bc333bf9..25e5ce43ad0 100644 --- a/source/deploy/postgres-migration.rst +++ b/source/deploy/postgres-migration.rst @@ -17,4 +17,77 @@ From Mattermost v8.0, PostgreSQL is our database of choice for Mattermost to enh * :doc:`Automated migration from MySQL to PostgreSQL ` - A comprehensive set of guidelines and a ``migration-assist`` tool to streamline the migration process, alleviate potential challenges, and faciliate a smooth transition. * :doc:`Manually migrate from MySQL to PostgreSQL ` - A good option if your organization has database administrators to own the migration process, or if you want to learn what the ``migration-assist`` tool automates for you. -Mattermost customers looking for guidance tailored to their Mattermost deployment can contact a `Mattermost Expert `_ for guidance. \ No newline at end of file +Frequently asked questions +------------------------------ + +1. Can the migration-assist be run on the mattermost server? + + Technically, yes. The ``migration-assist`` tool can be run on the Mattermost server. However, it is recommended to run the tool on a separate server to avoid any performance issues. We advise running the migration against a copy of the MySQL database to ensure that the migration process does not impact the production environment. + +2. How large should the PostgreSQL server be? + + The size of the PostgreSQL server should match that of the MySQL server initially. We recommend monitoring the performance of the PostgreSQL server and adjusting the resources as needed. + +3. How large should the server running ``migration-assist`` server be? + + The tool itself is lightweight and does not require a large server. A server with 2 CPU cores and 16 GB of RAM should be sufficient for default configurations. However, you may need to adjust the resources based on the size of the MySQL database, your downtime limitations, and the configuration of ``pgloader``. + +4. Do we/will we bundle pgloader or is that a separate install? + + We do not bundle pgloader with the Mattermost server. You will need to install pgloader separately. For more information, see the :doc:`install pgloader ` documentation. + +5. Are there any other migrations available for plugins, or just Boards, Playbooks and Calls? + + We are working on providing migrations for other plugins as well such as NPS-plugin. Please stay tuned for updates. + +6. Does these processes support AWS RDS databases? + + Yes, the processes support AWS RDS databases. However, you may need to adjust the security group settings to allow the migration process to access the databases. + +Troubleshooting +--------------- + +Unsupported authentication for MySQL +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +If you are facing an error due to authentication with MySQL v8, it may be related to a `known issue `_ with pgloader. The fix is to set the default authentication method to ``mysql_native_password`` in your MySQL configuration. To do so, add the ``default-authentication-plugin=mysql_native_password`` value to your ``mysql.cnf`` file. Also, do not forget to update your user to use this authentication method. + +.. code-block:: sql + + ALTER USER ''@'%' IDENTIFIED WITH mysql_native_password BY ''; + +Errors during the pgloader command execution +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +If you encounter errors during the execution of the ``pgloader`` command, ensure that both of the databases are accessible and that the users have the necessary permissions to access the database. Do not continue with the migration if there are errors during the execution of the ``pgloader`` command. + +Also, there may be cases where ``pgloader`` continue to migration remaining tables and skip one or more tables. In such cases, it is recommended to identify issues with the table and fix them before running the ``pgloader`` command again with a clean database. It is possible to run the ``pgloader`` command with the ``--debug`` flag to get more information about the errors. + +For experienced users, it is recoverable to run the ``pgloader`` without requiring to restart the migration from scratch. In this case, you will need to manually fix the issues with the table and run the ``pgloader`` command with a tailored configuration just for those tables. Also ensure that the schema name is reverted back to ``public`` and the ``search_path`` is restored or remove necessary clauses form the configuration. + +Mattermost can't connect to the PostgreSQL database +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +If you are facing an issue where Mattermost can't connect to the PostgreSQL database, ensure that the PostgreSQL server is running and that the database is accessible. If there were errors during the execution of the ``pgloader`` command, it can fail to revert shcema name back to ``public`` or potentially restoring the ``search_path``. You can manually revert the schema name back to ``public`` and restore the ``search_path`` by running the following commands: + +.. code-block:: sql + + ALTER SCHEMA RENAME TO public; + +Also ensure that the database user has the necessary settings to have default access to the ``public`` schema. You can do this by running the following commands: + +.. code-block:: sql + + ALTER USER SET SEARCH_PATH TO 'public'; + SELECT pg_catalog.set_config('search_path', '"$user", public', false); -- should give access for the session + +You can check for the default ``search_path`` by running the following command: + +.. code-block:: sql + + SELECT boot_val FROM pg_settings WHERE name='search_path'; + +Contact Support +--------------- + +Mattermost customers looking for guidance tailored to their Mattermost deployment can contact a `Mattermost Expert `_ for guidance. From ff86b5723b7c70c191b968f5deea8f1dc281d359 Mon Sep 17 00:00:00 2001 From: Amy Blais <29708087+amyblais@users.noreply.github.com> Date: Mon, 16 Sep 2024 10:39:41 -0400 Subject: [PATCH 6/7] Fix broken link (#7402) * Update mattermost-mobile-releases.md * Update mattermost-server-releases.md * Apply suggestions from code review Co-authored-by: Carrie Warner (Mattermost) <74422101+cwarnermm@users.noreply.github.com> --------- Co-authored-by: Carrie Warner (Mattermost) <74422101+cwarnermm@users.noreply.github.com> --- source/about/mattermost-mobile-releases.md | 2 +- source/about/mattermost-server-releases.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/source/about/mattermost-mobile-releases.md b/source/about/mattermost-mobile-releases.md index b962415a693..b7404825daf 100644 --- a/source/about/mattermost-mobile-releases.md +++ b/source/about/mattermost-mobile-releases.md @@ -18,7 +18,7 @@ See the [Mobile app changelog](/about/mobile-app-changelog) for release details, | **Release** | **Released on** | **Support ends** | **Compatible with** | |:---|:---|:---|:---| -| v2.20 {ref}`FEATURE ` [Download](https://github.com/mattermost/mattermost-mobile/releases/tag/v2.20.0) \| {ref}`Changelog ` | 2024-09-16 | 2024-10-15 | {ref}`v10.0 `, {ref}`v9.11 `, {ref}`v9.10 `, {ref}`v9.9 `, {ref}`v9.5 ` | +| v2.20 {ref}`FEATURE ` [Download](https://github.com/mattermost/mattermost-mobile/releases/tag/v2.20.0) \| {ref}`Changelog ` | 2024-09-16 | 2024-10-15 | {ref}`v10.0 (release-v10.0-major-release)`, {ref}`v9.11 `, {ref}`v9.10 `, {ref}`v9.9 `, {ref}`v9.5 ` | | v2.19 {ref}`FEATURE ` [Download](https://github.com/mattermost/mattermost-mobile/releases/tag/v2.19.2) \| {ref}`Changelog ` | 2024-08-16 | 2024-09-15 | {ref}`v9.11 `, {ref}`v9.10 `, {ref}`v9.9 `, {ref}`v9.8 `, {ref}`v9.5 ` | | v2.18 {ref}`FEATURE ` [Download](https://github.com/mattermost/mattermost-mobile/releases/tag/v2.18.1) \| {ref}`Changelog ` | 2024-07-16 | 2024-08-15 | {ref}`v9.10 ` | | v2.17 {ref}`FEATURE ` [Download](https://github.com/mattermost/mattermost-mobile/releases/tag/v2.17.1) \| {ref}`Changelog ` | 2024-06-16 | 2024-07-15 | {ref}`v9.9 ` | diff --git a/source/about/mattermost-server-releases.md b/source/about/mattermost-server-releases.md index 94ff657e0ee..d322c0357c1 100644 --- a/source/about/mattermost-server-releases.md +++ b/source/about/mattermost-server-releases.md @@ -19,7 +19,7 @@ Mattermost releases a new server version on the 16th of each month in [binary fo | **Release** | **Released on** | **Support ends** | |:---|:---|:---| -| v10.0 [Download](https://releases.mattermost.com/10.0.0/mattermost-10.0.0-linux-amd64.tar.gz) \| {ref}`Changelog ` | 2024-09-16 | 2024-12-15 | +| v10.0 [Download](https://releases.mattermost.com/10.0.0/mattermost-10.0.0-linux-amd64.tar.gz) \| {ref}`Changelog (release-v10.0-major-release) | 2024-09-16 | 2024-12-15 | | v9.11 [Download](https://releases.mattermost.com/9.11.1/mattermost-9.11.1-linux-amd64.tar.gz) \| {ref}`Changelog ` | 2024-08-16 | 2025-05-15 {ref}`EXTENDED ` | | v9.10 [Download](https://releases.mattermost.com/9.10.2/mattermost-9.10.2-linux-amd64.tar.gz) \| {ref}`Changelog ` | 2024-07-16 | 2024-10-15 | | v9.9 [Download](https://releases.mattermost.com/9.9.3/mattermost-9.9.3-linux-amd64.tar.gz) \| {ref}`Changelog ` | 2024-06-14 | 2024-09-15 | From d5e63ad33e8340d99151dcfc1cde2f750fd42fdf Mon Sep 17 00:00:00 2001 From: "Carrie Warner (Mattermost)" <74422101+cwarnermm@users.noreply.github.com> Date: Mon, 16 Sep 2024 10:56:44 -0400 Subject: [PATCH 7/7] MD syntax corrections (#7404) --- source/about/mattermost-mobile-releases.md | 2 +- source/about/mattermost-server-releases.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/source/about/mattermost-mobile-releases.md b/source/about/mattermost-mobile-releases.md index b7404825daf..ada1f692d68 100644 --- a/source/about/mattermost-mobile-releases.md +++ b/source/about/mattermost-mobile-releases.md @@ -18,7 +18,7 @@ See the [Mobile app changelog](/about/mobile-app-changelog) for release details, | **Release** | **Released on** | **Support ends** | **Compatible with** | |:---|:---|:---|:---| -| v2.20 {ref}`FEATURE ` [Download](https://github.com/mattermost/mattermost-mobile/releases/tag/v2.20.0) \| {ref}`Changelog ` | 2024-09-16 | 2024-10-15 | {ref}`v10.0 (release-v10.0-major-release)`, {ref}`v9.11 `, {ref}`v9.10 `, {ref}`v9.9 `, {ref}`v9.5 ` | +| v2.20 {ref}`FEATURE ` [Download](https://github.com/mattermost/mattermost-mobile/releases/tag/v2.20.0) \| {ref}`Changelog ` | 2024-09-16 | 2024-10-15 | {ref}`v10.0 `, {ref}`v9.11 `, {ref}`v9.10 `, {ref}`v9.9 `, {ref}`v9.5 ` | | v2.19 {ref}`FEATURE ` [Download](https://github.com/mattermost/mattermost-mobile/releases/tag/v2.19.2) \| {ref}`Changelog ` | 2024-08-16 | 2024-09-15 | {ref}`v9.11 `, {ref}`v9.10 `, {ref}`v9.9 `, {ref}`v9.8 `, {ref}`v9.5 ` | | v2.18 {ref}`FEATURE ` [Download](https://github.com/mattermost/mattermost-mobile/releases/tag/v2.18.1) \| {ref}`Changelog ` | 2024-07-16 | 2024-08-15 | {ref}`v9.10 ` | | v2.17 {ref}`FEATURE ` [Download](https://github.com/mattermost/mattermost-mobile/releases/tag/v2.17.1) \| {ref}`Changelog ` | 2024-06-16 | 2024-07-15 | {ref}`v9.9 ` | diff --git a/source/about/mattermost-server-releases.md b/source/about/mattermost-server-releases.md index d322c0357c1..36cba41ea80 100644 --- a/source/about/mattermost-server-releases.md +++ b/source/about/mattermost-server-releases.md @@ -19,7 +19,7 @@ Mattermost releases a new server version on the 16th of each month in [binary fo | **Release** | **Released on** | **Support ends** | |:---|:---|:---| -| v10.0 [Download](https://releases.mattermost.com/10.0.0/mattermost-10.0.0-linux-amd64.tar.gz) \| {ref}`Changelog (release-v10.0-major-release) | 2024-09-16 | 2024-12-15 | +| v10.0 [Download](https://releases.mattermost.com/10.0.0/mattermost-10.0.0-linux-amd64.tar.gz) \| {ref}`Changelog ` | 2024-09-16 | 2024-12-15 | | v9.11 [Download](https://releases.mattermost.com/9.11.1/mattermost-9.11.1-linux-amd64.tar.gz) \| {ref}`Changelog ` | 2024-08-16 | 2025-05-15 {ref}`EXTENDED ` | | v9.10 [Download](https://releases.mattermost.com/9.10.2/mattermost-9.10.2-linux-amd64.tar.gz) \| {ref}`Changelog ` | 2024-07-16 | 2024-10-15 | | v9.9 [Download](https://releases.mattermost.com/9.9.3/mattermost-9.9.3-linux-amd64.tar.gz) \| {ref}`Changelog ` | 2024-06-14 | 2024-09-15 |