<!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="We are happy to announce that we have just released Cordova Electron 4.0.0! This is one of Cordova&#39;s supported platforms for building Electron applicatio...">

    <title>
        
            
                Cordova Electron 4.0.0 Released! - Apache Cordova
            
        
    </title>

    <link rel="SHORTCUT ICON" href="/favicon.ico"/>

    

    
    

    <link rel="canonical" href="https://cordova.apache.org/announcements/2024/03/11/cordova-electron-release-4.0.0.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 Electron 4.0.0 Released!</div>
        <div class="author">By:
            
              Bryan Ellis
            
        </div>
        <div class="date">11 Mar 2024</div>
    </header>
    <section>
        <div>
            <p>We are happy to announce that we have just released <code>Cordova Electron 4.0.0</code>! This is one of Cordova&#39;s supported platforms for building Electron applications.</p>

<ul>
  <li><a href="https://www.npmjs.com/package/cordova-electron">cordova-electron@4.0.0</a></li>
</ul>

<p><strong>To upgrade:</strong></p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>cordova platform remove electron
cordova platform add electron@4.0.0
</code></pre></div></div>

<p><strong>To install:</strong></p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>cordova platform add electron@4.0.0
</code></pre></div></div>

<h2>Release Highlights</h2>

<p>Some of the notable breaking changes in this release are:</p>

<p><strong>Node.js Requirement:</strong></p>

<p>This release requires the environment to have <strong>Node.js</strong> <code>18.0.0</code> or higher. It is recommended to use the current LTS, which is <code>20.11.1</code> at the time of this release.</p>

<p><strong>Electron Update:</strong></p>

<p>The <strong>Electron</strong> core dependencies have been updated to <code>29.0.0</code>. This version of Electron comes with the following app stack:</p>

<ul>
  <li>Chromium 122.0.6261.39</li>
  <li>Node v20.9.0</li>
  <li>V8 12.2</li>
</ul>

<p>More information about Electron 29.0.0 can be read on their <a href="https://www.electronjs.org/blog/electron-29-0">blog post here</a>.</p>

<p><strong>Removed Plugin Argument&#39;s Accidental Multidimensional Array Wrapping:</strong></p>

<p>In Cordova-Electron 3.0.0, plugin support was introduced, but an unintentional multidimensional array wrapping of the plugin arguments occurred. This wrapping may not have been noticeable to app developers, but it affected plugin developers.</p>

<p>Typically, a plugin includes a set of APIs that may accept arguments, and these arguments are forwarded to the native side of the plugin. Due to improper argument spreading, plugin developers had to consistently access index 0 at the first level to retrieve the actual arguments, as in <code>args[0][0]</code>. There was never an <code>args[n+1]</code> scenario.</p>

<p>This release corrected this issue. Plugin developers will need to update their plugins if the plugins are designed to read passed-in arguments.</p>

<p>For a quick start guide and in-depth configuration setup, please check out our <a href="https://cordova.apache.org/docs/en/12.x/guide/platforms/electron/index.html">Cordova Electron Documentation</a>!</p>

<p>Please report any issues you find at <a href="http://issues.cordova.io/">issues.cordova.io</a>!</p>

<!--more-->
<h1>Changes include:</h1>

<h4>Breaking</h4>

<ul>
  <li><a href="https://github.com/apache/cordova-electron/pull/263">GH-263</a> feat!: bump <code>electron@^29.0.0</code> w/ supporting changes</li>
  <li><a href="https://github.com/apache/cordova-electron/pull/266">GH-266</a> fix!: remove extra array wrapper from passed arguments</li>
  <li><a href="https://github.com/apache/cordova-electron/pull/264">GH-264</a> npm(dep)!: bump <code>electron-builder@^24.12.0</code>, bump node engine requirement &amp; CI
    <ul>
      <li>Updates Node Engine Requirement <code>&gt;= 18.0.0</code></li>
    </ul>
  </li>
  <li><a href="https://github.com/apache/cordova-electron/pull/271">GH-271</a> dep!: bump <code>fs-extra@^11.2.0</code></li>
  <li><a href="https://github.com/apache/cordova-electron/pull/265">GH-265</a> npm(dep)!: bump other dependencies</li>
</ul>

<h4>Others</h4>

<ul>
  <li><a href="https://github.com/apache/cordova-electron/pull/232">GH-232</a> dep(npm): bump dev dependencies</li>
  <li><a href="https://github.com/apache/cordova-electron/pull/270">GH-270</a> chore: rebuilt <code>package-lock.json</code></li>
</ul>

<h4>CI:**</h4>

<ul>
  <li><a href="https://github.com/apache/cordova-electron/pull/268">GH-268</a> ci: downgrade codecov action dependency to v3</li>
  <li><a href="https://github.com/apache/cordova-electron/pull/267">GH-267</a> ci: add node 20.x &amp; use latest action dependencies</li>
  <li><a href="https://github.com/apache/cordova-electron/pull/236">GH-236</a> ci: update github action workflow</li>
</ul>

        </div>
    </section>
    <footer>
        <div class="row">
            <div class="col-sm-6">
                
                    <a href="/announcements/2024/01/12/survey-results.html">Previous</a>
                    <br>
                    <br>
                    <a class="title" href="/announcements/2024/01/12/survey-results.html">Cordova Survey 2023 Results</a>
                    <div class="date"> 12 Jan 2024 - By Niklas Merz </div>
                    <p class="content">
                        Thank you very much for taking part in our user &amp; contributor...
                    </p>
                
            </div>
            <div class="col-sm-6">
                
                    <a href="/announcements/2024/04/03/cordova-ios-7.1.0.html">Next</a>
                    <br>
                    <br>
                    <a class="title" href="/announcements/2024/04/03/cordova-ios-7.1.0.html">Cordova iOS 7.1.0 Released!</a>
                    <div class="date"> 03 Apr 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 iOS...
                    </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>
