PageSourceSearch

https://www.electronjs.org/assets/js/c2ec5424.7001f65b.js

js electronjs.org collected 2026-10-01 07:20:19 UTC 17,037 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunkelectronjs=self.webpackChunkelectronjs||[]).push([["23330"],{85901(e,n,l){l.r(n),l.d(n,{assets:()=>i,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>t,toc:()=>h});var t=l(71678),r=l(74848),c=l(28453);let o={title:"Electron 3.0.0",date:new Date("2018-09-18T00:00:00.000Z"),authors:"codebytere",slug:"electron-3-0",tags:["release"]},s,i={authorsImageUrls:[void 0]},h=[{value:"Release Process",id:"release-process",level:2},{value:"Changes / New Features",id:"changes--new-features",level:2},{value:"Breaking API changes",id:"breaking-api-changes",level:2},{value:"macOS",id:"macos",level:3},{value:"Windows",id:"windows",level:3},{value:"Bug Fixes",id:"bug-fixes",level:2},{value:"MacOS",id:"macos-1",level:3},{value:"Linux",id:"linux",level:3},{value:"Other Notes",id:"other-notes",level:2}];function a(e){let n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",hr:"hr",li:"li",p:"p",strong:"strong",ul:"ul",...(0,c.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(n.p,{children:["The Electron team is excited to announce that the first stable release of Electron 3 is now\navailable from ",(0,r.jsx)(n.a,{href:"https://electronjs.org/",children:"electronjs.org"})," and via ",(0,r.jsx)(n.code,{children:"npm install electron@latest"}),"! It's jam-packed with upgrades, fixes, and new features, and we can't wait to see what you build with them. Below are details about this release, and we welcome your feedback as you explore."]}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h2,{id:"release-process",children:"Release Process"}),"\n",(0,r.jsxs)(n.p,{children:["As we undertook development of ",(0,r.jsx)(n.code,{children:"v3.0.0"}),", we sought to more empirically define criteria for a stable release by formalizing the feedback progress for progressive beta releases. ",(0,r.jsx)(n.code,{children:"v3.0.0"})," would not have been possible without our ",(0,r.jsx)(n.a,{href:"https://github.com/electron/electron/blob/3-0-x/docs/tutorial/app-feedback-program.md",children:"App Feedback Program"})," partners, who provided early testing and feedback during the beta cycle. Thanks to Atlassian, Atom, Microsoft Teams, Oculus, OpenFin, Slack, Symphony, VS Code, and other program members for their work. If you'd like to participate in future betas, please mail us at ",(0,r.jsx)(n.a,{href:"mailto:[email protected]",children:"[email protected]"}),"."]}),"\n",(0,r.jsx)(n.h2,{id:"changes--new-features",children:"Changes / New Features"}),"\n",(0,r.jsxs)(n.p,{children:["Major bumps to several important parts of Electron's toolchain, including Chrome ",(0,r.jsx)(n.code,{children:"v66.0.3359.181"}),", Node ",(0,r.jsx)(n.code,{children:"v10.2.0"}),", and V8 ",(0,r.jsx)(n.code,{children:"v6.6.346.23."})]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["[",(0,r.jsx)(n.a,{href:"https://github.com/electron/electron/pull/12656",children:"#12656"}),"] feat: ",(0,r.jsx)(n.code,{children:"app.isPackaged"})]}),"\n",(0,r.jsxs)(n.li,{children:["[",(0,r.jsx)(n.a,{href:"https://github.com/electron/electron/pull/12652",children:"#12652"}),"] feat: ",(0,r.jsx)(n.code,{children:"app.whenReady()"})]}),"\n",(0,r.jsxs)(n.li,{children:["[",(0,r.jsx)(n.a,{href:"https://github.com/electron/electron/pull/13183",children:"#13183"}),"] feat: ",(0,r.jsx)(n.code,{children:"process.getHeapStatistics()"})]}),"\n",(0,r.jsxs)(n.li,{children:["[",(0,r.jsx)(n.a,{href:"https://github.com/electron/electron/pull/12485",children:"#12485"}),"] feat: ",(0,r.jsx)(n.code,{children:"win.moveTop()"})," to move window z-order to top"]}),"\n",(0,r.jsxs)(n.li,{children:["[",(0,r.jsx)(n.a,{href:"https://github.com/electron/electron/pull/13110",children:"#13110"}),"] feat: TextField and Button APIs"]}),"\n",(0,r.jsxs)(n.li,{children:["[",(0,r.jsx)(n.a,{href:"https://github.com/electron/electron/pull/13068",children:"#13068"}),"] feat: netLog API for dynamic logging control"]}),"\n",(0,r.jsxs)(n.li,{children:["[",(0,r.jsx)(n.a,{href:"https://github.com/electron/electron/pull/13539",children:"#13539"}),"] feat: enable ",(0,r.jsx)(n.code,{children:"webview"})," in sandbox renderer"]}),"\n",(0,r.jsxs)(n.li,{children:["[",(0,r.jsx)(n.a,{href:"https://github.com/electron/electron/pull/14118",children:"#14118"}),"] feat: ",(0,r.jsx)(n.code,{children:"fs.readSync"})," now works with massive files"]}),"\n",(0,r.jsxs)(n.li,{children:["[",(0,r.jsx)(n.a,{href:"https://github.com/electron/electron/pull/14031",children:"#14031"}),"] feat: node ",(0,r.jsx)(n.code,{children:"fs"})," wrappers to make ",(0,r.jsx)(n.code,{children:"fs.realpathSync.native"})," and ",(0,r.jsx)(n.code,{children:"fs.realpath.native"})," available"]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"breaking-api-changes",children:"Breaking API changes"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["[",(0,r.jsx)(n.a,{href:"https://github.com/electron/electron/pull/12362",children:"#12362"}),"] feat: updates to menu item order control"]}),"\n",(0,r.jsxs)(n.li,{children:["[",(0,r.jsx)(n.a,{href:"https://github.com/electron/electron/pull/13050",children:"#13050"}),"] refactor: removed documented deprecated APIs","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["See ",(0,r.jsx)(n.a,{href:"https://github.com/electron/electron/blob/master/docs/api/breaking-changes.md#breaking-api-changes-30",children:"docs"})," for more details"]}
1),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["[",(0,r.jsx)(n.a,{href:"https://github.com/electron/electron/pull/12477",children:"#12477"}),"] refactor: removed ",(0,r.jsx)(n.code,{children:"did-get-response-details"})," and ",(0,r.jsx)(n.code,{children:"did-get-redirect-request"})," events"]}),"\n",(0,r.jsxs)(n.li,{children:["[",(0,r.jsx)(n.a,{href:"https://github.com/electron/electron/pull/12655",children:"#12655"}),"] feat: default to disabling navigating on drag/drop"]}),"\n",(0,r.jsxs)(n.li,{children:["[",(0,r.jsx)(n.a,{href:"https://github.com/electron/electron/pull/12993",children:"#12993"}),"] feat: Node ",(0,r.jsx)(n.code,{children:"v4.x"})," or greater is required use the ",(0,r.jsx)(n.code,{children:"electron"})," npm module"]}),"\n",(0,r.jsxs)(n.li,{children:["[",(0,r.jsx)(n.a,{href:"https://github.com/electron/electron/pull/12008",children:"#12008"})," ",(0,r.jsx)(n.a,{href:"https://github.com/electron/electron/pull/12140",children:"#12140"})," ",(0,r.jsx)(n.a,{href:"https://github.com/electron/electron/pull/12503",children:"#12503"})," ",(0,r.jsx)(n.a,{href:"https://github.com/electron/electron/pull/12514",children:"#12514"})," ",(0,r.jsx)(n.a,{href:"https://github.com/electron/electron/pull/12584",children:"#12584"})," ",(0,r.jsx)(n.a,{href:"https://github.com/electron/electron/pull/12596",children:"#12596"})," ",(0,r.jsx)(n.a,{href:"https://github.com/electron/electron/pull/12637",children:"#12637"})," ",(0,r.jsx)(n.a,{href:"https://github.com/electron/electron/pull/12660",children:"#12660"})," ",(0,r.jsx)(n.a,{href:"https://github.com/electron/electron/pull/12696",children:"#12696"})," ",(0,r.jsx)(n.a,{href:"https://github.com/electron/electron/pull/12716",children:"#12716"})," ",(0,r.jsx)(n.a,{href:"https://github.com/electron/electron/pull/12750",children:"#12750"})," ",(0,r.jsx)(n.a,{href:"https://github.com/electron/electron/pull/12787",children:"#12787"})," ",(0,r.jsx)(n.a,{href:"https://github.com/electron/electron/pull/12858",children:"#12858"}),"] refactor: ",(0,r.jsx)(n.code,{children:"NativeWindow"})]}),"\n",(0,r.jsxs)(n.li,{children:["[",(0,r.jsx)(n.a,{href:"https://github.com/electron/electron/pull/11968",children:"#11968"}),"] refactor: ",(0,r.jsx)(n.code,{children:"menu.popup()"})]}),"\n",(0,r.jsxs)(n.li,{children:["[",(0,r.jsx)(n.a,{href:"https://github.com/electron/electron/pull/8953",children:"#8953"}),"] feat: no longer use JSON to send the result of ",(0,r.jsx)(n.code,{children:"ipcRenderer.sendSync"})]}),"\n",(0,r.jsxs)(n.li,{children:["[",(0,r.jsx)(n.a,{href:"https://github.com/electron/electron/pull/13039",children:"#13039"}),"] feat: default to ignore command line arguments following a URL"]}),"\n",(0,r.jsxs)(n.li,{children:["[",(0,r.jsx)(n.a,{href:"https://github.com/electron/electron/pull/12004",children:"#12004"}),"] refactor: rename ",(0,r.jsx)(n.code,{children:"api::Window"})," to ",(0,r.jsx)(n.code,{children:"api::BrowserWindow"})]}),"\n",(0,r.jsxs)(n.li,{children:["[",(0,r.jsx)(n.a,{href:"https://github.com/electron/electron/pull/12679",children:"#12679"}),"] feat: visual zoom now turned off by default"]}),"\n",(0,r.jsxs)(n.li,{children:["[",(0,r.jsx)(n.a,{href:"https://github.com/electron/electron/pull/12408",children:"#12408"}),"] refactor: rename app-command ",(0,r.jsx)(n.code,{children:"media-play_pause"})," to ",(0,r.jsx)(n.code,{children:"media-play-pause"})]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"macos",children:"macOS"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["[",(0,r.jsx)(n.a,{href:"https://github.com/electron/electron/pull/12093",children:"#12093"}),"] feat: workspace notifications support"]}),"\n",(0,r.jsxs)(n.li,{children:["[",(0,r.jsx)(n.a,{href:"https://github.com/electron/electron/pull/12496",children:"#12496"}),"] feat: ",(0,r.jsx)(n.code,{children:"tray.setIgnoreDoubleClickEvents(ignore)"})," to ignore tray double click events."]}),"\n",(0,r.jsxs)(n.li,{children:["[",(0,r.jsx)(n.a,{href:"https://github.com/electron/electron/pull/12281",children:"#12281"}),"] feat: mouse forward functionality on macOS"]}),"\n",(0,r.jsxs)(n.li,{children:["[",(0,r.jsx)(n.a,{href:"https://github.com/electron/electron/pull/12714",children:"#12714"}),"] feat: screen lock / unlock events"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"windows",children:"Windows"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["[",(0,r.jsx)(n.a,{href:"https://github.com/electron/electron/pull/12879",children:"#12879"}),"] feat: added DIP to/from screen coordinate conversions"]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Nota Bene:"})," Switching to an older version of Electron after running this version will require you to clear out your user data directory to avoid older versions crashing. You can get the user data directory by running ",(0,r.jsx)(n.code,{children:'console.log(app.getPath("userData"))'})," or see ",(0,r.jsx)(n.a,{href:"https://electronjs.org/docs/latest/api/app#appgetpathname",children:"docs"})," for more details."]}),"\n",(0,r.jsx)(n.h2,{id:"bug-fixes",children:"Bug Fixes"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["[",(0,r.jsx)(n.a,{href:"https://github.com/electron/electron/pull/13397",children:"#13397"}),"] fix: issue with ",(0,r.jsx)(n.code,{children:"fs.statSyncNoException"})," throwing exceptions"]}),"\n",(0,r.jsxs)(n.li,{children:["[",(0,r.jsx)(n.a,{href:"https://github.com/electron/electron/pull/13476",children:"#13476"}),", ",(0,r.jsx)(n.a,{href:"https://github.com/electron/electron/pull/13452",children:"#13452"}),"] fix: crash when loading site with jquery"]}),"\n",(0,r.jsxs)(n.li,{children:["[",(0,r.jsx)(n.a,{href:"https://github.com/electron/electron/pull/14092",children:"#14092"}),"] fix: crash in ",(0,r.jsx)(n.code,{children:"net::ClientSocketHandle"})," destructor"]}),"\n",(0,r.jsxs)(n.li,{children:["[",(0,r.jsx)(n.a,{href:"https://github.com/electron/electron/pull/14453",children:"#14453"}),"] fix: notify focus change right away rather not on next tick"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"macos-1",children:"MacOS"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["[",(0,r.jsx)(n.a,{href:"https://github.com/electron/electron/pull/13220",children:"#13220"}),"] fix: issue allowing bundles to be selected in ",(0,r.jsx)(n.code,{children:'<input file="type">'})," open file dialog"]}),"\n",(0,r.jsxs)(n.li,{children:["[",(0,r.jsx)(n.a,{href:"https://github.com/electron/electron/pull/12404",children:"#12404"}),"] fix: issue blocking main process when using async dialog"]}),"\n",(0,r.jsxs)(n.li,{children:["[",(0,r.jsx)(n.a,{href:"https://github.com/electron/electron/pull/12043",children:"#12043"}),"] fix: context menu click callback"]}),"\n",(0,r.jsxs)(n.li,{children:["[",(0,r.jsx)(n.a,{href:"https://github.com/electron/electron/pull/12527",children:"#12527"}),"] fix: event leak on reuse of touchbar item"]}),"\n",(0,r.jsxs)(n.li,{children:["[",(0,r.jsx)(n.a,{href:"https://github.com/electron/electron/pull/12352",children:"#12352"}),"] fix: tray title crash"]}),"\n",(0,r.jsxs)(n.li,{children:["[",(0,r.jsx)(n.a,{href:"https://github.com/electron/electron/pull/12327",children:"#12327"}),"] fix: non-draggable regions"]}),"\n",(0,r.jsxs)(n.li,{children:["[",(0,r.jsx)(n.a,{href:"https://github.com/electron/electron/pull/12809",children:"#12809"}),"] fix: to prevent menu update while it's open"]}),"\n",(0,r.jsxs)(n.li,{children:["[",(0,r.jsx)(n.a,{href:"https://github.com/electron/electron/pull/13162",children:"#13162"}),"] fix: tray icon bounds not allowing negative values"]}),"\n",(0,r.jsxs)(n.li,{children:["[",(0,r.jsx)(n.a,{href:"https://github.com/electron/electron/pull/13085",children:"#13085"}),"] fix: tray title not inverting when highlighted"]}),"\n",(0,r.jsxs)(n.li,{children:["[",(0,r.jsx)(n.a,{href:"https://github.com/electron/electron/pull/12196",children:"#12196"}),"] fix: Mac build when ",(0,r.jsx)(n.code,{children:"enable_run_as_
1node==false"})]}),"\n",(0,r.jsxs)(n.li,{children:["[",(0,r.jsx)(n.a,{href:"https://github.com/electron/electron/pull/12157",children:"#12157"}),"] fix: additional issues on frameless windows with vibrancy"]}),"\n",(0,r.jsxs)(n.li,{children:["[",(0,r.jsx)(n.a,{href:"https://github.com/electron/electron/pull/13326",children:"#13326"}),"] fix: to set mac protocol to none after calling ",(0,r.jsx)(n.code,{children:"app.removeAsDefaultProtocolClient"})]}),"\n",(0,r.jsxs)(n.li,{children:["[",(0,r.jsx)(n.a,{href:"https://github.com/electron/electron/pull/13530",children:"#13530"}),"] fix: incorrect usage of private APIs in MAS build"]}),"\n",(0,r.jsxs)(n.li,{children:["[",(0,r.jsx)(n.a,{href:"https://github.com/electron/electron/pull/13517",children:"#13517"}),"] fix: ",(0,r.jsx)(n.code,{children:"tray.setContextMenu"})," crash"]}),"\n",(0,r.jsxs)(n.li,{children:["[",(0,r.jsx)(n.a,{href:"https://github.com/electron/electron/pull/14205",children:"#14205"}),"] fix: pressing escape on a dialog now closes it even if ",(0,r.jsx)(n.code,{children:"defaultId"})," is set"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"linux",children:"Linux"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["[",(0,r.jsx)(n.a,{href:"https://github.com/electron/electron/pull/12507",children:"#12507"}),"] fix: ",(0,r.jsx)(n.code,{children:"BrowserWindow.focus()"})," for offscreen windows"]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"other-notes",children:"Other Notes"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"PDF Viewer is currently not working but is being worked on and will be functional once again soon"}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"TextField"})," and ",(0,r.jsx)(n.code,{children:"Button"})," APIs are experimental and are therefore off by default","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["They can be enabled with the ",(0,r.jsx)(n.code,{children:"enable_view_api"})," build flag"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h1,{id:"whats-next",children:"What's Next"}),"\n",(0,r.jsx)(n.p,{children:"The Electron team continues to work on defining our processes for more rapid and smooth upgrades as we seek to ultimately maintain parity with the development cadences of Chromium, Node, and V8."})]})}function d(e={}){let{wrapper:n}={...(0,c.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(a,{...e})}):a(e)}},28453(e,n,l){l.d(n,{R:()=>o,x:()=>s});var t=l(96540);let r={},c=t.createContext(r);function o(e){let n=t.useContext(c);return t.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),t.createElement(c.Provider,{value:n},e.children)}},71678(e){e.exports=JSON.parse('{"permalink":"/blog/electron-3-0","source":"@site/blog/electron-3-0.md","title":"Electron 3.0.0","description":"The Electron team is excited to announce that the first stable release of Electron 3 is now","date":"2018-09-18T00:00:00.000Z","tags":[{"inline":false,"label":"Release","permalink":"/blog/tags/release","description":"Blog posts about new Electron releases"}],"readingTime":5.39,"hasTruncateMarker":false,"authors":[{"name":"codebytere","url":"https://github.com/codebytere","imageURL":"https://github.com/codebytere.png?size=96","key":"codebytere","page":null}],"frontMatter":{"title":"Electron 3.0.0","date":"2018-09-18T00:00:00.000Z","authors":"codebytere","slug":"electron-3-0","tags":["release"]},"unlisted":false,"prevItem":{"title":"Electron App Feedback Program","permalink":"/blog/app-feedback-program"},"nextItem":{"title":"Using GN to Build Electron","permalink":"/blog/gn"}}')}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.