Want to take your software engineering career to the next level? Join the mailing list for career tips & advice Click here


Call all Node.js modules directly from DOM/WebWorker and enable a new way of writing applications with all Web technologies.

Star full 4f7b624809470f25b6493d5a7b30d9b9cb905931146e785d67c86ef0c205a402Star full 4f7b624809470f25b6493d5a7b30d9b9cb905931146e785d67c86ef0c205a402Star full 4f7b624809470f25b6493d5a7b30d9b9cb905931146e785d67c86ef0c205a402Star full 4f7b624809470f25b6493d5a7b30d9b9cb905931146e785d67c86ef0c205a402Star full 4f7b624809470f25b6493d5a7b30d9b9cb905931146e785d67c86ef0c205a402 (1 ratings)
Rated 5.0 out of 5
Subscribe to updates I use nw.js

Statistics on nw.js

Number of watchers on Github 37038
Number of open issues 753
Average time to close an issue 4 days
Main language C++
Average time to merge a PR 8 days
Open pull requests 98+
Closed pull requests 71+
Last commit 17 days ago
Repo Created over 8 years ago
Repo Last Updated 16 days ago
Size 123 MB
Homepage https://nwjs.io
Organization / Authornwjs
Page Updated
Do you use nw.js? Leave a review!
View open issues (753)
View nw.js activity
View on github
Fresh, new opensource launches 🚀🚀🚀
Software engineers: It's time to get promoted. Starting NOW! Subscribe to my mailing list and I will equip you with tools, tips and actionable advice to grow in your career.
Evaluating nw.js for your project? Score Explanation
Commits Score (?)
Issues & PR Score (?)
What people are saying about nw.js Leave a review
It is simple way to create cross-platform desktop app with NodeJS backend! :)

node-webkit is renamed NW.js

Official site: https://nwjs.io


NW.js is an app runtime based on Chromium and node.js. You can write native apps in HTML and JavaScript with NW.js. It also lets you call Node.js modules directly from the DOM and enables a new way of writing native applications with all Web technologies.

It was created in the Intel Open Source Technology Center.

Building a Cross-platform Desktop App with NW.js
Creating Desktop Applications With node-webkit
WebApp to DesktopApp with node-webkit (slides)
Essay on the history and internals of the project


  • Apps written in modern HTML5, CSS3, JS and WebGL.
  • Complete support for Node.js APIs and all its third party modules.
  • Good performance: Node and WebKit run in the same thread: Function calls are made straightforward; objects are in the same heap and can just reference each other.
  • Easy to package and distribute apps.
  • Available on Linux, Mac OS X and Windows.


  • v0.47.0: (July 15, 2020, based off of Node.js v14.5.0, Chromium 84.0.4147.89) : release notes
    NOTE You might want the SDK build. Please read the release notes.

  • latest nightly build from git tip: https://dl.nwjs.io/live-build/

  • Previous versions; See the mapping file for the version info in previous releases.

Demos and real apps

You may also be interested in our demos repository and the List of apps and companies using nw.js.

Quick Start

Create index.html:

<!DOCTYPE html>
    <title>Hello World!</title>
    <h1>Hello World!</h1>
    We are using node.js <script>document.write(process.version)</script>.

Create package.json:

  "name": "nw-demo",
  "version": "0.0.1",
  "main": "index.html"


$ /path/to/nw .  (suppose the current directory contains 'package.json')

Note: on Windows, you can drag the folder containing package.json to nw.exe to open it.

Note: on OSX, the executable binary is in a hidden directory within the .app file. To run node-webkit on OSX, type:
/path/to/nwjs.app/Contents/MacOS/nwjs . (suppose the current directory contains 'package.json')


Official documentation: http://docs.nwjs.io/

For more information on how to write/package/run apps, see:

And our Wiki for much more.


We use the google group as our mailing list (use English only). Subscribe via nwjs-general+subscribe@googlegroups.com.

