Technical Differences Between Electron and NW.js (formerly node-webkit)
Note: Electron was previously named Atom Shell.
But there are also fundamental differences between the two projects that make Electron a completely separate product from NW.js:
1. Entry of Application
In NW.js the main entry point of an application is a web page or a JS script. You specify a
html or js file in the
package.json and it is opened in a browser window as
the application's main window (in case of an html entrypoint) or the script is executed.
Electron works more like the Node.js runtime. Electron's APIs are lower level so you can use it for browser testing in place of PhantomJS.
2. Build System
In order to avoid the complexity of building all of Chromium, Electron uses
libchromiumcontent to access
Chromium's Content API.
libchromiumcontent is a single shared library that
includes the Chromium Content module and all of its dependencies. Users don't
need a powerful machine to build Electron.
3. Node Integration
In NW.js, the Node integration in web pages requires patching Chromium to
work, while in Electron we chose a different way to integrate the libuv loop
with each platform's message loop to avoid hacking Chromium. See the
node_bindings code for how that was done.
If you are an experienced NW.js user, you should be familiar with the concept of Node context and web context. These concepts were invented because of how NW.js was implemented.
Note: NW.js has optionally supported multi-context since 0.13.