Rocket.Chat is moving its Mobile Apps to React Native

Gabriel Engel
October 11, 2019
·
min read

Rocket.Chat Reacts!
Rocket.Chat is moving its mobile apps to React Native

You may have noticed a lot of recent changes with the mobile apps.

 

Rocket.Chat has been maintaining two native versions of the mobile app, one for Android and one for iOS. This has proved to be quite problematic and we had to split our resources which is inefficient. We therefore made the decision to build a new app based on a common framework. After months of deliberation, testing, and lots of community help, we have finally decided to move to the proven React Native framework.

 

The benefits to users:

  • We can concentrate our resources on one codebase rather than two different versions
  • Every platform gets the same features at the same time thanks to one codebase
  • We can ensure consistency of UI across the two native platforms
  • More resources means we can ship new features faster
  • More resources means we can fix bugs faster
  • Easier contributions in JavaScript; no more Kotlin + Swift + JavaScript
  • This will more closely match the web UI being developed in React

 

As a result of this move, the old Android and iOS apps will be deprecated and seamlessly replaced.

Join us on this new and exciting chapter in the development of Rocket.Chat!

Please read on if you want to understand a little more of the history behind this move.

A little more history

Back on August 3rd 2017, after various ongoing technological struggles fixing bugs and releasing features on the Native apps, we decided to start the React Native project with this first commit. At the time it was just an experiment on how we could develop with React Native, and how it would perform compared with the Native apps.

With three developers working in their spare time on this new project, we had a working version in just a few weeks. We decided to make the project official inside the company and to bring in a new and full-time developer to move the experiment forward. We had both the native Rocket.Chat mobile apps under development, and were considering the idea of rewriting the web-client using React, so it seemed to be a good match to allow the developers to deliver the UI via Apps on both the web-client and mobiles.

With the end-user experience in mind, we kept the React Native app as an experimental project with the objective of testing the new technology, getting community feedback and seeing how the community contributors would accept it. We then decided to release the new app as the new Rocket.Chat Experimental app alongside the Rocket.Chat native ones in the stores, but always keeping the Native as the official ones, and updated.

During this process some of our mobile developers decided to move on. We decided to hire new ones, but as we now had the idea of replacing the native mobile apps with the new Experimental mobile app we decided to redeploy our resources, keeping one native developer of each team to help on the native parts of the new apps and to keep maintaining the native SDKs.

We started to move more slowly with new features on our native apps for two main reasons. We would not need many native developers once we were using the replacement app. We wanted feature parity to be able to replace the native apps, which would be hard to achieve if the native teams had 6 times the number of developers that the React Native team had.

Finally, a few months ago we reviewed the star ratings we were receiving in the app stores for each app, the new app usability vs the native apps, and how fast we were moving on the React Native app in development terms. This led us to the decision to migrate from the native apps to the React Native one, and make it official to the public.

Apart from themes and tablet support, we now have both iOS and Android features in sync and are almost finishing everything necessary to replace the native apps. We believe that this change will help us, as developers and as a company, to deliver a better product, faster, reliable, and in sync with the web features.

We are a JavaScript project with JavaScript developers, and this change will allow our whole team, and the entire community, to help with the product development.

In the future, this may allow us to run teams by feature, rather than one monolithic team with every member knowing every conceivable part of the ecosystem. We can have specific areas of knowledge that overlap where required, which will enable us to concentrate knowledge and be more agile.

The future

The React Native replacements will start in October and will land as beta versions first. After a few weeks of testing, we will start to replace the old versions for everyone. The iOS replacement will happen later this year. The native iOS version had more features than the Android native version, and we decided we would not release it without the feature parity, or at least the most important features.

Both replacements should not affect how you stay in sync with your team(s) conversations. You should not be required to log in to the app again on the update. As a result, we should have a seamless transition and avoid the issues we had as reported in this blog post.

After the replacement, we will still keep the Experimental version of the app alive. It will become our Development channel allowing users to test both the Official version and the Experimental version at the same time. Both versions will share credentials via Group ID which helps users maintain their credentials in sync, and to test the new features.

