Mirror read-only upstream mattermost/mattermost-mobile para Synaptic Mobile Android.
Go to file
Guillermo Vayá 4b12bcec7b fix(drafts): Phase 5 review — capability re-read, disable epoch, commit ordering, overflow, reliable reconnect
Addresses 5 validated review findings on the Phase 5 trigger wiring:

- #3 Reconnect honored a stale cached capability: doReconnect now awaits
  handleCapabilityChange (re-reading the freshly-committed sync_drafts
  preference) before requestReconcile, so a persisted sync_drafts=false is
  respected on a fresh login.
- #4 Disable did not fence in-flight work: handleCapabilityChange's disable
  branch now bumps the lifecycle epoch (like invalidate) and resets the
  reconcile single-flight, so a GET/POST/DELETE crossing the disabled
  interval cannot apply results or set a baseline after re-enable.
- #5 Team reconcile ran before the switch committed: moved requestReconcile
  in handleTeamChange to after the new team is persisted (both the tablet
  fast-path and the normal path), so a concurrent DB-reading trigger can't
  coalesce the baseline back onto the previous team.
- #6a Reliable reconnect never reconciled: WebsocketManager.onReliableReconnect
  now calls DraftSyncManager.onReliableReconnect, which GET-reconciles the
  current team so silent (event-less) server-side deletions are caught.
- #7 Overflow could permanently stall event-triggered reconcile: enqueue now
  fires the reconcile trigger even on buffer overflow (dropping only the
  push), so a full buffer left by a transient current-team lookup failure
  cannot wedge reconciliation after the database recovers.

Pushed back (not changed): #1 (fence absent keys — would resurrect deleted
drafts; belongs to Phase 6 deleted_fingerprint) and #2 (drain during pending
GET is local-wins-safe, absence is 2-observation guarded). Deferred: #6b
suspend/resume, #8a Global-Drafts stale-on-open, #8b reconciliation deadline.

