In April 2022, Microsoft App Center deprecated Cordova support, a true sign of the waning popularity of the framework. Despite its decreasing popularity, and a shortening list of tools to support the development of apps with the SDK, it’s estimated that around 180 companies (including many fortune 500 companies) still use Cordova in their tech stack. With months of no updates, many are finding themselves looking for an alternative platform.
Enter Capacitor. Ionic’s open-source powerhouse is the perfect replacement for those looking to migrate from Cordova. Improved developer experience, consistency, and tons of support are just some of the highlights of Capacitor. But how can you tell that it’s time to make the switch?
Are you frustrated with compatibility plugins?
Cordova iterates slowly and requires a set of plugins that exist solely to augment the build system. If a plugin author wanted to write Cordova plugins using Swift and Android X libraries, they’re out of luck because Cordova doesn’t support them out of the box. To solve this, “compatibility plugins” need to be created and used in addition to the functional plugins which require newer native compatibility. This means valuable development resources going toward creating these plugins or relying on the community.
Cordova also forces you to manipulate native projects through hooks, which can lead to writing a lot of scripts to make modifications. These scripts are often difficult to troubleshoot when changes occur to the native environment.
In contrast, Capacitor leverages native projects as a source artifact. This allows developers to make adjustments to the actual Android and iOS projects to enable capabilities such as Swift or Android X libraries without needing to create or use any compatibility plugins, additional unnecessary hooks, etc. Capacitor also doesn’t require creating native iOS and Android projects from scratch every time, saving development teams time and headaches. Ionic offers a core set of plugins that cover a range of common native API needs, and the community maintains a slew of other plugins to choose from. However, if you can’t find what you need, it’s simple to open the native project directly and implement that functionality or quickly build out your own plugin that can then be used in multiple projects.
Do you wish your teams could work together seamlessly?
Cordova works through an abstraction layer that manages the underlying native platform project and source files for you. This makes it harder to drop down to native code or work with a traditional native mobile development process. This can also result in custom changes being lost.
On the other hand, Capacitor apps are actual native apps, so a key design consideration is that Capacitor embraces native tooling. It enables teams that have a mixture of traditional native mobile and web developers to collaborate on mobile app projects without worrying about losing any changes. Developers can also quickly add custom native code for specific platforms and optionally expose that code to the Web layer, ensuring an app team never gets stuck when implementing new functionality.
Are your security plugins outdated?
If you’re handling sensitive data like personal information or financial data in your Cordova application, security may be a concern. The security posture of your application is ultimately left up to you, or the Cordova community, to maintain and update. This popular secure storage plugin was forked from the original in an effort to keep it updated but has since been left untouched for nearly three years (at the time of writing). There’s also a widely used biometric plugin that has sat idle for more than a year. Without SLAs to lean on, there is simply no guarantee that the plugins that your applications may rely on will remain up to date with the latest iOS and Android security policy changes.
With Capacitor, you have the option of leveraging plugins that were specifically designed for the platform, rather than relying on third party or home-grown solutions. With guaranteed SLAs, Ionic takes ownership of ensuring that Capacitor and Capacitor plugins meet the ever-changing security demands of development ecosystems.
When you build with Capacitor, you can also add on a slew of enterprise-grade features that ensure security is baked in from the outset of your project. Enterprise plugins, such as Auth Connect, provide enhanced security features which makes it easy to integrate with popular auth providers and custom solutions, from Azure AD to Auth0 and more. Meanwhile, Identity Vault allows you to add biometric protections to new or existing apps. Enterprise customers can also leverage Secure Storage, a powerful local database that makes it easy to encrypt, store, access, and manage data across all platforms.
If you’re already using our security solutions as part of a Cordova project, don’t worry – they work seamlessly with Capacitor, so migrating is a breeze.
Are you tired of having to add/remove platforms when errors occur?
Cordova projects tend to lack a fundamental piece of functionality: version control. When building with Cordova, your native projects are build artifacts that are generated with each build. As a result, modifications to the native projects need to be handled through obscure markup in an XML file or via code patching by way of Cordova hooks. Both of these methods are potentially fragile.
In addition, when developing with Cordova, it is common for developers to have to remove the native projects and regenerate them on a regular basis. Often a new plugin is added or changes are made to the config.xml file. Sometimes those changes are propagated to the existing native platforms and everything works fine. Other times, the native applications will behave oddly because changes were not propagated properly and developers need to completely remove the platforms as well as the plugin cache and regenerate them. The problem is the time wasted figuring out when they need to do this versus when they have another issue that needs to be addressed.
When building with Capacitor, your platforms are easily version controlled, allowing you to better manage projects if any errors do arise. This means a cleaner final product and less time and resources wasted during development.
Do you wish you had some support?
Official support for Cordova ended back in 2020 when Adobe shut down PhoneGap. These days, Cordova is driven by volunteers that operate on a group consensus system. The open-source project is not driven by business goals nor do they prioritize the needs of any specific user.
Since Capacitor is a key aspect of Ionic’s mobile infrastructure and the infrastructure of its customers, security and functionality issues are discovered, fixed, and released quickly. There are teams of engineers, product managers, and customer success experts dedicated to customer and project success. Capacitor is currently used by thousands of developers worldwide with a robust community behind it.
Beyond Capacitor’s widespread community support, Ionic offers Enterprise Support and Advisory services for enterprises building mission-critical apps. With guaranteed response SLAs throughout the app lifecycle, our professional support team is on-hand to help you troubleshoot and address issues occuring at the native layer. Enjoy peace of mind knowing that you have a team of mobile experts with you every step of the way as you build out your next project.
Are you worried it’s too hard to migrate? (It’s not)
While migration may seem intimidating, it’s not as difficult as you think. Capacitor has backwards compatible support for a large swath of existing Cordova plugins. Following migration, you can enjoy a smoother build process, improved developer experience, and better end product.
In short, you’ll first add Capacitor to your projects and modify them appropriately. Then, you’ll migrate your plugins, set permissions, and update your preferences. Lastly, you’ll set the scheme and remove Cordova from the project.
If you still have questions, reach out to us for Support and Advisory services and we can provide bespoke suggestions for your app needs.