The design dates from 2008, when each platform needed its own bridge hack, and some choices now cost you:
Native projects are build output. platforms/ is regenerated, so every native change must go through config.xml, a plugin or a hook.
A stringly typed bridge. Services, actions and JSON arguments fail only at run time, exec() takes callbacks, plugins publish APIs as window globals, and every ArrayBuffer argument is sent as Base64.
deviceready waits for everyone. The device plugin holds the event until its getDeviceInfo round trip returns, so each plugin you add can lengthen startup.
An aging plugin shelf. cordova-plugin-vibration (3.1.1) and cordova-plugin-battery-status (2.0.3) were last published in July 2019, and cordova-plugin-whitelist is deprecated.
| Concern | Cordova | Capacitor 243,123 (Capacitor) |
|---|---|---|
| Native project | Regenerated in platforms/ | Committed, edited in the IDE |
| Plugin API | exec() callbacks, window globals | Promises, imported modules |
| Existing Cordova plugins | Native | Most run unchanged |
None of this stops Cordova from shipping a solid content app, and BookNest will ship. Cordova Versus Capacitor weighs the trade against Capacitor.