TL;DR
- Native apps are still the most common solution.
- React Native is showing promise.
The landscape for building mobile apps with JavaScript is still very young, and as expected, the Native Apps category still pulls in the highest awareness rating of the survey, as well as a very high satisfaction rating at 84%.
The challenge with native platforms is a doubling of cost/effort when you want to cover more platforms. This was often a non-issue in the past, because customers and clients of mine would only care about targeting iOS thanks to its huge userbase.
This is quickly changing though as Android now owns over 60% of the market share. This leaves a lot of developers wanting to figure out a way to deliver a quality app for both environments, with as little redundant work as possible.
JavaScript has been the path to easily build for both platforms with an easy to learn language, strong tooling, and a growing developer population. React Native is the obvious 800-pound gorilla in the JavaScript category here, with its super high 92% satisfaction rating and a 78% interest-to-learn rating.
Cordova and PhoneGap (which are basically the same thing) have much lower interest ratings, and it makes you wonder if people are turned off by the performance issues you sometimes hear about. With Cordova and PhoneGap, you rely on the underlying phone browser and its JavaScript engine to do the heavy lifting, which is often slower than running native code like React Native.
The newcomer in the space is Native Script with 49% of respondents saying they've never heard of it. While it can be used directly, it also offers easy integration with Angular 2 for building your application.
Plain JavaScript | ES6 | CoffeeScript | TypeScript | Elm | ClojureScript | No Framework | React | Angular | Angular 2 | Ember | Vue | Backbone | Redux | MobX | Relay | REST API | Firebase | GraphQL | Apollo | Falcor | Horizon | Meteor | FeathersJS | DoneJS | MERN | MEAN | Mocha | Jasmine | Enzyme | Jest | Cucumber | Ava | Plain CSS | SASS/SCSS | LESS | CSS Modules | Aphrodite | Webpack | Grunt | Gulp | Browserify | Bower | Native Apps | React Native | Cordova | PhoneGap | NativeScript | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Native Apps | 4 | 2 | 4 | 5 | 3 | 3 | 4 | 4 | 2 | 5 | 5 | 2 | 4 | 3 | 2 | 4 | 11 | 7 | 5 | 1 | 2 | 3 | 2 | 1 | 1 | 3 | 6 | 5 | 5 | 0 | 4 | 6 | 0 | 5 | 2 | 4 | 5 | 2 | 2 | 6 | 2 | 4 | 4 | 100 | 19 | 10 | 9 | 8 |
React Native | -4 | 17 | 2 | 1 | 6 | 7 | -4 | 33 | -7 | 0 | 4 | 1 | -1 | 29 | 12 | 14 | 5 | 13 | 20 | 12 | 8 | 9 | 7 | 7 | 5 | 12 | 1 | 15 | 5 | 18 | 16 | 5 | 11 | -1 | 5 | 2 | 14 | 11 | 23 | -3 | 1 | 5 | -5 | 19 | 100 | 2 | 0 | 7 |
Cordova | 4 | 1 | 1 | 9 | -3 | -1 | 2 | -7 | 17 | 13 | 2 | 2 | 4 | -7 | 1 | 0 | 6 | 9 | 3 | 2 | 2 | 5 | 10 | 4 | 4 | -1 | 12 | 2 | 8 | -7 | -3 | 5 | -2 | 3 | 6 | 9 | 0 | 0 | -4 | 9 | 10 | 6 | 12 | 10 | 2 | 100 | 75 | 9 |
PhoneGap | 5 | -2 | 2 | 5 | -3 | -1 | 4 | -7 | 14 | 10 | 2 | 2 | 6 | -7 | 0 | 1 | 4 | 7 | 3 | 0 | 2 | 4 | 6 | 2 | 2 | 0 | 10 | 1 | 7 | -7 | -3 | 3 | -2 | 4 | 6 | 11 | 1 | -1 | -4 | 10 | 9 | 7 | 11 | 9 | 0 | 75 | 100 | 9 |
NativeScript | 0 | 2 | 2 | 14 | -2 | 0 | 0 | -1 | 6 | 15 | 1 | 1 | 2 | 0 | 3 | 3 | 0 | 7 | 4 | 5 | 4 | 7 | 5 | 7 | 8 | 0 | 8 | 0 | 2 | -1 | -1 | 1 | 1 | 2 | 0 | 3 | 4 | 4 | 1 | 5 | 6 | 3 | 5 | 8 | 7 | 9 | 9 | 100 |
Note: “user” defined as people who picked “I've used it before, and would use it again”. Phi coefficient values go from -100 to +100, darker red indicates stronger positive correlation, darker blue indicates stronger negative correlation.
Right off the bat, we can see a strong correlation between PhoneGap and Cordova, which makes sense as they're basically the same technology.
The other point of interest here is that React Native developers tend to have a higher correlation for things like React, Redux, and particularly using testing frameworks and tools. It is no secret that I am a fan of writing tests, but a lot of the correlation numbers seem to point to a lack of enthusiasm for testing when using other mobile building platforms.
It is also very interesting that people who mentioned native development have a higher correlation with people who mentioned React Native. I've heard from many native developers that they enjoy the process of building React Native applications, too.
We have an interesting thing occurring in this graph, another Cordova integration framework like PhoneGap is taking the top spot - Ionic.
Ionic provides a UI interface, build tools, etc on top of Cordova. I think it is an interesting choice and if you are fine with browser engine JavaScript performance, Ionic can give you a lot of initial development speed to launch something.
The other point of interest in this graph is Progressive Web Apps. This is a relatively new concept being pioneered by Google. Progressive Web Apps (PWA for short) allows a developer to create a web app like normal, but then you attach a manifest for files needed to run the app, a service work, and a few other things to build an installable app that can be downloaded via the browser.
This allows developers to deliver a smooth and easy installation experience right from the web app. The downside of this approach right now is a total lack of support from mobile Safari, leaving a big question mark in how to support this line of development for both Android and iOS.
Mobile development using JavaScript is in an interesting place right now.
Compared to web development, building mobile apps is still relatively new for developers. But with new technologies like Progressive Web Apps, React Native, and NativeScript, we still have a lot to learn and explore together as a community.