Slash mobile app for iOS and Android — NCW fork of mattermost-mobile
  • TypeScript 92.1%
  • Kotlin 2.9%
  • Swift 2.7%
  • JavaScript 0.9%
  • Ruby 0.6%
  • Other 0.8%
Find a file
mohlec aeed7f68f2
All checks were successful
Build Slash Android APK / build-android (push) Successful in 7m55s
feat(dev): lightweight crash reporting via Mattermost webhook
DEV-ONLY tool for the current testing phase - not intended for
production, see inline warnings and PRD Phase 5 notes on where to
disable/remove before release.

No Sentry or other 3rd-party crash reporting was wired up, leaving zero
diagnostic trail for issues like the recent Android background-crash bug
(root-caused entirely from code review + user reports, no stack trace
available). This adds a minimal in-house alternative reusing existing
infra - no new servers, no new HAProxy routes:

- A private 'Crash Reports' Mattermost channel + incoming webhook receive
  reports (webhook already tested working: POST to
  https://chat.ncwcom.com/hooks/zgbotadhbintjps66d7erbqgte)
- app/utils/crash_report.ts: shared JS logic - ErrorUtils.setGlobalHandler
  hook for JS-level errors, posts device info + stack trace to the webhook
- Android (MainApplication.kt): Thread.setDefaultUncaughtExceptionHandler
  writes crash details to a local file synchronously (safe during process
  teardown) rather than attempting a network call mid-crash, then chains
  to the previous handler to preserve normal crash/termination behavior
- iOS (AppDelegate.mm): NSSetUncaughtExceptionHandler does the same for
  Objective-C/Swift exceptions. Hard native crashes (signals) are
  intentionally out of scope - correctly catching those requires a real
  signal handler, which is fragile to hand-roll and not worth it for a
  dev-only tool
- On next app launch, JS checks for a pending native crash file and
  uploads it if present (app/init/app.ts)
- New GLOBAL_IDENTIFIERS.CRASH_REPORTING_ENABLED WatermelonDB flag
  (app/queries+actions/app/global.ts), default on, absent record treated
  as enabled
- Settings toggle added to Advanced Settings screen, off switch persists
  immediately

Known limitation: webhook URL is embedded in the client config
(assets/base/config.json), same exposure model as the existing
SentryDsn*/RudderApiKey fields already in that file - extractable from
the compiled app, but only grants write access to one private channel.
Acceptable for the dev/test phase per user sign-off; flagged for removal
before production.
2026-07-09 12:13:42 -04:00
.forgejo/workflows ci: speed up Android builds — drop redundant upload, use full runner capacity 2026-07-06 15:07:39 +00:00
.github Mobile: Quick fixes for docs label automation (#9706) (#9712) 2026-04-29 08:30:45 +03:00
.husky Push react native to 0.73.6 (#7863) 2024-04-22 12:44:39 +02:00
android feat(dev): lightweight crash reporting via Mattermost webhook 2026-07-09 12:13:42 -04:00
app feat(dev): lightweight crash reporting via Mattermost webhook 2026-07-09 12:13:42 -04:00
assets feat(dev): lightweight crash reporting via Mattermost webhook 2026-07-09 12:13:42 -04:00
build/notice-file Add "APNG4Android" to ignoreDependencies in config.yaml (#8741) 2025-04-02 09:34:25 +03:00
detox Improve docs for e2e testing in iOS (#9674) 2026-04-14 15:42:39 +02:00
docs ci(ios): add TestFlight workflow and document CI keychain requirement 2026-07-01 17:03:32 -04:00
eslint Refactor gallery gestures (#8752) 2025-07-22 14:00:57 +08:00
fastlane fix(fastlane): use absolute IPA path in ncw_testflight lane 2026-07-07 16:12:05 -04:00
ios feat(dev): lightweight crash reporting via Mattermost webhook 2026-07-09 12:13:42 -04:00
libraries/@mattermost add support on iOS for Intune Conditional Access (#9660) 2026-04-09 17:46:52 +03:00
patches MM-68274 - Adding watermark capability in mobile (#9682) (#9695) 2026-04-16 16:58:40 +05:00
scripts Fix Android image loads by attaching auth headers (#9554) 2026-02-26 21:36:03 -05:00
share_extension Enable exhaustive deps in the repo (#9508) 2026-02-18 11:56:16 +01:00
test [MM-67923] Add channel settings for shared channels (#9591) 2026-04-14 11:43:44 +02:00
types fix(mobile): fix login broken on fresh install by push notification permission prompt 2026-07-07 16:02:18 -04: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 ci(ios): add TestFlight workflow and document CI keychain requirement 2026-07-01 17:03:32 -04:00
.gitmodules feat(iOS): Add Microsoft Intune MAM integration with multi-server support (#9312) 2025-12-10 13:07:28 +02:00
.node-version chore(deps-dev): allow devs to use Node.js 22 (LTS) (#8657) 2025-03-24 16:28:11 -06:00
.npmrc MM-54535 Fixed hang when using the magic keyboard on iPadOS 17 (#7555) 2023-09-27 18:54:33 +03:00
.nvmrc chore(deps-dev): allow devs to use Node.js 22 (LTS) (#8657) 2025-03-24 16:28:11 -06: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 branding: update app.json name/displayName to Slash Chat 2026-07-01 15:32:46 -04:00
babel.config.js Agents posts on mobile (#9317) 2025-12-09 03:56:12 -08: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 docs: add NCW iOS CI setup guide and Forgejo Actions workflow 2026-06-19 15:45:19 -04: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 Enable exhaustive deps in the repo (#9508) 2026-02-18 11:56:16 +01: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.ts feat(dev): lightweight crash reporting via Mattermost webhook 2026-07-09 12:13:42 -04:00
ISSUE_TEMPLATE.md Update ISSUE_TEMPLATE.md (#7080) 2023-02-03 08:55:40 -05:00
jest.config.js feat(iOS): Add Microsoft Intune MAM integration with multi-server support (#9312) 2025-12-10 13:07:28 +02: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 Upgrade RN as well as update or replace other dependencies (#8011) 2024-06-19 09:33:45 +08:00
NOTICE.txt chore: Update NOTICE.txt file with updated dependencies (#9513) 2026-02-16 12:43:21 +02:00
package-lock.json docs: add NCW iOS CI setup guide and Forgejo Actions workflow 2026-06-19 15:45:19 -04:00
package.json Bump app build and version number (#9697) (#9698) 2026-04-17 08:45:58 +03:00
PULL_REQUEST_TEMPLATE.md Barebones code for v2 2020-11-17 14:20:58 -03:00
react-native.config.js Update v2 dependencies (#5312) 2021-04-14 10:55:29 -04:00
README.md Update README.md (#9443) 2026-01-21 08:08:41 +02:00
SECURITY.md Barebones code for v2 2020-11-17 14:20:58 -03:00
tsconfig.json Agents posts on mobile (#9317) 2025-12-09 03:56:12 -08: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.

Android 16KB Page Size Support

Temporary Requirement: To comply with Google Play's 16KB page size requirement for Android devices, this project includes a compatibility patch that must be applied before building for Android.

When to Apply the Patch

  • CI/CD Builds: The patch is automatically applied in GitHub Actions for Android builds
  • Local Development: If you're building Android locally and encounter 16KB page size related issues, run:
npm run apply-16kb-pagesize-patch

This script will:

  1. Update package dependencies to compatible versions
  2. Apply necessary code changes for 16KB page size support
  3. Update patch files for modified dependencies
  4. Regenerate package-lock.json

⚠️ Important Warnings

  • DO NOT commit the changes applied by this patch to the repository
  • These changes will break iOS builds if committed
  • The patch is designed to be applied only during Android CI builds
  • For local development, revert all changes after building Android

Note: This is a temporary solution until all dependencies natively support 16KB page sizes.

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 youre 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 theres 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.