The Android replacement

We released an Android version 4.0.0 on Google Play beta on October 2nd. We plan to release it as public version on October 14th. The codebase was completely rewritten in Javascript using React Native, but both Android and iOS replacement should not require the user to log in again.

 

With the new React Native app, our Android version is soon going to receive exciting new features:

  • Share Extension
  • Threads support
  • Favorite, hide or read channels right from the channels list
  • Record audio and video
  • Notification preferences
  • Grouped messages
  • Custom fields on signup

 

We're working to have grouped notifications and instant reply from notifications in a future release. When iOS replacement happens, the Android app will receive Themes and Tablet support. One of the wonders from React Native is code sharing!

 

Meanwhile, make sure to join our beta on Google Play.

The iOS replacement

The reason we won't replace iOS and Android at the same time is we're still working to achieve feature parity with the native iOS app. We plan to release a beta by the end of October and the full replacement by November. The same behavior on Android applies to iOS. It's a completely different code base, but it shouldn't require users to enter their credentials once again on update.

One major difference between the iOS and Android native apps is the themes and tablet support that the iOS version has. We are in the process of adding this to the React Native version so that when we come to replace the iOS native version there will be no noticeable differences.

At this point the Android user base should have all been migrated to React Native at version 4.0.x so that when 4.1.0 lands it will finally bring iOS and Android into line.

Beyond

There's a bright future ahead of this new app. We have plans to work on new features, but we know you care about stability, and we do as well. Here's a quick list of some of the exciting new features in our pipeline:

  • End-to-End encryption
  • Accessibility
  • Full Discussions support
  • Omnichannel support
  • Push notification encryption
  • Create a UI lib sharing components with web

Please feel free to add to them as a New Feature Request in the React Native repository with a title like: [NFR - new feature I would like to see]

Of course Pull Requests with you code are always welcomed!

Come and join us to build the best Open Source chat platform in the world!

Get started with Rocket.Chat’s secure collaboration platform

Talk to sales

Frequently asked questions about <anything>

Gabriel Engel is the CEO and co-founder of Rocket.Chat, the leading open source communications platform.
Gabriel Engel
Related Article:
Team collaboration: 5 reasons to improve it and 6 ways to master it
Want to collaborate securely with your team?
Deploy Rocket.Chat on-premise or in the cloud and keep your conversations private.
  • Digital sovereignty
  • Federation capabilities
  • Scalable and white-labeled
Talk to sales
Looking for a HIPAA-ready communications platform?
Enable patients and healthcare providers to securely communicate without exposing their data.
  • Highly scalable and secure
  • Full patient conversation history
  • HIPAA-ready
Talk to sales
The #1 communications platform for government
Deploy Rocket.Chat on-premise, in the cloud, or air-gapped environment.
  • Digital sovereignty
  • Trusted by National Geospatial-Intelligence Agency (NGA), the US Army, the US Navy, and the US Air Force
  • Matrix federation capabilities
Talk to sales
Want to customize Rocket.Chat according to your own preferences?
See behind the engine and change the code how you see fit.
  • Open source code
  • Highly secure and scalable
  • Unmatched flexibility
Talk to sales
Looking for a secure collaboration platform?
Keep your conversations private while enjoying a seamless collaboration experience with Rocket.Chat.
  • End-to-end encryption
  • Cloud or on-prem deployment
  • Supports compliance with HIPAA, GDPR, FINRA, and more
Talk to sales
Want to build a highly secure in-app chat experience?
Use Rocket.Chat’s APIs, frameworks, and managed backend to build a secure in-app or live chat experience for your customers.
  • Supports compliance with HIPAA, GDPR, FINRA, and more
  • Highly secure and flexible
  • On-prem or cloud deployment
Talk to sales

Our best content, once a week

Share this on:

Get your free, personalized demo now!

Build the most secure chat experience for your team or customers

Book demo