Since desktop and mobile browsers started implementing HTML5 specifications, the war has been raging on between what is better for mobile apps, HTML5 or native? A quick Google can show that the war is still going on... My 2 cents in this is that generally we should go for HTML5. Here's why:
Let's first look at the popular pros and cons.
Access to device features Web apps will always be behind native in this one. Even now, new technologies like push notifications, NFC, OpenGL, accelerometer are still not available right out the box on the web. In the end, even the developer working on building the browser itself are writing a native app so the native APIs will always have to come first. In terms of app experience, clearly native app can do more, and even more in an ecosystem for a device. It will be a while before a web app is able to directly communicate to other apps on the same device, even just getting how much battery juice is left is a challenge! Thus, HTML5 will keep on playing the catch-up game forever.
Performance Native app have an advantage since they do not posses the web runtime barrier. A native app can easily display a list of over 1000 items, but the same can hardly be done using web apps without feeling the difference. Furthermore, web apps are not able to fully take advantage of the GPU hardware acceleration and multithreading, which can make the whole difference in the performance of a mobile app. Even though the browsers and devices are getting more and more powerful these days, the fact still remains that native apps will be faster than their web app counterpart.
Look and feel There is a consistent look and feel across the whole platform which changes between different platforms. The user usually expect the same look and feel in all the apps, but web apps have their own look and feel because of different APIs. By using the native libraries, the developers gets most of the look and feel done for them, but it is not the case for web apps. Needless to say, there are frameworks out there that offers themes to mimic as close as possible the look and feel of certain platforms.
Programming language Native APIs have been fully tested over and over again compared to the web app's APIs. Each platform have their own SDK that allows the developers to easily create and debug their application. The same thing cannot be said for web apps. Since standard specification are open to different interpretations, browser implementation may not be consistent throughout different platforms. This makes debugging web apps are nightmare for developers, not only does it lack debugging tools, the developers can't even expect the same behavior across different platforms.
So far it looks like native is the way to go... let's see the advantages of going web.
Cost A big advantage of going HTML5 is the cost of developing an app for multiple platforms. Creating a web app means writing once, deploying on many. There are currently 6 big platforms to develop on: iOS, Android, BlackBerry OS, Windows, webOS and Symbian. Creating a native app to cover all of those platform would imply writing the same app 5-6 times. A company would need different developers for each platforms due to the difference in programming language. This increases the cost of supporting many platforms by a large amount.
Maintenance The core of a web app is the same across all the different platform, so maintaining the big bulk of the code is easier. Maintaining native apps for different platform can be tedious due to all the different programming languages. Keeping up with 5-6 different source codes is not easy and can lead to hell in the long run.
Well it seems web app might be good... let's dig in a bit deeper and see the counterpoints for the cons from a business perspective.
The web itself has it's own look and feel AND can be customized. Most HTML5 mobile framework offers the developer the ability to theme their web apps to mimic their native counterpart. This also gives the ability to customize the look and feel of their web app to be consistent across all platforms. So instead of having the user expect the same look and feel as other apps on the same platform, we make the user expect the same across different platforms because it is your apps. A user using your app would expect the same look and feel and behavior when using the app on another platform. This can be done easily with HTML5 and CSS3.
Due to the popularity of web apps on mobile, many tools have been created to be able to remotely debug the web apps. The fact still remains that it is not as easy as the native app debugging, but at least web apps are not left in the dark with nothing...
To me it seems that starting with HTML5 is the way to go for most of the mobile apps. Only few instances would we need to go with a native app. The costs and maintenance of a native apps is usually not worth it if the app does not even need features not available on HTML5. Before starting a mobile app, think of your objective/goal, functionality needed, audience and platform to be supported, budget, need of performance and you will notice that web app will most likely satisfy your needs.