A New Chapter for @ionic-native
There are a bunch of other details, however, so read on to learn more about this change and why we’re making it:
But first, some history:
Back when Ionic started, developers struggled to use Cordova plugins in their AngularJS 1.x apps. Because of the way AngularJS worked, change detection had to be manually triggered so using Cordova plugins was tricky especially for developers new to AngularJS. To fix this, we built a project some might remember called ngCordova, which was essentially a set of AngularJS service wrappers around Cordova plugins to trigger change detection and curate the huge set of Cordova plugins into a single location.
When Angular 2 came out, developers struggled to use plugins in TypeScript since the vast majority of plugins did not ship types, and few plugins supported Promises. To fix this, the project shifted into what we called Ionic Native: a set of typescript wrappers around Cordova plugins that add niceties like promises and documentation around the hundreds of quality plugins in the Cordova ecosystem.
And then came Capacitor
Ionic Native was created back in the era where Cordova was the only native runtime developers used to build cross-platform hybrid apps. Around 2018, the Ionic team released a from-scratch replacement for Cordova called Capacitor.
Over the last three years, Capacitor has become the standard native runtime for all new Ionic apps, and is quickly becoming the standard for building mobile apps with web technology. Today, Capacitor is installed over 650k times every month and growing fast:
The Challenge with ionic-native
While Capacitor has had backwards-compatibility with the Cordova Plugin API since the beginning, and a large percentage of Cordova plugins work in Capacitor apps, the reality is that the open source ionic-native project is made up entirely of Cordova plugins.
The ionic-native plugins also currently occupy a premium position on the Ionic docs, causing confusion for developers expecting to find Capacitor plugins or at least plugins that are known to work in Capacitor. This is further compounded by the fact that the Capacitor community also has a registry of quality Capacitor plugins called Capacitor Community but those are not listed today on the Ionic docs.
Finally, the “Ionic Native” brand is powerful and confusing, suggesting to users that Ionic owns each one of these plugins and has control over them and also is on the hook for fixing them.
Changes to ionic-native
To fix these issues and resolve this confusion, we’ve decided to make a number of changes to the ionic-native project.
First, the project has been transferred to Ionic community member Daniel Sogl, who has been primarily maintaining the project over the last few years. Daniel expressed strong interest in taking the project over in an official capacity and continuing to maintain it.
The project has been renamed to awesome-cordova-plugins which follows a pattern of other curation projects on GitHub, and also clearly indicates this is a set of Cordova plugins.
The @ionic-native npm org will continue to be available so developers can continue to install plugins through that org, but awesome-cordova-plugins packages in that org will be set to a two year deprecation period. Developers should migrate to @awesome-cordova (which will be up and running soon) over that two year period in order to avoid disruption. The @ionic-native org may be repurposed for other future Ionic initiatives. Note: this deprecation period will not apply to any @ionic-native packages related to Ionic enterprise packages (if any).
Finally, the current ionic-native documentation that lives in the Ionic docs will be removed and replaced with a different design once we roll out our updated documentation. We will still work to link to quality Cordova plugins, both in the @awesome-cordova registry and elsewhere, because many Ionic developers are still using Cordova today, and for those using Capacitor, Capacitor has always had support for a large number of Cordova plugins by design. We want to continue to enable developers to discover and use those Cordova plugins in their Cordova and Capacitor apps. This effort aims to make discovering quality plugins even easier.
In practice, this change should be pretty minimal. The main difference is the ionic-native repository on GitHub will no longer exist, but all the code will be accessible at danielsogl/awesome-cordova-plugins. The project will continue to be maintained by Daniel, so there should be little to no disruption in the project itself, as he was already the core maintainer.
Additionally, before sending this project to Daniel, we audited and removed a number of outdated and unmaintained plugins, and will be sharing with Daniel some tooling we developed to help automatically verify and enforce plugin quality through testing and repo status management (commits, repos being archived, etc).
We want to sincerely thank Daniel for the many years of maintenance of the ionic-native project and for taking over the project fully.
We also want to thank the many community members and past maintainers that contributed plugins to the ionic-native project over the years.
With this change we are looking forward to simplifying and clarifying the native story for Ionic developers, so stay tuned for our upcoming documentation updates which should make this easier than ever before!