Could you introduce your app in a few sentences?

Rocket.Chat is an open source team chat collaboration platform that allows users to communicate securely in real-time on web, desktop or mobile and to customize their interface with a range of plugins, themes and integrations with other key software.

Users can set up Rocket.Chat on cloud or by hosting their own servers on-premises, and the platform can be installed on Linux, FreeBSD, macOS and Windows as well as on Android and iOS. Rocket.Chat Marketplace launched in September 2018, enabling users to build, browse and download apps on Rocket.Chat’s newest app ecosystem.

By opting for Rocket.Chat, users benefit from audio and video conferencing, guest access, screen and file sharing, LiveChat, LDAP Group Sync, two-factor authentication (2FA), E2E encryption, SSO, dozens of OAuth providers and unlimited users, guests, channels, messages, searches and files.

With more than 800 developer-contributors and over 21k stars on Github, Rocket.Chat has the largest and most active community of chat developers in the open source communication sector.

What made you decide to use/switch to React Native?

We decided to evaluate React Native because we wanted to try its benefits for development productivity, such as shared code between mobile and web while maintaining our native look and feel.

We are also working on Rocket.Chat Apps, an app store for our main platform. Using React Native will allow us to compile each app’s code to run inside our React Native app.

After a few months of development, we decided to release our results as Rocket.Chat Experimental on the App Store and Google Play and we’re still shipping new features every week.

How did you transition to React Native?

We started with a greenfield app and we already use JavaScript on back-end and front-end, so it was pretty straightforward.

We still have iOS and Kotlin official versions on the stores, but we’re planning to add React Native inside of them in near the future. Watch this space!

Have your tried other cross platform technologies before using React Native?

Yes, we had a Cordova app even before creating our native versions.

It was stable and functional, but we decided to switch to native some time ago and now we’re going for React Native.

What has your experience been working with React Native in terms of app performance, have you noticed any impacts?

We’re aware of startup time as a known issue of React Native since its creation.

We require only necessary views at first and then inline requiring views as needed, but it still takes 100-200ms to fully start up.

A chat platform in its simpler way consists of lists of rooms/messages and text inputs. That said, FlatList and TextInput have performance issues as well.

There is a great talk by Ram N at Chain React 2018 about these issues.

How has adopting React Native affected developer productivity?

I wouldn't say it has affected anything as React Native is an experiment for us to see how far it can go to potentially reach our expectations and our native apps remain the official ones. There is still two separate teams for native (one for iOS and one for Android) and one smaller team for React Native.

In the first two weeks, we built a prototype with authentication, chat list, chat room, send messages and create channel. All of that with multiple servers ability. We think that’s pretty great!

We have been shipping features at a fast pace since then and it’s been incredibly easy.

We’re still using JavaScript, but willing to refactor everything on TypeScript. We use Jest and Detox for testing (currently 219 tests have passed on Detox), ESLint for linting.

We also use Storybook on a few components (we’re working to apply it to all of them, as it adds more tests than on Jest).

Reactotron is great for logging and inspecting, as is CircleCI for building. For automation we use Fastlane.

Many more are used too, like react-native-navigation, react-native-fast-image, redux, etc.

What resources have you used to learn React Native? Books, tutorials, courses etc. Anything you can recommend?

We have mostly used official documentation and tutorials by Spencer Carli and Nader Dabit.

Learning React Native by Bonnie Eisenman was really helpful too.

What are some things that you don’t like about React Native or that need to be improved?

There’s a discussion about it happening at the moment here.

I think there are many improvements being developed right now, like React Native Fabric, JSI, TurboModules, Lean Core, etc.

Since the start of the project (late 2017), React Native has changed a lot. In the last six months it has become faster and more reliable.

It has been really awesome to work with React Native and be part of this amazing community.

Anything else you would like to mention?

Check out our own blog post on our React Native journey so far.

We are open source and value our community, so feel free to contribute and star us on Github.

Rocket.Chat Experimental is now available in the stores: Android and iOS.

And you can find the React Native repo on GitHub here.