blob: 8574cc60cbb6907ab1f3773e65859b6427f212f5 [file] [log] [blame]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="format-detection" content="telephone=no">
<meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width" />
<meta name="description" content="Thank you very much for taking part in our user &amp; contributor survey. We received 228 submissions. Let&#39;s dive straight into the data.This survey got ...">
<title>
Cordova Survey 2023 Results - Apache Cordova
</title>
<link rel="SHORTCUT ICON" href="/favicon.ico"/>
<link rel="canonical" href="https://cordova.apache.org/announcements/2024/01/12/survey-results.html">
<!-- CSS -->
<link rel="stylesheet" type="text/css" href="/static/css/main.css">
<link rel="stylesheet" type="text/css" href="/static/css/lib/syntax.css">
<!-- Fonts -->
<!-- For attribution information, see www/attributions.html -->
<link href='https://fonts.googleapis.com/css?family=Raleway:700,400,300,700italic,400italic,300italic' rel='stylesheet' type='text/css'>
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
<script type="text/javascript">
var disqus_developer = 1; // this would set it to developer mode
</script>
<!-- JS -->
<script defer type="text/javascript" src="/static/js/lib/jquery-2.1.1.min.js"></script>
<script defer type="text/javascript" src="/static/js/lib/bootstrap.min.js"></script>
<!-- Matomo -->
<script>
var _paq = window._paq = window._paq || [];
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
var u="https://analytics.apache.org/";
_paq.push(['setTrackerUrl', u+'matomo.php']);
_paq.push(['setSiteId', '16']);
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
})();
</script>
<!-- End Matomo Code -->
</head>
<body>
<header>
<a class="scroll-point pt-top" name="top"></a>
<nav class="navbar navbar-inverse navbar-fixed-top">
<div class="container-fluid">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="/"><img id="logo_top" src="/static/img/cordova-logo-newbrand.svg"/></a>
</div>
<div id="navbar" class="navbar-collapse collapse">
<div class="nav_bar_center">
<ul class="nav navbar-nav">
<li >
<a href="/docs/en/latest/">Documentation</a>
</li>
<li >
<a href="/plugins">Plugins</a>
</li>
<li class="active">
<a href="/blog" id="blog_button">Blog<span class="badge" id="new_blog_count"></span></a>
</li>
<li >
<a href="/contribute">Contribute</a>
</li>
<li >
<a href="/contribute/team.html">Team</a>
</li>
<li>
<a href="/#getstarted">Get Started</a>
</li>
<li>
<form class="navbar-form navbar-right" id="header-search-form" role="search">
<div class="input-group">
</div>
</form>
</li>
</ul>
</div>
</div><!--/.navbar-collapse -->
</div>
</nav>
<div id="_fixed_navbar_spacer" style="padding-top:50px"></div>
</header>
<div class="page container">
<div class="blog">
<h1 class="blogHeader">
Blog
<span class="rss">
<img src="/static/img/subscribe.png"><a href="/feed.xml">RSS Feed</a>
</span>
</h1>
<div class="post">
<header>
<div class="title">Cordova Survey 2023 Results</div>
<div class="author">By:
<a href="https://twitter.com/niklasmaerz">Niklas Merz</a>
</div>
<div class="date">12 Jan 2024</div>
</header>
<section>
<div>
<p>Thank you very much for taking part in our user &amp; contributor survey. We received 228 submissions. Let&#39;s dive straight into the data.</p>
<p>This survey got over 200 responses and considering only a fraction of people who actually see the survey will respond, there are probably quite a lot of happy Cordova users and new and long-running app projects out there. We got some good feedback of the most requested improvements and biggest pain points.</p>
<!--more-->
<h2>Usage</h2>
<p>Obviously almost all respondents work with Cordova and the most used platforms are <strong>Android (97.4%), iOS (89%)</strong>, Browser (21.1%) and Electron (7%). Windows and macOS Catalyst got only a handful of responses in total.</p>
<p><img src="/static/img/blog/2024/survey/image7.png" style="width: 100%;" alt="Chart platforms" /></p>
<blockquote>
<p>Build apps with access to native features not yet present in the web platform</p>
</blockquote>
<p>The top 3 reasons for picking Cordova are <strong>ease of use, cross-platform support and the prevalence and familiarity of web skills and technologies</strong>. These reasons all were mentioned almost equally. Quite a few (~20) users mentioned that Cordova was chosen a while ago, or they migrated from Phonegap (~7). There are probably quite a few long-running Cordova projects out there. Other mentioned reasons are the support of native features, Ionic, fast development, maturity of the project and open source.</p>
<blockquote>
<p>It is easy to write, inspect and debug like a webpage</p>
</blockquote>
<h2>Alternatives</h2>
<p>Cordova&#39;s unofficial goal has always been to cease to exist once the Web catches up with supporting new APIs and features similar to native. Therefore, it&#39;s good news that a small number of users (6.1%) migrated their apps to <strong>PWAs</strong>. About 13% migrated to <strong>Capacitor</strong> and 3% to Flutter and React-Native each. About 2% of projects moved to Electron or fully native. Around 4% are thinking about or are in the process of migrating.</p>
<p><img src="/static/img/blog/2024/survey/image2.png" style="width: 100%;" alt="Chart migrating" /></p>
<p><strong>Only 23.2% of respondents have migrated apps to alternative solutions.</strong></p>
<p>The biggest reason to migrate is <strong>not well maintained plugins</strong> followed by <strong>operating system and app store compatibility issues</strong> and <strong>slow development of the framework itself</strong>. This is something we as the Cordova community needs to address. Some users also mentioned the fear of long term support. Others had build or Gradle issues or preferred more modern frameworks with Typescript support and a better developer experience. WebView and performance issues also got mentioned a handful of times.</p>
<h2>Contributing</h2>
<p>Only a minority of respondents (21.1%) have contributed to Apache maintained plugins, platforms, or tooling and 17.5% would love to start contributing.</p>
<p>The answers to the question &quot;What&#39;s holding you back from contributing?&quot; are probably pretty typical for open source projects. The biggest factors are time (53%) and work-life-balance (37%). The second most mentioned reasons <strong>I need help getting started</strong> (21%) and <strong>Imposter Syndrome</strong> (10%) we should address with better documentation and support for first contributors.</p>
<p><img src="/static/img/blog/2024/survey/image1.png" style="width: 100%;" alt="Chart contributing" /></p>
<p>For those who are interested in contributing to Apache Cordova, the best way is to submit PR. It could be to fix a known issue that you might have or others have reported, or submitting new features. In terms of Work-Life balance, Apache Cordova is based on volunteering. There is no requirement in dedicating time every day. Usually some might work on Cordova for a few minutes when they can spare.</p>
<p>Some users develop for the Web only and don&#39;t want to get into the native part which is totally fair because that&#39;s the point of using Cordova. Developing plugins and getting into Cordova internals is not as hard and scary as it might look at first, and we really need your support for the project.</p>
<p>We also included a question about <strong>release voting</strong> because we think that most users don&#39;t know how the release process at Apache works. For every release we need at least 3 members of the PMC to check and cast a positive vote on the release. Persons who are not part of the PMC can vote as well and help test the release. The voting and decision process for releases happens on the mailing list. Sometimes it can take a while to finally publish a release because 3 PMC members need to find time to check it. If we can onboard new members, releases might happen a little faster again.</p>
<p><img src="/static/img/blog/2024/survey/image4.png" style="width: 100%;" alt="Chart voting" /></p>
<h2>Areas of improvement</h2>
<p>One of the main reasons to run this survey was to identify the pain points for many Cordova developers. If we can identify the areas that need improvements we can gather ideas for quick fixes and long term goals.</p>
<p>The most mentioned issues is the <strong>lack of maintenance for third party plugins</strong>. More on that in the next paragraph. The second-biggest pain point is keeping up with App/Play store requirements and OS API changes combined with <strong>slow releases and breaking updates</strong>.</p>
<p>Many users also mentioned issues with <strong>native projects</strong>. They tend to break with updates or require manual changes that cause headaches with Cordovas hooks and ephemeral native projects.</p>
<p>Quite a lot of pain points also involve around <strong>documentation</strong>. We should work on better documentation for config.xml and how to develop plugins. Some users also would like (video) tutorials. Sometimes information about new features or changes are hidden somewhere in PRs, issues and comments. We should do a better job updating the documentation.</p>
<p>Some users also fear the longevity of the project and think that new APIs and changes take too long to be supported. The project is quite old, and some code is considered legacy code today and some users would like to see support for new languages like Typescript, Swift, Kotlin.</p>
<h2>Plugins</h2>
<blockquote>
<p>I’m so grateful for the plugins! I understand how hard they can be to maintain.</p>
</blockquote>
<p>Most respondents didn&#39;t share any feedback for plugins and quite a few mentioned they were pleased with Cordova&#39;s plugin ecosystem.</p>
<p>Because of its maturity and age there are many Cordova plugins for almost any use case, but the lack of maintenance is concerning for a lot of users. Quite a few plugin authors moved on and longer maintain their plugin and users have a hard time finding working forks and fixes. Some respondents suggested that a list of curated plugins could help with that.</p>
<p>Some users also find developing and testing plugins very hard.</p>
<h3>Some user voices</h3>
<blockquote>
<p>Building cordova plugins is not ideal because the plugins are authored outside of any native project which makes it hard to develop and test. Not having the native project available means the plugin cannot be built independently of a cordova project, cannot be tested independently of a cordova project, and cannot make use of the standard IDE with intellisense without a cordova project.</p>
</blockquote>
<blockquote>
<p>There are many Cordova plugins that are currently not maintained, which makes adding a new plugin to a project really painful, as you always have to check if the plugin is still functional and if there are alternative plugins.</p>
</blockquote>
<blockquote>
<p>Overall, very good, considering they&#39;re mostly by volunteers. But my impression has been that some plugins that have no alternative aren&#39;t always well-maintained (no specific examples, sorry).</p>
</blockquote>
<blockquote>
<p>Sometimes poorly maintained, slow to implement fixes, outdated, etc. But yet still critical for any real Cordova project</p>
</blockquote>
<blockquote>
<p>I always end up forking them due to them no being updated with each Cordova release</p>
</blockquote>
<blockquote>
<p>Cordova makes it simple to build plugins.</p>
</blockquote>
<h2>Closing words</h2>
<p>As you might know, most of the maintainers are volunteers and work on Cordova in their free time. Therefore, we need your help ensuring that Cordova remains a robust and reliable platform for building mobile apps. Your involvement, whether it&#39;s providing feedback, fixing bugs, or developing plugins, is essential to ensuring Cordova&#39;s continued relevance and adoption. The Cordova PMC will do its best to make contributing as easy as possible and provide developer guidance, code reviews, documentation, and frequent releases. A large portion of bug fixes, plugins and features have been provided by dedicated individuals for many years now and will be in the future. You can contribute to Cordova&#39;s future success with your fixes, solutions, plugins and collaboration on releases.</p>
<p>Thank you for being a part of the Cordova community. Together, we can shape the future of mobile development.</p>
</div>
</section>
<footer>
<div class="row">
<div class="col-sm-6">
<a href="/announcements/2023/11/24/survey.html">Previous</a>
<br>
<br>
<a class="title" href="/announcements/2023/11/24/survey.html">Announcing the Cordova User & Contributor Survey!</a>
<div class="date"> 24 Nov 2023 - By Niklas Merz </div>
<p class="content">
The Apache Cordova projects wants to understand the users and contributors better....
</p>
</div>
<div class="col-sm-6">
<a href="/announcements/2024/03/11/cordova-electron-release-4.0.0.html">Next</a>
<br>
<br>
<a class="title" href="/announcements/2024/03/11/cordova-electron-release-4.0.0.html">Cordova Electron 4.0.0 Released!</a>
<div class="date"> 11 Mar 2024 - By Bryan Ellis </div>
<p class="content">
<!--
NOTE:
the markdownify filter is used here
because posts are rendered in sequence;
that is, the next post's content isn't
yet rendered at the time that this post
is being rendered, so page.next.excerpt
is still in Markdown and not HTML
Reference: https://github.com/jekyll/jekyll/issues/2860
-->
We are happy to announce that we have just released Cordova Electron...
</p>
</div>
</div>
</footer>
<div class="disqus">
<div id="disqus_thread"></div>
<script type="text/javascript">
/* * * CONFIGURATION VARIABLES * * */
var disqus_shortname = 'cordovablogs';
/* * * DON'T EDIT BELOW THIS LINE * * */
(function() {
var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
})();
</script>
<noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript" rel="nofollow">comments powered by Disqus.</a></noscript>
</div>
</div>
</div>
</div>
<div class="blue-divider"></div>
<footer>
<div class="container">
<div class="row">
<div class="col-sm-9">
<h1>More Resources</h1>
<div class="row">
<div class="col-sm-4">
<h2>General</h2>
<ul class="nav">
<li>
<a target="_blank" href="https://projects.apache.org/project.html?cordova">Apache Project Page</a>
</li>
<li>
<a href="https://www.apache.org/dyn/closer.cgi/cordova">Source Distribution</a>
</li>
<li>
<a target="_blank" href="https://www.apache.org/licenses">License</a>
</li>
<li>
<a href="/artwork">Artwork</a>
</li>
</ul>
</div>
<div class="col-sm-4">
<h2>Development</h2>
<ul class="nav">
<li><a target="_blank" href="https://github.com/apache?utf8=%E2%9C%93&amp;q=cordova-">Source Code</a></li>
<li><a target="_blank" href="https://github.com/apache/cordova#filing-a-bug">Issue Tracker</a></li>
<li><a target="_blank" href="https://stackoverflow.com/questions/tagged/cordova">Stack Overflow</a></li>
<li><a href="/contact">Mailing List</a></li>
<li><a href="/contribute/nightly_builds.html">Nightly builds</a></li>
</ul>
</div>
<div class="col-sm-4">
<h2>Apache Software Foundation</h2>
<ul class="nav">
<li>
<a target="_blank" href="https://www.apache.org/">About ASF</a>
</li>
<li>
<a target="_blank" href="https://www.apache.org/events/current-event">Events</a>
</li>
<li>
<a target="_blank" href="https://www.apache.org/foundation/sponsorship.html">Become a Sponsor</a>
</li>
<li>
<a target="_blank" href="https://www.apache.org/foundation/thanks.html">Thanks</a>
</li>
<li>
<a target="_blank" href="https://www.apache.org/security/">Security</a>
</li>
<li>
<a target="_blank" href="https://privacy.apache.org/policies/privacy-policy-public.html">Privacy policy</a>
</li>
</ul>
</div>
</div>
</div>
<div class="col-sm-3">
<h1>Contribute</h1>
<p style="padding-top:20px"><strong>Help Cordova move forward!</strong></p>
<p>Report bugs, improve the docs, or contribute to the code.</p>
<a href="/contribute" class="btn btn-lg btn-primary">
Learn More
</a>
<p style="padding-top:20px"> <a href="https://twitter.com/apachecordova" class="twitter-follow-button" data-show-count="false">Follow @apachecordova</a></p>
</div>
</div>
<p class="copyright_text">
Copyright &copy; 2024 <a href="https://apache.org">The Apache Software Foundation</a>, Licensed under the <a target="_blank" href="https://www.apache.org/licenses/">Apache License, Version 2.0</a>.<br/>
Apache and the Apache feather logos are <a target="_blank" href="https://www.apache.org/foundation/marks/list/">trademarks</a> of The Apache Software Foundation.
<br/>
<p>See the <a href="/attributions/">attributions page</a> for other copyright & trademark notices.</p>
</p>
</div>
</footer>
<script defer type="text/javascript" src="/static/js/index.js"></script>
<script defer type="text/javascript" src="/static/js/twitter.js"></script>
</body>
</html>