Basically, mobile applications are divided into the following three types:
I’ll briefly describe each type in this blog post, going into a little more detail about the technologies that are used and showing you the main advantages and disadvantages. The final section is an overview of various decision criteria for and against each type of mobile application.
Native applications are mobile applications developed and compiled specifically for a mobile operating system that can make the best use of the functionalities and features of those devices.
Depending on whether you are developing native apps for Android, iOS, or Windows Mobile, you’ll need to use different underlying technologies. For smartphones and tablets, for example, that use Android as their operating system, native applications are usually developed in Java or Kotlin using the Android Software Development Kit (SDK). On the other hand, programming languages such as Swift or Objective-C are used to develop applications for Apple products such as the iPhone and iPad or for the iOS operating system, while Visual C#, for example, is used for Windows Mobile.
Native apps have several advantages over the other types of mobile apps: First, the functionalities and features of the end device or mobile operating system can be optimally used because these features are made accessible via corresponding programming interfaces for the various programming languages. Second, native applications perform much better performance than other types of applications because the entire application is compiled for the specific operating system before execution, as shown in this figure.
The main disadvantage of native applications is the implementation effort: If an application is supposed to run on multiple mobile operating systems, a separate version must be implemented for each operating system. Not only does this increase the implementation work, but it also requires corresponding know-how in the team: When in doubt, you need at least a Kotlin or Java developer for Android, an Objective-C or Swift developer for iOS, or a C# developer for Windows Mobile.
The increased implementation effort and the required developers with different skills in turn result in comparatively high costs for the implementation overall. These costs are reason enough to consider the other types before deciding on a native application.
Note: Additionally, some solutions enable what’s called cross-platform development: In this context, you implement the respective application in a code base, which then “translates” the code for the different operating systems. A well-known example of a cross-platform solution is React Native; this solution allows native applications to be implemented in JavaScript.
Mobile web applications (mobile web apps with emphasis on “web”) are ordinary web applications optimized for the use on mobile devices.
Mobile web applications are developed in HTML5, CSS3, and JavaScript using responsive design principles and then run on the respective end device within a browser installed there. Special techniques and standardized Application Programming Interfaces (APIs) allow the application to be implemented in such a way that it feels as much as possible like a “real” mobile application. As with conventional web applications or websites, the source code of a mobile web application is located on a central server and downloaded to the end device, where it is interpreted and executed.
Responsive Design and CSS3 Media Queries: Responsive design, or responsive web design, refers to a paradigm in website development in which the layout of the website adapts to the resolution of the end device on which the particular website is viewed. In this context, media queries are primarily used to define CSS rules for specific resolutions.
Mobile web applications have several advantages over native applications: First, updates can be carried out relatively easily because the updates don’t need to occur on the end device, only centrally on the corresponding web server, which will then have a direct effect on all “distributed installations.” Second, with a mobile web application, you only need to create one version of the application, which is then executable on all common mobile operating systems. This approach reduces the initial development effort and the associated development costs on one hand, while also reducing the maintenance effort and the corresponding costs on the other. “Only” HTML, JavaScript, and CSS knowledge is required from the developer to implement this type of application, as opposed to requiring knowledge of Java, Swift, or C#.
However, in addition to these advantages, mobile web applications also have certain disadvantages when compared to native applications: First, access to native hardware functions like GPS, cameras, microphones, or similar is restricted for security reasons, as shown in the below figure. Second, mobile web applications cannot be installed on the end device like a native application but must always be executed in the browser. The user does not really get the feeling of a “real” native application.
Mobile Standards: The World Wide Web Consortium (W3C) has published many specifications to standardize access to the hardware features of mobile devices (for example, the Geolocation API for accessing, among other things, a user’s position data, www.w3.org/TR/geolocation-API/ or the Battery Status API for accessing information a battery’s charge level, www.w3.org/TR/battery-status). Nevertheless, with native applications, you have more opportunities to access the native features of a mobile operating system.
Another category of mobile applications involves hybrid applications, which try to combine the advantages of native applications with the advantages of mobile web applications.
Basically, a mobile web application is displayed within a native application. Platforms such as Android or iOS provide web views for this purpose. These special native GUI components contain their own rendering engine and can render web applications (or interpret HTML, CSS, and JavaScript code). In other words, in hybrid applications, the “frame” of the application is presented natively, but the actual content is presented as a web application.
Basically, two categories of hybrid applications exist: One variant requires a native part that forms the “frame” of the application and provides, among other things, what’s called a web view component in which the actual application is loaded as a web application. This web application is developed classically in HTML, CSS, and JavaScript. In the other variant, the application is also developed in HTML, CSS, and JavaScript but then partially “translated” into corresponding native components of the mobile operating system during “building.”
Via the native parts of the application (regardless of which variant is chosen), on one hand, you can install the hybrid application on an end device like a native application, and on the other hand, the application can access various features of the mobile platform, as shown here.
Meanwhile, various tools are available for developing web applications. The more modern ones include Flutter (https://flutter.dev), NativeScript (https://nativescript.org), Ionic (https://ionicframework.com), and React Native (https://reactnative.dev).
Hybrid apps thus combine the advantages of native apps and mobile web apps: They can be installed on a mobile device like a native application; they are largely platform independent; and “only” knowledge of HTML, CSS, and JavaScript is required for development.
Hybrid application development frameworks provide APIs for various hardware features and mobile platform features that are kept as generic as possible (i.e., using the lowest common denominator of different mobile platforms). When in doubt, however, not all features of the platform are “exhausted.” To put another way: Even though hybrid applications “bring” many native features to the JavaScript layer through named APIs, native applications still offer more capabilities.
As a mobile app developer, you’re spoiled for choice. Which of these types you choose for a specific project depends on various factors: Do you want to make the mobile application available for download in an app store? In that case, mobile web apps become unnecessary, and you must implement a native or hybrid app instead. Should the application be as performant as possible? Then, you would probably choose a native application because compiled code can be executed more quickly than JavaScript.
Thus, as a web developer, you need to understand which approaches are suitable for specific use cases or requirements. An overview to aid decision-making is provided in this table, where the three approaches are compared and summarized.
Editor’s note: This post has been adapted from a section of the book Full Stack Web Development: The Comprehensive Guide by Philip Ackermann. Philip is the CTO of Cedalo GmbH and the author of several reference books and technical articles on Java, JavaScript, and web development. His focus is on the design and development of Node.js projects in the areas of Industry 4.0 and Internet of Things.
This post was originally published in 2/2025.