Mattermost

mattermost.org
Mattermost

Mattermost has an open source edition, which can be self-hosted. It makes a good Slack alternative, with native desktop, mobile and web apps and a wide variety of integrations.

Open Source

Mattermost Source Code

Author

mattermost

Description

Mattermost is an open source platform for secure collaboration across the entire software development lifecycle..

#collaboration#golang#hacktoberfest#mattermost#monorepo#react#react-native

Homepage

https://mattermost.com

License

NOASSERTION

Created

15 Jun 15

Last Updated

29 Jul 26

Latest version

v11.10.0-rc1

Primary Language

TypeScript

Size

1,241,955 KB

Stars

38,608

Forks

8,866

Watchers

38,608

Language Usage

Language Usage

Star History

Star History

Top Contributors

Recent Commits

  • cursor[bot] (29 Jul 26)

    [MM-69982] Fix intermittent remote cluster ping failures from stale keep-alive connection reuse (#37694) * [MM-69982] Fix intermittent remote cluster ping failures from stale keep-alive reuse The remote cluster HTTP transport set IdleConnTimeout to 90s while pings fire every PingFreq (60s) and peers close idle keep-alive connections after their own IdleTimeout (default 60s). Because 90s > 60s, the pooled ping connection outlived the peer's reaping, so each 60s ping reused a connection the peer had already closed, racing the FIN and failing intermittently with EOF / connection reset. Set IdleConnTimeout to PingFreq/2 so the pool always discards the connection before the next ping fires, making the reuse race structurally impossible while keeping the invariant (IdleConnTimeout < PingFreq) explicit and tied to PingFreq. Co-authored-by: mattermost-code <[email protected]> * chore: retrigger Server CI after check-style Docker Hub flake Server CI check-style failed pulling buildenv (Docker Hub Client.Timeout / missing buildenv-image artifact); unrelated to IdleConnTimeout changes. Enterprise CI check-style already passed on the same commit. Co-authored-by: mattermost-code <[email protected]> --------- Co-authored-by: Cursor Agent <[email protected]> Co-authored-by: mattermost-code <[email protected]>

  • Harrison Healey (28 Jul 26)

    Update snapshot and try to fix flaky test (#37722) * Update snapshot * Try to fix flaky test in brand_image_setting.test.tsx

  • Alejandro GarcΓ­a Montoro (28 Jul 26)

    MM-69725: Propagate context through Extractor.Extract using new mattermost/pdf fork (#37579) * Propagate context through Extractor.Extract Adds ctx context.Context to the Extractor interface and all implementations so callers can cancel in-flight extractions. pdfExtractor passes the context down to GetPlainText(ctx), which checks ctx.Done() at each page boundary. When extractWithTimeout fires (deadline exceeded or parent cancel), it cancels the derived context via defer cancel(), and the PDF goroutine stops at the next page rather than running to completion, eliminating the heap growth that caused OOM on complex documents. For non-context-aware extractors (docconv, plain, archive) the context is accepted but not yet acted on; they continue to run to completion on a detached goroutine after the timeout, as before. The call site in channels/app/file.go passes rctx.Context() so request cancellation (e.g. HTTP disconnect) also propagates. * Use new mattermost/pdf fork * Update notice reflecting the new fork * Fail archiveExtractor.Extract early on ctx errors * Bump mattermost/pdf to cd8a834041c4 --------- Co-authored-by: Mattermost Build <[email protected]>

  • Nick Misasi (28 Jul 26)

    MM-67336: Request structured JSON output for AI message rewrites (#37581) Co-authored-by: Cursor Agent <[email protected]>

  • Ibrahim Serdar Acikgoz (28 Jul 26)

    MM-69612: Add opt-in EnableAuditLogging setting for ABAC (#37322)

  • Ibrahim Serdar Acikgoz (28 Jul 26)

    [MM-69810] Update golang.org/x/image dep (#37595)

  • Christopher Speller (28 Jul 26)

    Prepackage mattermost-plugin-agents v2.5.0-rc2. (#37691)

  • Eva Sarafianou (28 Jul 26)

    docs(sidebar): regroup Administration Guide Onboard and Scale sections (#37630) * docs(sidebar): regroup Administration Guide Onboard and Scale sections Onboard (34 files) and Scale (28 files) were still flat, unrouped lists unlike their already-regrouped Configure/Manage/Integrations siblings. Apply the same manual-grouping-override pattern: - Onboard: SAML SSO, Other SSO & Identity (OAuth/OIDC/AD-LDAP), Multi-Factor & Certificate Auth, Guest Accounts & Delegated Administration, User Provisioning & Bulk Data, Migrating to Mattermost. - Scale: Capacity Planning (scale-to-N-users pages + storage sizing), High Availability & Architecture, Search Infrastructure, Observability & Monitoring, Caching β€” with Scaling for Enterprise kept as a standalone landing page since it's a general entry point, not a group member. Extends the existing orphan-check warning logic in buildAdminGuideSidebar to also cover Onboard/Scale, so future filesystem drift surfaces the same way it already does for Configure/Manage. Files stay flat on disk, no URLs move. Co-authored-by: Cursor <[email protected]> * docs(sidebar): align Onboard/Scale subgroups with Sphinx's live nav Sphinx's actual toctree groups these files differently than the initial regroup guessed: SAML/OAuth/OIDC/AD-LDAP all live under one identity bucket (not split SAML vs "other"), guest/permissions pages sit under a plain "User management" label, and β€” most notably β€” 21 of Scale's 28 files (capacity planning, HA/architecture, search infra, caching) are navigated to from Deployment Guide -> Reference Architecture in Sphinx, not Administration Guide, even though their Sphinx URLs stay under /administration-guide/scale/. - Merge Onboard's samlSso/otherSso groups into one "SSO & Identity" group, with SAML nested as its own sub-category inside it. - Rename "Guest Accounts & Delegated Administration" to "User Management". - Physically move the 21 Scale files that Sphinx navigates to from Deployment Guide into deployment-guide/reference-architecture/scale/, and add a new `scaling` group to DEPLOYMENT_GROUPS mirroring that split. Administration Guide -> Scale keeps only the 7 monitoring/observability pages. - Rewrite the ~130 internal .mdx links that pointed at the old /administration-guide/scale/* paths for the moved files, and update the 31 matching Sphinx->Docusaurus redirect targets in active-redirects.json. Regenerated the sidebar with zero orphan warnings; all files accounted for exactly once. Co-authored-by: Cursor <[email protected]> * docs(sidebar): flatten Scale's remaining Observability & Monitoring group With the 21 architecture/capacity/search files moved to Deployment Guide, Scale is down to 7 monitoring pages under one theme β€” wrapping them in their own "Observability & Monitoring" sub-category just adds a redundant nesting level (Scale > Observability & Monitoring > 7 files). List them flat directly under Scale instead. Co-authored-by: Cursor <[email protected]> * docs(sidebar): move Calls docs to deployment-guide, dissolve Storage & Database group Calls (RTCD, offloader, Kubernetes, logging, metrics) is a deployment/ operations concern, not settings-reference material β€” physically move the 6 Calls docs from administration-guide/configure/ into a new deployment-guide/calls/ directory and add a matching `calls` group to DEPLOYMENT_GROUPS, slotted right after Server/Scaling. Rewrite every cross-reference across docs/ (including the two PDF book manifests) to the new /deployment-guide/calls/calls-* paths, and add/update the matching active-redirects.json entries so old URLs keep resolving. Also dissolve the "Storage & Database" group in Configure β€” its three pages (configuration-in-your-database, environment-variables, azure-blob-storage) become plain top-level entries instead of a single-purpose subgroup; no files move since their URLs are unchanged. Co-authored-by: Cursor <[email protected]> * docs(calls,scale): fix RST-migration artifacts and stale links flagged in review Fixes still-valid review findings on the Calls/Scale content moved in this branch: - calls-metrics-monitoring.mdx: unescape HTML-entity braces in inline RTCD metric names (&#123;/&#125; -> {}), which is unnecessary in fenced/inline code and rendered literally; convert two legacy docs.mattermost.com absolute links to root-relative internal links, pointing the Prometheus/Grafana link at its current post-move location under deployment-guide/reference-architecture/scale/ rather than the stale administration-guide/scale/ path. - calls-rtcd-setup.mdx: convert the ICE Host Override link to a root-relative path; convert two leftover Sphinx ```{note}``` fences to the <Note> component (one of these was rendering as barely-readable plain text due to being an unrecognized code-fence language, not a proper admonition); add a <Warning> ahead of the community-maintained installation scripts link. - elasticsearch-setup.mdx: remove a stray leftover ":start-after: :nosearch:" Sphinx directive rendering as literal page text. - opensearch-setup.mdx: remove blockquote (`>`) prefixes wrapping every numbered-step code fence (another RST-migration artifact), convert a raw <div class="note"> to <Note>, and unescape HTML-entity braces/angle brackets in the YAML/JSON/Terraform examples. - deploy-rhel.mdx: fix the "RTCD setup and configuration" link to point at calls-rtcd-setup instead of the general calls-deployment-guide page. - pdf/books/deployment-guide.json: add the two Calls pages missing from the PDF spine (calls-metrics-monitoring, calls-rtcd-setup). Skipped: the raw entity-escaped `{}` in calls-rtcd-setup.mdx's <style> block is intentional (real JSX context, not a code fence/span) and the "code comment colors nearly invisible" screenshot turned out to be the same {note}-fence bug above, not a separate Prism/CSS issue -- fixed by the <Note> conversion. Two more Sphinx ```{note}``` fences exist in administration-guide/onboard/sso-saml-keycloak.mdx and sso-saml-adfs-msws2016.mdx but weren't part of the flagged findings, so left untouched. Co-authored-by: Cursor <[email protected]> --------- Co-authored-by: Cursor <[email protected]>

  • sabril (28 Jul 26)

    ci: remove testcontainers teardown step from playwright e2e workflow (#37697)

  • Eva Sarafianou (28 Jul 26)

    Fix low-contrast mobile nav sidebar text in light mode (#37695) The mobile navbar slide-out (.navbar-sidebar) always has a dark denim background regardless of theme, but its menu links inherited the light-mode --ifm-menu-color* values tuned for the light desktop sidebar, rendering dark navy text on a dark navy panel. Scope the dark-on-dark ("readable on dark") menu color values to .navbar-sidebar unconditionally, and fix the "Back to main menu" button's text color which was relying on the same now-changed background. Co-authored-by: Cursor <[email protected]>

  • sabril (28 Jul 26)

    E2E/Playwright: Add testcontainers to playwright-lib (#37570) * add testcontainers to playwright-lib * include retry mechanism for transient failures * - Introduced a new command `testcontainers:up` in package.json to run Playwright tests with Testcontainers. - Created a standalone Playwright configuration file `playwright.testcontainers-up.config.ts` for managing Testcontainers. - Added a no-op test `testcontainers_up.spec.ts` to ensure the Testcontainers stack is up during the test run. - Implemented a global setup script `testcontainers_up_global_setup.ts` to start and stop the Testcontainers stack. - Updated dependencies in package.json, including adding `chalk` for logging. * fix package-lock * fix tsc and restore waiting for all migrations to complete --------- Co-authored-by: Mattermost Build <[email protected]>

  • Eva Sarafianou (28 Jul 26)

    [Docs Revamp Feedback] Support three levels of TOC nesting (End-user Guide > Collaborate) (#37663) * docs(sidebar): support 3 levels of TOC nesting for End User Guide > Collaborate Addresses item 6 of Eric Sethna's docs revamp feedback ("Can we support three levels of nesting in the TOC? ... ie End-user guide > Collaborate"). PR #37630 (open, not merged) applies the manual-grouping-override pattern to Administration Guide > Onboard/Scale but doesn't touch End User Guide, and the pattern isn't a shared generic engine β€” each section gets its own small builder/regroup pair. This adds that pair for Collaborate (COLLABORATE_GROUPS/COLLABORATE_ORDER/COLLABORATE_HIDDEN + buildCollaborateItem/regroupCollaborate/buildEndUserGuideSidebar), regrouping its 49 flat files into Channels, Messaging & Threads, Calls & Screen Sharing, Teams/Groups & Roles, Integrations & Connected Apps, and Keyboard Shortcuts & Accessibility β€” giving End User Guide > Collaborate > [group] > page, a genuine 3rd nesting level. Files stay flat on disk; no URLs move. Co-authored-by: Cursor <[email protected]> * docs(sidebar): support inline subgroup specs in buildCollaborateItem Addresses CodeRabbit review comment on #37663: buildCollaborateItem only handled spec.group lookups, unlike buildAdminManageItem which also supports inline {label, items} subgroup specs (used e.g. for the Attribute-Based Access Control 4-level nesting under Admin Manage). Detect spec.items before falling back to the COLLABORATE_GROUPS lookup so Collaborate can gain the same nested-subgroup capability if needed, without changing today's generated sidebar output. Co-authored-by: Cursor <[email protected]> * docs(sidebar): merge Collaborate regroup with master's agents-docs promotion Rebasing onto master surfaced a duplicate 'buildEndUserGuideSidebar' declaration: master gained its own End User Guide override (promoting the Agents plugin's usage-tips page, from #37627) after this branch was cut, so git's non-conflicting merge silently produced two function bodies with the same name β€” a SyntaxError caught by CI's docs build check, not by the rebase itself. Merged both overrides into a single buildEndUserGuideSidebar: keeps the agents usage-tips promotion from master, plus this branch's Collaborate regrouping into COLLABORATE_GROUPS. Verified with a clean 'npm run build:sidebars' run (zero warnings) after initializing the docs/vendor/mattermost-plugin-agents submodule locally to stage agents docs first. Co-authored-by: Cursor <[email protected]> * docs(sidebar): clarify TOC nesting depth wording, reorder Collaborate items - README: describe the inline sub-group nesting as a third category level / four-level path instead of ambiguous "3rd level" wording. - Move invite-people out of the mismatched "Teams, Groups & Roles" group into its own top-level Collaborate entry, placed first. - Reorder "Teams, Groups & Roles" so learn-about-roles leads the group. Co-authored-by: Cursor <[email protected]> --------- Co-authored-by: Cursor <[email protected]>

  • sabril (28 Jul 26)

    ci: update actions/test-system-io to latest with upload retries (#37612) * ci: update actions/test-system-io to latest with upload retries * chore: update test system io actions --------- Co-authored-by: Mattermost Build <[email protected]>

  • Eva Sarafianou (28 Jul 26)

    Remove denim left-border accent from IME diagram intro panels (#37682) Drop the left-edge accent bar on the "Secure Collaborative Workflow", "Integration & AI Platform", and "Sovereign, Cyber-Resilient Deployment" intro panels β€” the surrounding denim wash/borders already signal the section boundary, so the extra bar was redundant decoration. Co-authored-by: Cursor <[email protected]>

  • Eva Sarafianou (28 Jul 26)

    Fix docs site homepage width, unreadable bold text, and deploy-k8s / icon UI bugs (#37681) * Fix homepage width, card-title weight, and deploy-k8s code block clutter The homepage's hide_table_of_contents:true dropped the usual 75% width cap DocItem/Layout applies via docItemCol, so prose read much wider than every other doc page. Restore the cap unconditionally. CardGrid's card titles ("For End Users", etc.) used Archivo Black at 900 weight, the same too-heavy/shouty treatment already fixed for h1-h4 β€” switch to the sans face at 700 to match. On the Kubernetes Operator deploy page, strip inline "# comment" annotations out of the YAML/shell snippets (moving anything useful into surrounding prose), and replace nested blockquotes used purely for list indentation with plain nested lists, since the blockquotes were triggering the site's yellow-bordered blockquote styling at every nesting level for no reason. Co-authored-by: Cursor <[email protected]> * Fix oversized Restore icon on the Send messages doc page restore_F099B.svg was the only icon under docs/site/static/img/ui missing explicit width/height attributes (every sibling icon sets width="24" height="24"). Without them, the browser falls back to its default SVG replaced-element size instead of the 24x24 the inline .theme-icon usage expects, rendering it many times larger than the surrounding text. Co-authored-by: Cursor <[email protected]> --------- Co-authored-by: Cursor <[email protected]>

  • Harrison Healey (27 Jul 26)

    MM-66940 Fix layout shift in ChannelView during loading (#37652) * MM-69940 Fix height of AdvancedTextEditor placeholder while loading The previous height included the margin which it shouldn't have. The 100% height on the post list also seemed to cause its height to change as well. That 98px assumes that this is the empty AdvancedTextEditor which is likely the most common case. * MM-69940 Change ChannelView to not split code as much I don't think this code splitting was necessary given we would always immediately load those components right away whenever the ChannelView is shown. It's not like the contents of a modal or the routing where we only need the async component conditionally. I did this so that the height of the PostView would change less while the app is loading to prevent layout shift and make accurate scrolling easier. * Move getPopoutChannelTitle to fix circular imports and update snapshots

  • Eva Sarafianou (27 Jul 26)

    docs(developers): fix broken Integrate & Extend link on developers landing page (#37690) The "Integrate & Extend" card and inline link pointed to /developers/integrate, which has no index page (only its "Get started" subcategory does), causing a 404. Point both links to /developers/integrate/getting-started instead. Co-authored-by: Cursor <[email protected]>

  • Sudheer (27 Jul 26)

    [Dead code] Remove unused prop from virt-list component (#36871) * Remove initialScrollOffset prop and associated mount hook code Co-authored-by: Harrison Healey <[email protected]> Co-authored-by: Mattermost Build <[email protected]>

  • abhijit-singh (27 Jul 26)

    Add discoverable private channels request-to-join UX (#37078) * Add discoverable private channels request-to-join UX Let users mark private channels discoverable, find them in Browse Channels, submit and withdraw join requests, and track status via My pending requests instead of DM notifications. Co-authored-by: Cursor <[email protected]> * Drop unrelated server changes from the branch Restore server files to master; this PR is webapp-only and builds on the existing discoverable-channels server implementation. Co-authored-by: Cursor <[email protected]> * Close Request to Join modal immediately on submit Drop the in-modal pending state so the modal closes as soon as the request is sent, rather than flipping into a "sent / Withdraw" view before disappearing. Browse Channels rows already handle the post-send state (Requested pill + Withdraw), so the modal's pending branch was redundant and visually noisy. * Fix lint in channel_settings_info_tab test Split multi-prop JSX onto separate lines and remove the trailing blank line inside the Discoverable toggle describe block. Resolves the react/jsx-max-props-per-line and padded-blocks errors that were failing check-lint and cascading into a skipped build / failed Spinwick. * Fix stylelint property order in request_join_channel_modal SCSS Move min-width before align-items in .RequestJoinChannelModal__header to satisfy stylelint's order/properties-order rule (dimensions before flex alignment). * Restore unintended deletions from original branch commit The initial PR commit accidentally reverted master-side changes in several shared files when the AI agent regenerated them. The rebase onto current master preserved those reverts. Restore each piece while keeping the branch's discoverable additions: - client4.ts: previewLicense method - websocket_actions.ts: handleFileUploadRejected function + switch case - websocket_message.ts / websocket_messages.ts: FileUploadRejected type - config.ts: License type fields (expires_at, customer required, sku_short_name, is_gov_sku) - constants.tsx: CHANNEL_MENTION_AUTO_FOLLOW notification section - en.json: master keys (admin.license.*, admin.access_control.*, etc.) restored; discoverable keys re-inserted using the Mattermost i18n formatter sort rule (case-insensitive, '_' before '.') - package-lock.json: reset to master * Sync webapp package-lock.json with master to fix CI install The branch carried a stale package-lock.json pinning [email protected] while package.json (identical to master) declares [email protected]. npm aborted with an ERESOLVE peer conflict (@typescript-eslint/[email protected] peers eslint@^8.56.0), failing check-lint and the E2E check before any code ran. This branch adds no dependencies, so the lockfile is restored to match master. Co-authored-by: Cursor <[email protected]> * Fix join-request pending count double-decrement and prune stale pending map Decrement countsByChannel from the actual pending->terminal transition instead of the incoming status alone, so the acting admin's optimistic dispatch plus the server's WebSocket echo of a single approve/deny no longer double-decrements the badge. Make CREATED count-idempotent for re-delivered events. Rebuild myPendingByChannel from the authoritative full list on RECEIVED_MY_CHANNEL_JOIN_REQUESTS so a request that resolved while the client missed the WS event no longer lingers as stale. Co-authored-by: Ibrahim Serdar Acikgoz <[email protected]> * Surface discoverable channels in Browse without requiring a search getChannels only returns public channels, so non-member discoverable private channels (and the Discoverable filter) were empty until the user typed a search term. Fetch them on mount via an empty-term non-admin search (already ABAC-filtered server-side), fold them into the default All list and the Discoverable filter, and resolve My pending requests rows against them. Co-authored-by: Ibrahim Serdar Acikgoz <[email protected]> * Browse row cleanup: drop unused action, keep Withdraw if discoverability revoked Remove the requestJoinChannel action that was wired into Browse Channels but never called (the confirmation modal dispatches it directly). Show the Withdraw affordance for any non-member with an open request even after an admin flips the channel's discoverable flag off, instead of falling through to a Join button the server rejects for a private channel. Co-authored-by: Ibrahim Serdar Acikgoz <[email protected]> * Fix discoverable-toggle a11y labels and gate settings toggle on in-progress type - Description <label>s reused aria-label={discoverableTitle}, so screen readers announced the title twice and skipped the description; point them at discoverableDescription (channel settings + new channel modal). - Gate the channel-settings discoverable toggle on the in-progress channelType selection rather than the saved channel.type, so it appears immediately during a Public->Private conversion, matching the New Channel modal. The save flow already applies the privacy conversion before the discoverable patch. Co-authored-by: Ibrahim Serdar Acikgoz <[email protected]> * Guard Browse request/withdraw re-entry and make Withdraw keyboard-accessible Ignore row clicks that would re-trigger request/withdraw while one is already in flight (the row bypassed the disabled button), and disable the buttons whenever any request/withdrawal is pending. Drop tabIndex={-1} from the Withdraw button: pending rows are a no-op on Enter, so the button was the only action and needed to stay keyboard-focusable. Co-authored-by: Ibrahim Serdar Acikgoz <[email protected]> * Persist untracked join-request updates so duplicate terminal events stay idempotent When a terminal CHANNEL_JOIN_REQUEST_UPDATED arrives for a row not yet in byChannel (only the count was loaded), store it instead of leaving the list unchanged. A re-delivered terminal event then finds it as terminal and no longer decrements countsByChannel a second time. Co-authored-by: Ibrahim Serdar Acikgoz <[email protected]> * Memoize filtered pending join-request selectors getPendingChannelJoinRequests and getMyPendingJoinRequestList ran an unmemoized .filter() on every call, returning a new array reference each time and causing avoidable re-renders in any connected consumer. Wrap both in createSelector. Co-authored-by: Ibrahim Serdar Acikgoz <[email protected]> * Address review: drop redundant done() guards and harden withdraw error message done is a required callback, so the if (done) guards in handleRequestToJoin and handleWithdrawRequest were dead. Fall back to server_error_id / a generic string when the withdraw error has no message, since error.message isn't guaranteed at runtime. Co-authored-by: Ibrahim Serdar Acikgoz <[email protected]> * Address review: use a class for the discoverable row indicator The indicator rendered id='discoverableIndicatorContainer' on every discoverable row, producing duplicate ids in the DOM when more than one discoverable channel is listed. Switch it to a class (and update the SCSS selector + test) so the markup stays valid. Co-authored-by: Ibrahim Serdar Acikgoz <[email protected]> * Add discoverable private channels admin join-request queue UX (#37082) QA deferred to the base branch * Fix Quick Switch join flow for discoverable channels in recent/default lists (MM-68764) The discoverableNonMember / hasPendingJoinRequest flags were only set on Quick Switch search results, so a discoverable private channel surfaced via the Recent or default (no-search-term) list fell through to the legacy private-channel join confirmation, which the server rejects for a non-member β€” leaving the user in a broken confirm/error loop. Extract the detection into a shared applyDiscoverableFlags helper and run it on every channel-list path (search via formatGroup, recent + unread via wrapChannels) so the Request to Join flow fires consistently. Co-authored-by: Ibrahim Serdar Acikgoz <[email protected]> * Bound concurrency of sidebar join-request count prefetch Address CodeRabbit: the effect fired one count request per manageable discoverable channel simultaneously. Process them in capped batches (5 at a time) and cancel in-flight work on unmount / dependency change so a user who manages many channels doesn't trigger an unbounded request burst. Co-authored-by: Ibrahim Serdar Acikgoz <[email protected]> * Add ChannelHeader snapshot test for pending join requests Address CodeRabbit: cover the join-request badge's conditional rendering with a hasPendingJoinRequests=true snapshot case. Co-authored-by: Ibrahim Serdar Acikgoz <[email protected]> * Add e2e tests for discoverable private channels request-to-join UX Cover common use cases behind the DiscoverableChannels feature flag: a non-member requesting to join a discoverable private channel from Browse Channels and withdrawing, and selecting a discoverable channel from Find Channels (Cmd+K) routing to the Request to Join modal rather than the legacy join. Add supporting Browse Channels modal page-object helpers. Co-authored-by: Ibrahim Serdar Acikgoz <[email protected]> * Address review: locate Browse Channels rows by display name in e2e helpers Per the Playwright suite conventions, filter rows by visible display name (.more-modal__row + hasText) instead of data-testid, and pass channel.display_name from the spec. Co-authored-by: Ibrahim Serdar Acikgoz <[email protected]> * Reveal Browse Channels row actions on keyboard focus (:focus-within) Address review: the Withdraw button is keyboard-focusable (tabIndex removed earlier) but the row action buttons are visibility:hidden and only revealed on :hover / row :focus. Tabbing to the Withdraw button moves focus off the row, so the buttons hid again. Add :focus-within so the actions stay visible while any child button holds keyboard focus. Co-authored-by: Ibrahim Serdar Acikgoz <[email protected]> * Route discoverable channel URL / mention-link navigation to Request to Join Address review: opening a discoverable private channel a user isn't a member of via a pasted channel URL or a ~channel mention link fired the legacy 'Join private channel' confirmation, which attempts a direct join the server rejects, leaving the user on a broken channel view. When the feature flag is on and the channel is discoverable, redirect to a safe channel and open the Request to Join modal instead β€” matching Browse Channels and Quick Switch. Co-authored-by: Ibrahim Serdar Acikgoz <[email protected]> --------- Co-authored-by: Cursor <[email protected]> Co-authored-by: Ibrahim Serdar Acikgoz <[email protected]> Co-authored-by: Mattermost Build <[email protected]>

  • nang2049 (27 Jul 26)

    Fix image preview opening when clicking outside the image in a post (#37642) * Fix image preview opening when clicking outside the image in a post * e2e test --------- Co-authored-by: Nevyana Angelova <[email protected]> Co-authored-by: Mattermost Build <[email protected]>

  • Ibrahim Serdar Acikgoz (27 Jul 26)

    Fix editing a post creating a draft (MM-69928) (#37658) When editing an existing post, the shared AdvancedTextEditor reused the same draft-save pipeline as the composer. On unmount / beforeunload it called updateDraft with show:true and server sync, which created a real channel/thread draft via the drafts API. That draft came back over the websocket and surfaced in the drafts UI. Guard handleDraftChange so that in edit mode the edit content is only persisted locally (never flagged show:true, never upserted to the server). Co-authored-by: Cursor Agent <[email protected]> Co-authored-by: Ibrahim Serdar Acikgoz <[email protected]> Co-authored-by: Mattermost Build <[email protected]>

  • Eva Sarafianou (27 Jul 26)

    [Docs Revamp Feedback] Remove/restyle "vibe coded" yellow left-border signal (#37666) * Remove/restyle "vibe coded" yellow left-border signal on docs cards/blocks Nick Misasi flagged in the "Docs Revamp - Feedback" channel (2026-07-22/23): "Docs look great! Left border like this is a pretty common 'vibe coder' signal. Wonder if we should just remove it? I see the yellow left border in a few other places too. Regardless of whether its AI built or not, I don't know if that signal is the first thing we want a reader to see" tokens.css already documents --mm-color-marigold as "accent β€” CTAs only, used sparingly", so this restores that contract: marigold left borders on static, non-CTA content blocks/cards are replaced with the site's primary denim brand color, while genuinely deliberate marigold accents (navbar underline, CTA pill, section rule, h2 rule accent, copy-button hover) are left untouched. - CardGrid: removed the always-on marigold left border from the card grid (the "For Administrators"/"For Developers" cards from the screenshot); hover state now uses a neutral border-strong color instead of marigold. - PlanAvailability: .plan badge left border marigold -> denim, matching the Edition/Deployment/Attestation badge family. - EditionAvailability: dropped the marigold .edition variant override so Edition and Deployment badges share the same denim left edge. - IMEDiagram: intro-panel (Application/Integration/Deployment) left border and icon color marigold -> denim, with a lighter denim tint in dark mode. - DeploymentArchitectureBuilder: .miniFlow/.flow protocol chips left border marigold -> denim (the per-role box legend, which uses marigold as one of several deliberate type colors, is left unchanged). - custom.css: blockquote left border marigold -> border-strong (neutral), since it applied unconditionally to every blockquote site-wide. Co-authored-by: Cursor <[email protected]> * Restyle CardGrid nav cards after removing marigold left border Replace the flat left-border accent with elevation cues (rounded corners, resting/hover shadow, background tint on hover, and a circular arrow/icon affordance) so cards still read as clickable without the decorative bar. Fix dark-mode card surface, which was hardcoded to a navy shade nearly identical to the page background. Co-authored-by: Cursor <[email protected]> * Fix invisible dark-mode left border on Plan/Edition badges border-left-color was still hardcoded to the dark denim brand color in [data-theme='dark'], blending into the near-black background. Add the lighter --mm-denim-300 override used elsewhere on this branch (IMEDiagram, DeploymentArchitectureBuilder). Co-authored-by: Cursor <[email protected]> * Fix low-contrast focus ring and inaccurate marigold-usage comment - CardGrid: marigold focus outline was ~1.7:1 against the white card surface, under the 3:1 WCAG 1.4.11 minimum. Switch to denim, with a lighter dark-mode override. - IMEDiagram: reword the marigold usage comment to match tokens.css's actual contract ("CTAs only, used sparingly") instead of the narrower and incorrect "interactive/hover states only" framing. Co-authored-by: Cursor <[email protected]> --------- Co-authored-by: Cursor <[email protected]>

  • Eva Sarafianou (27 Jul 26)

    Remove unreviewed IA-redesign content, restructure air-gapped docs from legacy source (#37674) * Remove unreviewed IA-redesign content, restructure air-gapped docs from legacy source The docs-experimental -> monorepo migration (#37330) brought in draft scaffolding from a proposed IA redesign that was never reviewed and has no basis in the legacy Sphinx docs or the actual product. This removes it and, where a real legacy page existed, rebuilds the content from that source instead. Removed (no legacy-docs equivalent, entirely speculative): - administration-guide/upgrade/upgrade-v11.mdx - a per-major-version upgrade guide "stub" with literal placeholder text ("*Per-release, version-specific procedure authored by release-management team.*"); this per-version guide concept never existed in the old docs. - deployment-guide/air-gapped-operations/offline-license-activation.mdx - fabricated procedure and config-setting claims with no legacy source and no verification against the product. - security-guide/compliance-frameworks/fedramp-moderate.mdx - a live "in-process" FedRAMP authorization badge and NIST 800-53 control mapping table that was never reviewed or signed off by compliance/ legal. Restructured from the legacy air-gapped-deployment.rst content (real, previously-published guidance, just reorganized into smaller pages): - air-gapped-operations/index.mdx - high-level overview, dropped the invented "Persona scope" note, "Roadmap (Phase 2)" section, and unverified deployment contexts (DoD SIPRNet/JWICS, sovereign-cloud, tactical-edge/DDIL) that had no basis in the legacy docs. - air-gapped-operations/quick-start-runbook.mdx - replaced the fabricated (and off-by-one) "12 steps" with the legacy RST's actual 6-step deployment overview. - air-gapped-operations/mirror-package-repositories.mdx - replaced invented artifact/registry guidance with the legacy Bill of Materials, Plugins, SSL/TLS, and registry-mirroring setup content. - air-gapped-operations/disable-phone-home-features.mdx - replaced the invented "phone-home inventory" table (unverified config.json key names) with the legacy doc's actual per-feature configuration guidance (push notifications, email, link previews, GIF picker, notices, telemetry). Also fixed every cross-reference broken by the above (persona landing pages under for/, the compliance-frameworks index, DISA STIG and DoD IL4/IL5 pages, and a few deployment-guide pages that linked to the removed/renamed content). The broader for/ persona-landing-page tree and the DISA STIG / DoD IL4-5 compliance pages still reference the same unreviewed IA redesign and need a follow-up pass, but are out of scope for this change. Co-authored-by: Cursor <[email protected]> * Soften DISA STIG customer-responsibility wording on DoD IL4/IL5 link "Validated configuration guidance" overstated what the linked DoD IL4/IL5 page actually provides (a documented control mapping, not a third-party-validated one). Matches the "documents the gap honestly" framing already used elsewhere on these compliance pages. Co-authored-by: Cursor <[email protected]> --------- Co-authored-by: Cursor <[email protected]>

  • Eva Sarafianou (27 Jul 26)

    docs: fix broken mm-ref:/mm-doc: placeholder links from RST migration (#37673) * docs: fix broken mm-ref:/mm-doc: placeholder links from RST migration During the Sphinx/RST-to-Docusaurus/MDX conversion, every RST :ref: and :doc: cross-reference role was converted into a dead link using a made-up, non-functional URI scheme (mm-ref:/mm-doc:) instead of a real path, leaving ~228 broken links across ~20 docs/main files. Decode each payload and resolve it to a working relative link, computing the target heading's anchor slug (via github-slugger, matching Docusaurus's own heading-id algorithm) where the original :ref: pointed at a specific section. A few links with no confidently matching target are marked with a TODO comment for follow-up. Co-authored-by: Cursor <[email protected]> * Resolve remaining ESR link TODOs and rebuild mangled version table The three mm-ref: TODOs left by the previous pass pointed at RST :ref: labels (release-v9-11-extended-support-release, etc.) that exist as real headings in unsupported-legacy-releases.mdx and mattermost-v10-changelog.mdx, not in release-policy.mdx. Resolved them to the correct anchors. While fixing the links, also rebuilt the surrounding table: it was the same blockquote/dl/dt-with-literal-RST-separators artifact seen elsewhere in the RST-to-MDX migration, plus a phantom 4th table column. Cross-checked against the legacy RST source (server-deployment-planning.rst) to confirm it's really 3 columns. Co-authored-by: Cursor <[email protected]> * Fix anchor over-extension and truncated RST fragments in table cells - authentication-configuration-settings.mdx / site-configuration- settings.mdx: the migrated doc links wrapped far more text than intended ("multi-factor authentication (MFA) | - System Config path: ..." / "threaded discussions | - System Config path: ..."). Closed the anchor immediately after the link label so the System Config path text renders as plain text outside the link, matching the pattern used elsewhere in these tables. - client-availability.mdx: three table cells (Preview image links, Join existing team, Create a new team) retained truncated RST :ref: label fragments ("ments>`__", "eam>`__", "team>`__") left over from the conversion. Removed them - the checkmark cells already carry the correct support indicators, cross-checked against the legacy RST source table. Co-authored-by: Cursor <[email protected]> * Fix stray absolute doc link and leaked table separators - important-upgrade-notes.mdx: the first Compliance Export doc link in the v10.5 row pointed at the absolute docs.mattermost.com/*.html URL instead of the site-relative canonical path (the second link in the same cell already used the correct path). - client-availability.mdx: 15 feature-name links across the Messages, Channels, Teams, Playbooks, Calls, Authentication, and Other tables had leftover RST table-separator artifacts ("| | | |") bleeding into the anchor text. Removed them so the link boundary matches the correctly-converted rows elsewhere in the same tables. Co-authored-by: Cursor <[email protected]> --------- Co-authored-by: Cursor <[email protected]>

  • Eva Sarafianou (27 Jul 26)

    [Docs Revamp Feedback] Fix content rendering bugs (admonitions, broken images, table wrapping, oversized icons) (#37669) * Fix leftover RST/malformed MDX admonition syntax Docusaurus/MDX admonitions use `:::type[Title]` for a custom title, not the old Sphinx `.. type::` RST directive or a bare `:::type Title` (which Docusaurus renders as a type with the literal text "Title" appended, not a real title). Fixed 12 files using the malformed `:::type Title` form, plus two leftover `.. image::` RST directives (converted to `<img>` tags, covered in the images commit's file but noted here since it's the same admonition-adjacent cleanup pass) in manage-your-security-preferences.mdx. Co-authored-by: Cursor <[email protected]> * Fix broken images: port missing screenshots from legacy docs repo 26 files referenced screenshots/diagrams via relative paths (`../images/x`, `../../images/x`) that don't resolve anywhere in this repo β€” the assets were never migrated during the Sphinx-to-Docusaurus conversion, and in one file (ad-ldap-groups-synchronization.mdx) the filenames were also corrupted with a leftover `%0A` (encoded newline) prefix from the conversion. Ported the 46 missing image files from mattermost/docs (source/images/) into docs/site/static/images/ β€” the location every other working image reference in this repo already resolves against β€” and rewrote every relative reference to the root-absolute `/images/<file>` form used elsewhere in these same files (e.g. server-logout-indicator.png). Verified via a full scan: all 680 `/images/...` references across docs/main now resolve to a real file on disk. Co-authored-by: Cursor <[email protected]> * Fix oversized/broken checkmark icons in EMM config table The EMM configuration reference table used bare <img src="../../_static/images/check-circle-green.svg" /> for ~24 "supported" checkmarks β€” a legacy Sphinx path that doesn't exist in this repo (broken image) and, with no explicit size, would render at native SVG size rather than as a small inline checkmark (oversized icon). Replaced with the actual migrated asset (/img/ui/checkmark.svg) plus explicit width/height and alt text. Co-authored-by: Cursor <[email protected]> * Fix wide comparison table wrapping on the plans page The plans/pricing table (7 columns: Feature Category + 5 editions + Available From) had no table-layout or column-width rules, so the first ("Feature Category") column β€” which holds long, wrapping prose β€” ended up roughly the same rendered width as the edition columns, which only ever hold a short checkmark or version string. That forced every row onto several wrapped lines. Added `table-layout: fixed` with explicit per-column widths (28% category / 10% per edition / 22% for "Available From") so the category column gets the space it needs. Co-authored-by: Cursor <[email protected]> * Fix images broken on non-root baseUrl deployments (PR previews) Docusaurus only rewrites image URLs for the site's baseUrl when using markdown image syntax (`![alt](/images/x.png)`) β€” that gets compiled to a webpack require() call. A raw HTML `<img src="/images/x.png" />` tag is left as a literal string, which the browser resolves from the domain root, ignoring baseUrl entirely. On production baseUrl is "/", so this silently worked by coincidence. But PR preview builds set BASE_URL to "/mattermost/pr-<N>/" (.github/workflows/docs-preview-template.yml), so every raw <img src="/images/..."> or src="/img/..."> 404s specifically on preview deployments β€” which is why images added/fixed earlier in this branch still showed as broken in the PR's docs preview. This is a pre-existing, repo-wide pattern (503 raw <img> tags across 103 files, most untouched by this PR otherwise) rather than something introduced by earlier commits here β€” those commits just added a few more instances of an existing broken pattern. Fixed all of them by importing @docusaurus/useBaseUrl and wrapping src={useBaseUrl('/images/...')} so the URL is correctly rewritten for whatever baseUrl the site is built with. Verified: all 503 useBaseUrl(...) calls resolve to a real file under docs/site/static, and every modified file was checked with @mdx-js/mdx compile() to confirm no syntax breakage from the added import statements. Co-authored-by: Cursor <[email protected]> * Fix leftover RST list/table markup in notifications docs - mobile-troubleshooting.mdx: replace leading blockquote markers (>) under step 3 with list-content indentation so the nested numbered substeps and screenshots render as part of the ordered list instead of a blockquote. - manage-your-notifications.mdx: replace the mangled blockquote/dl header row (with literal RST separator runs and stray | and + characters) with a proper <thead><th scope="col"> row, and restore the "Icon badge (dot)" row as a normal <tbody> row. Co-authored-by: Cursor <[email protected]> * Rebuild mangled security preferences table from RST source Cross-checked against the legacy RST source to reconstruct the table correctly: proper <thead>/<th scope="col"> header, real ordered/ unordered lists instead of pipe-joined literal text, working internal links in place of unresolved mm-ref: URIs, and a <Note> block for the sign-in method callout (previously rendered as literal ".. note::" text). Also dropped a stray phantom third table column left over from conversion. Co-authored-by: Cursor <[email protected]> * Fix typos and remaining markup issues in collaborate/notifications docs - message-priority.mdx: fix "acknowlegement" typo, add missing "the" before "message" in the acknowledgement description. - organize-conversations.mdx: split the Tip's two bullets onto separate lines and drop the escaped leading hyphen that was preventing the first item from rendering as a list. - organize-using-custom-user-groups.mdx: fix "preferreed" typo and add missing "to" in the archived-group restoration instructions. - schedule-messages.mdx: fix "dislays" typo. - manage-your-notifications.mdx: replace the leftover dl/dt/dd/ line-block markup in the Push notifications row with a plain anchor link, matching the Web/Desktop cells elsewhere in the table. Co-authored-by: Cursor <[email protected]> --------- Co-authored-by: Cursor <[email protected]>

  • Eva Sarafianou (27 Jul 26)

    fix(docs-preview): set commit status via gh api for correct target_url (#37664) * docs: mark scale partial pages as unlisted with proper titles These MDX files are content partials imported into the scale-to-*-users pages, mirroring the :orphan:/:nosearch: Sphinx pages they were migrated from. Without frontmatter, Docusaurus rendered them as full standalone pages with an ugly slug-derived title, breadcrumbs, and pagination. unlisted: true keeps their routes alive (needed by the PDF book builder and legacy redirects) while hiding them from the sidebar, breadcrumbs, pagination, and search indexing. Co-authored-by: Cursor <[email protected]> * fix(docs-preview): set commit status via gh api for correct target_url The shared mattermost/actions/delivery/update-commit-status action accepts a target_url input but ignores it, hardcoding the Actions run URL instead. This made the docs-preview PR check's Details link point at the workflow run rather than the S3-hosted preview site. Switch docs-preview-template.yml and docs-preview-fork.yml to call the GitHub Statuses API directly via `gh api repos/.../statuses/{sha}`, matching the pattern in e2e-tests-playwright.yml, so the success status's target_url points at the actual preview URL. Co-authored-by: Cursor <[email protected]> --------- Co-authored-by: Cursor <[email protected]>

  • Eva Sarafianou (27 Jul 26)

    [Docs Revamp Feedback] Readability & accessibility fixes (#37665) * Fix readability & accessibility issues from Docs Revamp feedback Addresses the readability/accessibility batch collected 2026-07-22/23 in the "Docs Revamp - Feedback" channel and Eric Sethna's first-pass review doc: - Dark-mode "note" callout text vs. background contrast (Michael Roberson; Eric Sethna's doc item 8) β€” pin explicit brand colors for dark-mode admonitions instead of Infima's generic secondary-alert pairing. - Link color/body-text visual distinction, both themes (Vishal Choudhary, Marco Kundt; Eric Sethna's doc item 5) β€” new link colors that stay far apart in luminance from surrounding body text (not just from the page background), plus default (not hover-only) underlines. - Body text should read darker, like the old docs site (Vishal Choudhary) β€” wire --ifm-font-color-base to --mm-text-primary instead of Infima's unbranded default. - Main content panel doesn't visually "pop" against the side nav/TOC (Vishal Choudhary) β€” tint the sidebar/TOC panels with --mm-bg-subtle and leave the reading column on the page background. - Dark-mode inline code contrast (Marco Kundt) β€” explicit text color via --mm-text-primary. - Bold/color combo hard to read (Ben Cooke) β€” subtle letter-spacing on bold runs in prose. - Heading/TOC category font not readable, vs. the readable "IME" example (Eric Sethna's doc item 1) β€” swap the 900-weight display face out of small multi-word TOC category labels for the base sans face at bold weight, matching the same fix already applied to navbar links. - Inline code spans taking up excess vertical space (Eric Sethna's doc item 9) β€” pin line-height on inline `code` so it stops inheriting the 1.65 paragraph line-height; multi-line fences are unaffected. - Prose max-width too wide on large screens (Rohith Chandran) β€” cap top-level article prose at ~760px via a `.markdown > `-scoped rule that leaves the OpenAPI 2-column layout (nested deeper) untouched. Full WCAG contrast math for every changed pair is in the PR description. Note: this touches docs/site/src/css/custom.css and tokens.css, which a parallel "remove yellow left border" workstream also touches (callout/ card border styles) β€” left border/accent-bar colors are deliberately untouched here to minimize overlap, but a merge conflict is still likely. Co-authored-by: Cursor <[email protected]> * Address review feedback on readability/a11y PR - Extend dark-mode admonition background fix from "note" to all five alert types (info/success/warning/danger) β€” the "hard on the eyes" complaint (item 13) wasn't note-specific. Also pin the alert heading label and icon color explicitly, since Infima's inheritance made the "NOTE"-style label the most visibly low-contrast part of the callout. - Drop the default underline on prose links; use medium weight (600) as the non-color WCAG 1.4.1 cue instead, keeping underline for hover/focus only. - Stop forcing code blocks to our --mm-denim-800 background in dark mode. Docusaurus's dark Prism theme (dracula) has its own background/token contrast pairing; overriding just the background broke that pairing. Letting the theme's own background show through (already applied to the block's container via --prism-background-color) fixes contrast. - Apply the same small/multi-word-heading fix already used for TOC category labels to table column headers, which have the identical problem (multi-word labels in the 900-weight display face). Left footer titles on the heading face since those are short single words, the case that face handles fine β€” documented why. Co-authored-by: Cursor <[email protected]> * Fix dark-mode contrast for code blocks, inline code, and note callouts Code block, callout, and inline-code backgrounds/borders all sat within ~1:1 contrast of the dark-mode page background (same navy hue family), so they had no visible edge or fill distinct from the page. The unscoped dark-mode `code` background rule also leaked into code blocks' own `<code>` element (beating Infima's `pre code: transparent` on specificity), masking most of the code block fill behind a near-black overlay regardless of the fill color chosen. Co-authored-by: Cursor <[email protected]> * Fix dark-mode contrast for blockquotes, inline code, and table stripes Same root cause as the earlier code-block/callout fixes: --mm-denim-800 and --mm-denim-700 sit within ~1:1 contrast of the dark-mode page background, so blockquotes, inline code chips, and even-row table striping all had no visible fill against the page. Switched them to --mm-bg-surface (+ denim-400 borders where a border exists) to match the surface treatment already used elsewhere. Co-authored-by: Cursor <[email protected]> * Tone down h1 title weight; revert prose max-width cap - h1 page titles were still on the 900-weight Archivo Black poster face after h2-h4 got moved to a normal-weight sans face for the same "too heavy/shouty" reason. Bring h1 in line with the rest so every page title uses one consistent weight. - Revert the 760px max-width cap on top-level markdown prose blocks (added for Rohith Chandran's wide-line-length feedback) β€” it also squeezed non-article layouts like the homepage's persona cards. Needs more thought before reapplying narrower/more targeted. Co-authored-by: Cursor <[email protected]> * Trim verbose CSS comments introduced in this branch Cut reviewer-name/item-number attributions and repeated exploratory narrative down to the "why" a future reader actually needs, and fixed a couple of comments left stale by later commits (e.g. h1 no longer using the Archivo Black display face). Also dropped a redundant background declaration in the dark-mode .callout override that just re-set the same value the base rule's --mm-bg-surface already resolves to per theme. Co-authored-by: Cursor <[email protected]> --------- Co-authored-by: Cursor <[email protected]>

  • sabril (25 Jul 26)

    E2E/Test: Stabilize flaky tests (#37614)

  • Pablo VΓ©lez (25 Jul 26)

    Mm 69830 abac membership messaging fixes (#37618) * MM-69828 - Fix ABAC team Access-tab stuck-public cards, parent-policy mode-flip count * Add fallback handling for parent-policy fetch failure in AccessTab component * MM-69829 - Show Attribute Based indicator for policy-governed teams in admin Teams list * MM-69829 - Clear stale navigation-block flag when opening a membership policy in the editor * MM-69829 - Save cleanly when removing a team membership policy instead of prompting to re-apply * MM-69829 - Count qualifying team members correctly in the apply-policy confirmation modal * fix failing test * do not show apply policy confirmation modal on policy unlink * Refactor TableEditor state management and integrate deleteAccessControlPolicy action * fix ci linter for playwright test * adjust e2e to the new flow - no policy/rule , no blocking, clean state abac off * MM-69830 - Return an OK body when deleting an access policy so rule removal saves cleanly * MM-69830 - Soften the self-exclusion message on public teams to reflect advisory enforcement * MM-69830 - Soften membership-policy notices to advisory copy on public teams * MM-69830 - Uncheck auto-add when the last team membership rule is removed * MM-69830 - Warn that removing all rules drops attribute enforcement instead of showing the save-count modal * MM-69830 - Dispatch the deleted policy id so removing team rules doesn't crash the reducer * MM-69830 - Skip the self-exclusion block on public teams instead of rewording it * MM-69830 - Use advisory wording in the save-rules confirmation on public teams * MM-69830 - Use advisory auto-add descriptions on public teams * MM-69830 - Block switching a team to private when the admin would be self-excluded by the rules * fix prettier issues and adjust comments * MM-69830 - Assert advisory confirmation copy for team admins on public teams * MM-69830 - Show a saving state on the membership save panel while a confirmed save runs * MM-69830 - Save immediately when confirming the switch-to-private mode flip * MM-69829 - Surface delete failures and page through all members in the ABAC team save flow * MM-69830 - Align the remove-all-rules confirmation with performSave's parent-import check * MM-69830 - Drop an unnecessary cast on the team policy result and memoize the self-exclusion modal handler

  • Nick Misasi (24 Jul 26)

    ABAC: share TableEditor/CELEditor with plugins via window.Components (#37510) * Add injectable actions to ABAC CEL and table editors Co-authored-by: nick.misasi <[email protected]> * Expose lazy ABAC policy editors on window.Components Co-authored-by: nick.misasi <[email protected]> * Address review: window.Components assertions, CEL fallback test, userEvent clicks Co-authored-by: nick.misasi <[email protected]> * Tighten branch comments to match surrounding editor code style Co-authored-by: nick.misasi <[email protected]> --------- Co-authored-by: Cursor Agent <[email protected]>

Mattermost Security

7.6/10

Repo Security Summary

Updated 13 Jul 26

  • Maintained 10/10
  • Code-Review 10/10
  • Security-Policy 10/10
  • CII-Best-Practices 0/10
  • License 9/10
  • Dangerous-Workflow 10/10
  • Signed-Releases 10/10
  • Token-Permissions 0/10
  • Packaging 10/10
  • Branch-Protection 4/10
  • Binary-Artifacts 10/10
  • SAST 10/10
  • Pinned-Dependencies 8/10
  • Fuzzing 0/10

Mattermost Website

Website

301 Moved Permanently

Redirects

Redirects to https://mattermost.com/?&redirect_source=mm-org

Security Checks

1 security checks failed (64 passed)

  • External Redirect Detected

Server Details

  • IP Address 104.18.10.136
  • Location San Francisco, California, United States of America, NA
  • ISP CloudFlare Inc.
  • ASN AS13335

Associated Countries

  • US US

Safety Score

Website marked as safe

100%

Blacklist Check

mattermost.org was found on 0 blacklists

  • AntiSocial Blacklist
  • Artists Against 419
  • Badbitcoin
  • Bambenek Consulting
  • CERT Polska
  • CoinBlockerLists
  • CRDF
  • CryptoScamDB
  • EtherAddressLookup
  • EtherScamDB
  • Fake Website Buster
  • MetaMask EthPhishing
  • NABP Not Recommended Sites
  • OpenPhish
  • PetScams
  • PhishFeed
  • PhishFort
  • Phishing.Database
  • PhishStats
  • PhishTank
  • Phishunt
  • RPiList Not Serious
  • Scam.Directory
  • SecureReload Phishing List
  • Spam404
  • StopGunScams
  • Suspicious Hosting IP
  • ThreatFox
  • ThreatLog
  • TweetFeed
  • URLhaus
  • ViriBack C2 Tracker

Website Preview

Website preview

Mattermost Android App

APK Info

De-Googled Compatibility

Native 3.00 / 4 1 ratings
microG 3.00 / 4 1 ratings

Tested on Android 15 Β· Updated 11 May 25 Β· View on Plexus β†’

Trackers

  • Sentry

Permissions

  • Access Network State
  • Camera
  • Internet
  • Read App Badge
  • Read External Storage
  • Receive Boot Completed
  • System Alert Window
  • Vibrate
  • Wake Lock
  • Write External Storage
  • Update Count
  • Receive
  • Send
  • Read Settings
  • Update Shortcut
  • Change Badge
  • Read Settings
  • Write Settings
  • Update Badge
  • C2d Message
  • Read Settings
  • Write Settings
  • Read
  • Write
  • Broadcast Badge
  • Provider Insert Badge
  • Badge Count Read
  • Badge Count Write

Mattermost iOS App

App Info

Mattermost

Requires Mattermost Server v10.11.0+. Older servers may not be able to connect or have unexpected behavior. ------- Mattermost is the leading collaborative workflow platform for defense, intelligence, security, and critical infrastructure. The platform runs on-premises and in private clouds, delivering secure messaging, file sharing, workflow automation, audio/screenshare, and project managementβ€”all with full data and operational control. - Securely share messages, files, and links across from your preferred mobile devices. - Start 1:1 and group voice calls with a single click without leaving Mattermost. - Keep critical workflows moving forward with Playbook. - Get the message out without having to manage every endpoint with Enterprise Mobility Management (AppConfig) support. - Private mobility with ID-only push notifications to keep sensitive data protected while keeping stakeholders informed. To use this app, you need a URL for a Mattermost server. ------- Deploy your own server: https://docs.mattermost.com/guides/deployment.html Terms of Service: https://mattermost.com/terms-of-service/ Contribute to the project: https://github.com/mattermost/mattermost-mobile

Rating

Rated 4.76 out of 5 stars by 5,600 users

Version Info

  • Current Version 2.40.0
  • Last Updated 15 May 26
  • First Released 10 Jul 17
  • Minimum iOS Version 16.0
  • Device Models Supported 127

App Details

  • IPA Size 92.03 Mb
  • Price Free (USD)
  • Age Advisory 4+
  • Supported Languages 21
  • Developer Mattermost, Inc.
  • Bundle ID com.mattermost.rn

Screenshots

  • App screenshot
  • App screenshot
  • App screenshot
  • App screenshot

Mattermost Reviews

More Team Collaboration

  • Privacy-focused messenger using the Matrix protocol. The Element client allows for group chat rooms, media sharing voice and video group calls.

  • An IRC-based solution is another option, being decentralized there is no point of failure, and it's easy to self-host. However it's important to keep security in mind while configuring your IRC instance and ensure that channels are properly encrypted - IRC tends to be better for open communications. There's a variety of clients to choose from - popular options include: The Longe (Web-based), HexChat (Linux), Pidgin (Linux), WeeChat (Linux, terminal-based), IceChat (Windows), XChat Aqua (MacOS), Palaver (iOS) and Revolution (Android).

  • Secure group communications, with the option to be used over Tor or I2P. Fast intuitive group and 1-to-1 chats with text and rich media using decentralized chat rooms, with a mail feature for delivering messages to offline contacts. A channels feature makes it possible for members of different teams to stay up-to-date with each other, and to share files. Also includes built-in forums, link aggregations, file sharing and voice and video calling. RetroShare is a bit more complex to use than some alternatives, and the UI is quite retro, so may not be appropriate for a non-technical team.

  • Easy-to-deploy, self-hosted team collaboration platform with stable, feature-rich cross-platform client apps. The UI is fast, good looking and intuitive, so very little technical experience is needed for users of the platform. Rocket.Chat's feature set is similar to Slack's, making it a good replacement for any team looking to have greater control over their data.

  • Open source team chat organized around topic-based threading, which keeps busy conversations easier to follow than channel-only tools. Can be self-hosted, or used as a paid cloud service. The threading model takes some getting used to.

About the Data: Mattermost

Change History

  • Amended (androidApp, iosApp)

API

You can access Mattermost's data programmatically via our API. Simply make a GET request to:

https://api.awesome-privacy.xyz/v1/services/mattermost

The REST API is free, no-auth and CORS-enabled. To learn more, view the API Docs or read the API Usage Guide.

Share Mattermost

Help your friends compare Team Collaboration, and pick privacy-respecting software and services.
Share Mattermost and Awesome Privacy with your network!

View Team Collaboration (6)