tsc + eslint clean; new manager tests for #4/#6a/#7 and a reconnect
capability/ordering assertion for #3. All affected suites green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-18 14:36:43 +02:00
.github feat(e2e): Integrate TSIO reporting (#9925) 2026-07-23 06:43:28 +00:00
.husky Push react native to 0.73.6 (#7863) 2024-04-22 12:44:39 +02:00
android Bump app build number to 789 (#9956) 2026-07-20 13:01:06 +03:00
app fix(drafts): Phase 5 review — capability re-read, disable epoch, commit ordering, overflow, reliable reconnect 2026-08-18 14:36:43 +02:00
assets feat(drafts): Phase 3.3 — composer race guards + fail-closed BoR send guard 2026-07-27 17:38:30 +02:00
build/notice-file Ignore @mattermost/calls-native in notice file generation (#9875) 2026-06-23 11:00:37 +01:00
detox feat(e2e): Integrate TSIO reporting (#9925) 2026-07-23 06:43:28 +00:00
docs feat(drafts): Phase 1 synchronized-drafts storage foundation 2026-07-23 16:18:48 +02:00
eslint Migrate from RNN to Expo router (#9402) 2026-05-13 17:44:55 +08:00
fastlane test(detox): re-submit RF→Detox migration without unintended UI changes (#9847) 2026-06-19 22:44:02 +05:30
ios Bump app build number to 789 (#9956) 2026-07-20 13:01:06 +03:00
libraries/@mattermost Receive Mattermost Calls through iOS native incoming-call UI (#9780) 2026-06-16 12:08:14 -03:00
patches Fix crash on android caused by keyboard controller (#9902) 2026-07-07 15:31:44 +08:00
scripts Simplify iOS dependency install: remove "-m1" script variants (#9816) 2026-06-09 18:59:07 -03:00
share_extension Mm 68767 zero persistence (#9803) 2026-07-16 13:55:45 +02:00
test feat(drafts): Phase 1 synchronized-drafts storage foundation 2026-07-23 16:18:48 +02:00
test-runner Fix push notification crash when server returns non-Map error data (#9618) 2026-04-16 19:26:50 -04:00
types feat(drafts): Phase 2 — draft sync API DTOs, REST client, normalization, capability 2026-07-24 11:49:47 +02:00
.buckconfig Barebones code for v2 2020-11-17 14:20:58 -03:00
.editorconfig MM-35115 [Gekidou] Login flow - Email and Password (#5402) 2021-06-18 00:57:40 -04:00
.flowconfig [Gekidou] Upgrade to RN 0.70 (#6690) 2022-10-20 10:18:25 -03:00
.gitattributes Update v2 dependencies (#5312) 2021-04-14 10:55:29 -04:00
.gitignore Add date/datetime field support with timezone features for Apps Forms (#9521) 2026-07-16 08:09:47 -06:00
.gitmodules feat(iOS): Add Microsoft Intune MAM integration with multi-server support (#9312) 2025-12-10 13:07:28 +02:00
.node-version Migrate from RNN to Expo router (#9402) 2026-05-13 17:44:55 +08:00
.npmrc MM-54535 Fixed hang when using the magic keyboard on iPadOS 17 (#7555) 2023-09-27 18:54:33 +03:00
.nvmrc Migrate from RNN to Expo router (#9402) 2026-05-13 17:44:55 +08:00
.ruby-version bump Ruby verison (#8315) 2024-11-07 12:34:24 -04:00
.solidarity Update dependencies and upgrade to RN 0.76.5 (#8421) 2025-01-16 07:11:32 -07:00
.watchmanconfig Barebones code for v2 2020-11-17 14:20:58 -03:00
app.json Migrate from RNN to Expo router (#9402) 2026-05-13 17:44:55 +08:00
babel.config.js Add BoardView, PropertyField, PropertyValue WatermelonDB tables (#9708) 2026-06-01 12:46:40 +02:00
CHANGELOG.md Barebones code for v2 2020-11-17 14:20:58 -03:00
CLAUDE-IOS-SIMULATOR.md [MM-66591] Channel Summaries with Agents (#9405) 2026-02-13 07:00:43 -05:00
CLAUDE.md feat(e2e): Integrate TSIO reporting (#9925) 2026-07-23 06:43:28 +00:00
CONTRIBUTING.md Barebones code for v2 2020-11-17 14:20:58 -03:00
env.d.ts E2E feature schedule posts (#8709) 2025-04-23 12:10:37 +05:30
eslint.config.mjs [MM-69457] Stop logging PII in exportable app logs (#9884) 2026-07-02 12:19:04 +02:00
Gemfile pin rexml to >=3.4.2 (#9533) 2026-03-11 10:52:43 +01:00
Gemfile.lock pin rexml to >=3.4.2 (#9533) 2026-03-11 10:52:43 +01:00
index.tsx Migrate from RNN to Expo router (#9402) 2026-05-13 17:44:55 +08:00
ISSUE_TEMPLATE.md Update ISSUE_TEMPLATE.md (#7080) 2023-02-03 08:55:40 -05:00
jest.config.js feat(e2e): Integrate TSIO reporting (#9925) 2026-07-23 06:43:28 +00:00
jsconfig.json Secure Files and preview PDF inline (#8844) 2025-06-19 15:30:56 +08:00
LICENSE.txt Barebones code for v2 2020-11-17 14:20:58 -03:00
metro.config.js Migrate from RNN to Expo router (#9402) 2026-05-13 17:44:55 +08:00
NOTICE.txt chore: Update NOTICE.txt file with updated dependencies (#9882) 2026-06-23 13:21:32 +03:00
package-lock.json Bump app build and version number (#9939) 2026-07-17 10:37:06 +03:00
package.json Bump app build and version number (#9939) 2026-07-17 10:37:06 +03:00
PULL_REQUEST_TEMPLATE.md Barebones code for v2 2020-11-17 14:20:58 -03:00
react-native.config.js Fix intune autolink path (#9760) 2026-05-15 21:20:19 +08:00
README.md Migrate from RNN to Expo router (#9402) 2026-05-13 17:44:55 +08:00
SECURITY.md Barebones code for v2 2020-11-17 14:20:58 -03:00
sentry.options.json Migrate from RNN to Expo router (#9402) 2026-05-13 17:44:55 +08:00
tsconfig.json Add BoardView, PropertyField, PropertyValue WatermelonDB tables (#9708) 2026-06-01 12:46:40 +02:00
tsconfig.test.json Barebones code for v2 2020-11-17 14:20:58 -03:00

Mattermost Mobile v2

  • Minimum Server versions: Current ESR version (10.11.0+)
  • Supported iOS versions: 16.0+
  • Supported Android versions: 7.0+

Mattermost is an open source Slack-alternative used by thousands of companies around the world in 21 languages. Learn more at https://mattermost.com.

You can download our apps from the App Store or Google Play Store, or build them yourself.

We plan on releasing monthly updates with new features - check the changelog for what features are currently supported!

Important: If you self-compile the Mattermost Mobile apps you also need to deploy your own Mattermost Push Notification Service.

How to Contribute

Testing

To help with testing app updates before they're released, you can:

  1. Sign up to be a beta tester
    • Android
    • iOS - Open this link from your iOS device
  2. Install the Mattermost Beta app. New updates in the Beta app are released periodically. You will receive a notification when the new updates are available.
  3. File any bugs you find by filing a GitHub issue with:
    • Device information
    • Repro steps
    • Observed behavior (including screenshot / video when possible)
    • Expected behavior
  4. (Optional) Sign up for our team site

You can leave the Beta testing program at any time:

  • On Android, click this link while logged in with your Google Play email address used to opt-in for the Beta program, then click Leave the program.
  • On iOS, access the Mattermost Beta app page in TestFlight and click Stop Testing.

Contribute Code

  1. Look in GitHub issues for issues marked as [Help Wanted]
  2. Comment to let people know you’re working on it
  3. Follow these instructions to set up your developer environment
  4. Join the Native Mobile Apps channel on our team site to ask questions

Frequently Asked Questions

How is data handled on mobile devices after a user account is deactivated?

App data is wiped from the device when a user logs out of the app. If the user is logged in when the account is deactivated, then within one minute the system logs the user out, and as a result all app data is wiped from the device.

I need the code for the v1 version

You can still access it! We have moved the code from master to the v1 branch. Be aware that we will not be providing any more v1 versions or updates in the public stores.

Troubleshooting

I keep getting a message "Cannot connect to the server. Please check your server URL and internet connection."

This sometimes appears when there is an issue with the SSL certificate configuration.

To check that your SSL certificate is set up correctly, test the SSL certificate by visiting a site such as https://www.ssllabs.com/ssltest/index.html. If there’s an error about the missing chain or certificate path, there is likely an intermediate certificate missing that needs to be included.

Please note that the apps cannot connect to servers with self-signed certificates, consider using Let's Encrypt instead.

I see a “Connecting…” bar that does not go away

If your app is working properly, you should see a grey “Connecting…” bar that clears or says “Connected” after the app reconnects.

If you are seeing this message all the time, and your internet connection seems fine:

Ask your server administrator if the server uses NGINX or another webserver as a reverse proxy. If so, they should check that it is configured correctly for supporting the websocket connection for APIv4 endpoints.