Custom mobile app build
Guide to building a custom-branded Chatwoot mobile app with push notifications, deep linking, and app store submission.Push notifications
Chatwoot supports mobile push notifications through Firebase Cloud Messaging (FCM). There are two delivery paths depending on your setup:- Relay server (default): Self-hosted instances without Firebase credentials route notifications through the Chatwoot relay server, which forwards them to the official Chatwoot mobile app.
- Direct FCM: Instances with Firebase configured send notifications directly to your custom-built mobile app.
You must use either the official apps for both platforms or custom builds for both — mixing is not supported. For more details, refer to the push notification documentation.
Setting up Firebase
To send push notifications to your custom-branded app, you need to configure Firebase on both the mobile app and the Chatwoot server.Step 1: Create a Firebase project
- Go to the Firebase Console and create a new project (or use an existing one).
- Register your Android app with your package name (e.g.,
com.yourcompany.app). - Register your iOS app with your bundle identifier (e.g.,
com.yourcompany.app).
Step 2: Download Firebase config files
Download the platform-specific configuration files from your Firebase project settings:- Android
- iOS
- In Project Settings > General, find your Android app and click Download google-services.json.
- Place the file in the root of the mobile app repository.
Step 3: Configure mobile app environment variables
Update your.env file to point to the Firebase config files:
Step 4: Generate a Firebase service account
The Chatwoot server needs a service account to send push notifications via the FCM v1 API.- In the Firebase Console, go to Project Settings > Service accounts.
- Click Generate new private key to download a JSON credentials file.
Step 5: Configure the Chatwoot server
In your Chatwoot installation, navigate to Super Admin > App Config and set the following:| Config key | Value |
|---|---|
FIREBASE_PROJECT_ID | Your Firebase project ID (e.g., my-project-12345) |
FIREBASE_CREDENTIALS | The full contents of the service account JSON file |
Verifying the setup
- Build and install the custom app on a device (
pnpm run:iosorpnpm run:android). - Log in to your Chatwoot instance from the mobile app.
- From another browser session, send a message to a conversation assigned to the logged-in agent.
- The device should receive a push notification.
Push notifications do not work on iOS simulators. You must use a physical device to test.
Deep linking
Deep linking allows users to tap a Chatwoot conversation URL (or a push notification) and be taken directly to that conversation in the mobile app. The app supports two mechanisms:- Custom URL scheme:
chatwootapp://— used for SSO callbacks and internal routing. - Universal Links (iOS) / App Links (Android):
https://<your-domain>/app/accounts/*/conversations/*— used for opening web URLs directly in the app.
How it works
When the app receives a deep link, React Navigation matches it against the configured path pattern and navigates to the conversation screen:Mobile app configuration
The app uses Expo’s built-in deep linking support. Inapp.config.ts, update the following to match your domain:
- iOS
- Android
Update the associated domain to your Chatwoot installation URL:Expo prebuild writes this into the
.entitlements file automatically.Server configuration
The Chatwoot server dynamically serves the verification files that Android and iOS require to confirm your app owns the domain. Configure the following environment variables on your Chatwoot installation:- iOS
- Android
The server serves an
apple-app-site-association file at https://<your-domain>/.well-known/apple-app-site-association. No additional configuration is needed beyond ensuring your Chatwoot installation is accessible at the domain specified in associatedDomains.Build & Submit using EAS
We use Expo Application Services (EAS) for building, deploying, and submitting the app to app stores. EAS Build and Submit is available to anyone with an Expo account, regardless of whether you pay for EAS or use our Free plan. You can sign up at Expo EAS.Build the app
iOS Build
Android Build
Submit the app
iOS Submission
Android Submission
- iOS:
.ipafile - Android:
.aabfile
It may take a while to complete the submission process. You will see the status of the submission on your terminal.