NOTE: Links to the old google group (e.g. https://groups.google.com/forum/#!msg/node-webkit/doRWZ07LgWQ/4fheV8FF8zsJ) that are no longer working can be fixed by replacing node-webkit with nwjs-general (e.g https://groups.google.com/forum/#!msg/nwjs-general/doRWZ07LgWQ/4fheV8FF8zsJ).

Issues are being tracked here on GitHub.

The source code for NW.js and the daily development spans across multiple repositories in this organization. This repository is for the purpose of issue tracking, landing page and part of the source code.

Verifying Binaries

Starting from 0.32.0 the stable and nightly download directories contain a SHASUMS256.txt file that lists the SHA checksums for each file available for download, as well as the checksums for the files inside the download package.

The SHASUMS256.txt can be downloaded using curl.

$ curl -O https://dl.nwjs.io/vx.y.z/SHASUMS256.txt

To check that a downloaded file matches the checksum, run it through sha256sum with a command such as:

$ grep nwjs-vx.y.z.tar.gz SHASUMS256.txt | sha256sum -c -

The stable releases (but not Nightlies) also have the GPG detached signature of SHASUMS256.txt available as SHASUMS256.txt.asc. You can use gpg to verify that SHASUMS256.txt has not been tampered with.

To verify SHASUMS256.txt has not been altered, you will first need to import the GPG key of NW.js maintainer to create releases. Use this command to import the key:

$ gpg --keyserver pool.sks-keyservers.net --recv-keys 78680FA9E21BB40A
(Key fingerprint is 1E8B EE8D 5B0C 4CBC D6D1  9E26 7868 0FA9 E21B B40A)

Next, download the SHASUMS256.txt.asc for the release:

$ curl -O https://dl.nwjs.io/vx.y.z/SHASUMS256.txt.asc

After downloading the appropriate SHASUMS256.txt and SHASUMS256.txt.asc files, you can then use gpg --verify SHASUMS256.txt.asc SHASUMS256.txt to verify that the file has been signed by an authorized member of the NW.js team.

Once verified, use the SHASUMS256.txt file to get the checksum for the binary verification command above.


NW.js's code in this repo uses the MIT license, see our LICENSE file. To redistribute the binary, see How to package and distribute your apps

nw.js open issues Ask a question     (View All Issues)
  • over 3 years XMLHttpRequest download the file and save the local
  • over 3 years i want dynamic setup OS
  • over 3 years Missing symbols for libnode.dylib and libffmpeg.dylib
  • over 3 years Webview event for common dialogs
  • over 3 years Can't create Secure Websocket connections (wss) with SNI on OSX
  • over 3 years inject_js_start effects iframe , and occurs some errors
  • over 3 years kiosk mode osx still showing menu
  • over 3 years Monitoring node-main process
  • over 3 years OnNoMemory in ImageDecodeTask
  • over 3 years bugs in modifiers of nw.MenuItem
  • over 3 years uppercase character in domain attribute of package.json, nw.js coundn't launch
  • over 3 years unable to move the cache
  • over 3 years Problem with Steam Overlay on Linux
  • over 3 years Slow startup time (2 minutes!) on Windows
  • over 3 years nw.Window.open and gui.Window.open - nw is undefined in the new Window since 0.13 Migration
  • over 3 years Events not sent to "NWJS Default app"
  • over 3 years Crash on OsX due to args on package.json
  • almost 4 years Node worker can't include plugin
  • almost 4 years TypeError: isIP is not a function / Error: EFILE
  • almost 4 years console.time async bug
  • almost 4 years win.print fail without parameter
  • almost 4 years Window sizes wrong (height min/max)
  • almost 4 years An API function for taking a screenshot of the user's Desktop?
  • almost 4 years Fit to page when printing PDFs
  • almost 4 years Scrollbars do not look correct
  • almost 4 years Chrome permission request causes app to close
  • almost 4 years nwUserAgent not working...
  • almost 4 years How to get app root directory in nwjs?
  • almost 4 years There is no win.isDevToolsOpen() method in v0.14.7 but had in document.
  • almost 4 years macOS: Quit from the app switcher, missing "quit" string at event callback.
nw.js open pull requests (View All Pulls)
  • Use window subfields in manifest for newly created windows
  • Fix crash when using `additional_trust_anchors`
  • Updated documents for `node-main`, `main` and `bg-script`
  • Trust On First Use
  • Update README.md
  • Update nw_strings_id.xtb
  • Removed 'JavaScript' from title of JavaScript dialogs in Linux
  • Fixed devtools issue for nw12
  • Fixed window size not working when using window.open
  • Changed links to nwjs/nw.js
  • New Menu method getItemByLabel
  • [l10n] merge localization resources
  • Fix node-webkit version finding in build_native_modules.py
  • Feature request: API for registering node-webkit applications as protocol handlers #951
  • Fix #2106: Updated Tray to use libappindicator in Linux
  • macosx appstore support
  • Adding link to another tutorial on Node Webkit
  • Fix nw0.8 DispatcherHost::OnCallObjectMethodSync() warm output
  • Backport skip_taskbar feature
  • Add support for Window.SetIcon(icon) (win + gtk only)
  • #1350: fix maximize/restore/fullscreen cause hidden window to be visible on windows platform
  • fix #856: reactivate window after alert dialog is closed
  • fix setposition(center) in linux
  • Fix menu.popup misplaced when zoomLevel is set
  • [win]frameless window'height can be sized under 38px ver2X
  • Typo errors in docs
  • Fix title showing in a frameless window on OSX
  • Updated docs of building native modules
  • test case for issue #4171
  • Update the isFullScreen and the isAlwaysOnTop to be boolean instead o…
  • Updated docs for building proprietary codecs easier
  • Nw14 mas
  • Updated docs of building native modules
  • Refactors NW hooks
  • Nw15 mas
  • Added `isDevToolsOpen` interface and missing impl.
  • added new APIs for read/write multiple types of data to clipboard
  • added new APIs for read/write multiple types of data to clipboard
  • Table of Contents keeps changing in each version
  • exposes `autoprint` as a option to pass to `win.print()`
  • updated Window.md `win.print()` call
  • [osx] update menuitems after setting main menu
  • Remove TOC from homepage to avoid inconsistancy with navigation sidebar
  • [test] test case for #5163
  • [linux] enabled global menubar on Ubuntu
  • [linux] enabled global menubar on Ubuntu
  • [linux] enabled global menubar on Ubuntu
  • updated test cases for nw18 update
  • [test] test for #5247
  • updated test case & hooks for `open` event of `nw.App`
  • support passing Buffer or ArrayBuffer to evalNWBin
  • [test] test for issue #4693
  • [test] add 4 test cases for worker
  • Implemented APIs for set/get AppUserModelID
  • fixed `show_in_taskbar` option for `nw.Window.open`
  • fixed `show_in_taskbar` option for `nw.Window.open`
  • fixed nw-gyp build failure with UNICODE set
  • App.open event should be fired with `single-instance` set to `false`
  • set force close flags and close window using js
  • fix keyboard access for menus
  • [linux] enabled global menubar on Ubuntu
  • [test] added a test case for cookie lost after devtools closed
  • [test] switch to devtools window w/o specifying window handle
  • Fix #916: support pac_url and auto proxy detection
  • [doc] updated "Enable Proprietary Codecs.md"
  • [linux] enabled global menubar on Ubuntu
  • [doc] updated documentation for building NW.js
  • [linux] enabled global menubar on Ubuntu
  • Add documentation for configuring windows background color
  • Title and favicon change event on webview documentation
  • Optional title for chrome.history.addUrl documenation
  • Webview navigation history getter documentation.
  • [AutoUpdater][OSX] add squirrel auto updater
  • Guide how to use tracing tools on nwjs
  • Cert error on webview documentation
  • Audio management support in webview documentation.
  • [test] Add test for issue5730
  • [test] Add test for issue5781
  • [test] Add test for isse6136
  • [test] Add test for issue6099
  • [test] Add test for issue6229
  • [test] Add test for issue#6231
  • [test] Add test case for issue #5882
  • [test] Add test for issue #5943
  • [test] Add test for issue#5980
  • [test] Add test for issue#6113
  • [doc] update description for chromedriver
  • Update instructions
  • tools: remove the deprecated '--patch-config' option from patcher.py
  • Enable building NW.js when git index is not available.
  • [test] fix test 6229
  • [test] Add test for issue3001
  • Fix Menu.append act different from SimpleMenuModel cause crash
  • Update Mac packaging instructions
  • Incorrect guidelines for selenium test automation
  • Create Notification.md
  • add manual test for nw.Window API
  • [test] Add test for issue6655
nw.js questions on Stackoverflow (View All Questions)
  • unable to build nw.js with diskdb
  • Unable to build nw.js hello world application
  • ChromeDriver for NW.js Application
  • Unable to run nw.js application in ubuntu
  • Javascript - Angular 2 and nw.js WebSocket context
  • Selenium WebDriver Automation script for application Developed using NW.js Technology
  • How to get started with angular2 in nw.js
  • NW.js ability to detect computer lock, mouse activity, idle user
  • How to properly inject a click or Enter key event in a NW.js guest page so that it doesn't know the difference?
  • In nw.js(node-webkit), how node-main : node.js access any windows?
  • Using liquidfun.js within nw.js
  • How can I run scripts in served pages in NW.js?
  • Cannot remove mouse cursor in nw.js app
  • [NW.JS]Something annoying when i package my program
  • SQLITE compiled for NW.js - One command for SQL CRUD
  • How to create a desktop app version of a website using NW.js?
  • NW.js Button injection
  • Browserify with node-webkit (nw.js) usage
  • NW.js : OAuth worflow redirect in nw.gui window popup error
  • How many copies of V8 in NW.js and Electron?
  • Selenium WebDriver Automation with NW.js and Chromium Extended Framework Desktop application implemented in web technologies
  • nw.js browser showing Uncaught ReferenceError: require is not defined
  • how to automate mouse clicks in nw.js (node-webkit)
  • NW.js capture keypress when out of focus without disabling it in another apps
  • Maximize nw.js window from protractor doesn't work
  • Getting data out of fs.readfile using nw.js
  • Inject multiple javascript sources in nw.js
  • NW.js / NodeJS Google Analytics integration
  • building serialport.js with nw.gyp for nw.js
  • Check if nw.js application is running on built version (prod) or development
Other projects in C++