nwjs/nw.js
36.6
Weak · 6 August 2026
1.6k
lines of production code
4
measurements over time
What this system is
This release introduces a comprehensive suite of new APIs for application, window, menu, tray, screen, and shell management, alongside a major architectural shift to the GN build system and a Chromium 150 engine update. The update also brings robust support for global hotkeys, clipboard access, and desktop media capture, while establishing a rigorous automated test suite covering these new features and numerous stability fixes.
Features
Add Shell API for opening external links and files
A new Shell API is introduced, exposing JavaScript methods to open external URLs, open local files or folders, and show items in their containing folder. This adds the \openExternal\, \openItem\, and \showItemInFolder\ capabilities to the application's JavaScript environment.
src/api/shell · high confidence
Add Tray API for system tray icon management
Developers can now create and manage system tray icons using the new \Tray\ API. This includes setting icons, titles, tooltips, and context menus, as well as handling click events. The implementation provides platform-specific backends for macOS, Windows, and Linux (GTK/Aura), allowing applications to interact with the OS status area.
src/api/tray · high confidence
Add clipboard API for managing system clipboard
Introduced a new \gui.Clipboard\ API that allows applications to read from and write to the system clipboard. The implementation supports setting and retrieving plain text, as well as clearing the clipboard contents.
src/api/clipboard · high confidence
Add dummy access token store for content shell geolocation
Introduced ShellAccessTokenStore, a dummy implementation of the access token store used to initialize the network location provider in the content shell environment. This change provides a mock access token set to avoid hitting the server during testing, ensuring that geolocation-related network location provider initialization does not require real authentication tokens.
src/geolocation · high confidence
Add global desktop keyboard shortcut support
The application now supports registering global desktop keyboard shortcuts on Windows, macOS, and Linux. This feature allows users to define and trigger keyboard shortcuts that function even when the application window is not in focus, with platform-specific implementations handling the underlying system hooks for each operating system.
src/api/shortcut · high confidence
Add internationalization (i18n) support with translations for multiple languages
Added a new \id\_list\ file and multiple \nw\strings\\*.xtb\ translation files in the \src/resources/locale\ directory. These files provide the localized text for user interface elements, enabling the application to display strings in various languages such as Amharic, Arabic, Bulgarian, Bengali, Catalan, Czech, Danish, German, Greek, English (GB), Spanish, Estonian, Persian, Finnish, Filipino, French, Gujarati, Hindi, Croatian, Hungarian, Indonesian, Italian, Hebrew, Japanese, Kannada, Korean, Lithuanian, Latvian, Malayalam, Marathi, Malay, Dutch, Norwegian, Polish, Portuguese (BR and PT), Romanian, and Russian.
src/resources/locale · high confidence
Add renderer-side autofill support
The renderer now includes an AutofillAgent that intercepts text input events and displays autocomplete suggestions for form fields and \<datalist\> elements. This enables the browser to offer form-filling suggestions directly in the rendering process, improving the user experience for data entry.
src/renderer · high confidence
Add screen and desktop capture APIs
Introduced new JavaScript and C++ APIs for screen management and desktop media capture. The \screen\ module now exposes \GetScreens\ to retrieve display information (bounds, work area, scale factor, rotation, touch support) and emits events for \displayAdded\, \displayRemoved\, and \displayBoundsChanged\. Additionally, a \ChooseDesktopMedia\ function is exposed, allowing applications to trigger a native picker dialog for selecting screen or window sources for desktop capture, with results delivered via a callback or event.
src/api/screen · high confidence
Added Autofill popup view and controller implementation
Added the browser-side implementation for the Autofill suggestion popup, including the cross-platform \AutofillPopupView\ interface, the \AutofillPopupController\ and its \AutofillPopupControllerImpl\ to manage state and keyboard/mouse interactions, and platform-specific views for Mac (Cocoa) and Linux (GTK) to render the popup UI.
src/browser · high confidence
Added C++ event listener infrastructure for screen geometry events
Introduced new C++ classes (EventListener, BaseEvent) in the event API to manage and track event listeners, providing methods to add and remove listeners by type. This infrastructure supports the new screen geometry event handling, ensuring proper registration and cleanup of native callbacks.
src/api/event · medium confidence
Added Linux/Unix print dialog implementation
Introduced the GTK-based print dialog implementation for Linux/Unix systems, including the \PrintDialogGtk\ class which manages the native print dialog, printer selection, and settings. This adds the missing platform-specific UI component required for printing on GTK-based environments, complementing the existing \PrintJob\ and \PrintJobManager\ infrastructure.
src/browser/printing · high confidence
Added Pepper Flash support on Linux
The browser now supports Pepper Flash on Linux. This change introduces new browser-side components to handle Pepper Flash plugin interactions, including a factory for creating browser-side hosts, message filters for clipboard access, and isolated file system access. These additions enable the browser to manage Flash plugin resources, handle clipboard operations, and manage isolated file system access for Pepper-based Flash plugins.
src/browser/pepper · high confidence
Added media capture device management and enumeration
The browser now supports enumerating and accessing audio and video capture devices (microphones and cameras) through the MediaStream API. This change introduces the MediaCaptureDevicesDispatcher and MediaStreamDevicesController to handle device discovery, state updates, and permission checks, enabling web pages to request access to local media devices.
src/media · high confidence
Added renderer-side printing support
Introduced the \PrintWebViewHelper\ class and its platform-specific implementations (Linux, Mac, Windows, PDF/Win) to handle web page rendering for print jobs. This new component manages the conversion of web content into printable formats, including print preview generation and direct printing, enabling users to print web pages from the application.
src/renderer/printing · high confidence
Adds support for cookies and app protocol handling
The net module now includes a new AppProtocolHandler to serve local files via the 'app' protocol, enabling the application to handle internal resource requests (such as 'nw:version' and 'nw:gpu') and file-based URLs. Additionally, cookie management is introduced through a new ShellNetworkDelegate that enforces cookie policies (allowing or blocking cookies based on configuration) and integrates with the extension web request API. Persistent cookie storage is also implemented using SQLite, ensuring that session and persistent cookies are saved and restored across application restarts.
src/net · high confidence
Initial commit of NW.js core source files
The project's source code is reorganized into a new \src\ directory, consolidating core implementation files such as \nw\_base\, \nw\_content\, \nw\_content\_verifier\_delegate\, and \nw\_custom\_bindings\. This change establishes the foundational C++ architecture for the application, including the package initialization, content verification, and custom V8 bindings, while also adding platform-specific hooks for macOS kiosk mode and Windows resource manifests.
src · high confidence
Introduce Base class for UI elements
Added a new Base class in the API layer that serves as a common foundation for all UI elements. This introduces a shared base type that other UI components can inherit from, providing a unified interface and structure for managing object identity, extension context, and event handling across the API.
src/api/base · high confidence
Introduce MenuItem API for cross-platform menu support
The \src/api/menuitem\ directory now contains the complete implementation for the \MenuItem\ API across all supported platforms (macOS, Windows, and Linux/GTK). This adds the underlying C++ and JavaScript bindings that allow applications to create, configure, and interact with menu items, including support for labels, icons, checkboxes, submenus, and keyboard shortcuts.
src/api/menuitem · high confidence
Introduce app signing and content verification tooling
A new signing toolset has been added to the repository, enabling the generation of signed payloads and manifests. The suite includes a Python script (sign.py) that computes file hashes and applies RSA-SHA256 signatures to both content payloads and package manifests. A helper script (convertkey.py) is provided to convert RSA keys into the required C++ array format, and a sample private key is included for testing. This change adds the capability to produce signed content structures for verification.
tools/sign · high confidence
Introduce new 'nw2' windowing and system APIs
The \src/resources\ directory now contains the JavaScript bindings for the new 'nw2' windowing system and related system APIs. This includes \api\_nw\_app.js\ for application-level functions (e.g., \argv\, \dataPath\, global hotkeys), \api\_nw\_window.js\ and \api\_nw\_newwin.js\ for window management and events, \api\_nw\_menu.js\ and \api\_nw\_menuitem.js\ for context and application menus, \api\_nw\_tray.js\ for system tray icons, \api\_nw\_shortcut.js\ for global hotkeys, \api\_nw\_screen.js\ for screen geometry and desktop capture, \api\_nw\_clipboard.js\ for clipboard operations, and \api\_nw\_shell.js\ for shell operations. These files implement the new API surface that replaces or augments the previous 'nw13' (NW12) compatibility layer.
src/resources · high confidence
Introduce the App API for application-level controls
Developers can now access application-level properties and methods via the new \App\ object. This includes reading command-line arguments (\argv\, \fullArgv\), retrieving the application's data path (\dataPath\), and accessing the package manifest. The API also provides methods to control the application lifecycle and environment, such as \quit()\, \closeAllWindows()\, \clearCache()\, and \setCrashDumpDir()\. Additionally, it exposes functionality for managing global hotkeys (\registerGlobalHotKey\, \unregisterGlobalHotKey\), creating desktop shortcuts (\createShortcut\), and configuring proxy settings (\setProxyConfig\, \getProxyForURL\).
src/api/app · high confidence
Mac app now supports .nw file associations and HTTP authentication UI
The Mac build now includes an HTTP authentication dialog (HttpAuth.xib) for handling basic auth prompts. Additionally, the app's Info.plist files define a new Uniform Type Identifier for .nw files, allowing the application to be associated with and open .nw app packages directly on macOS.
src/mac · high confidence
New Menu, MenuItem, and Tray API implementations for native menus
The \src/api/menu\ directory now contains the C++ and JavaScript implementations for the Menu, MenuItem, and Tray APIs. This adds support for creating and managing native menus and system tray icons across Windows, Linux, and macOS. On macOS, the implementation includes handling for standard application menus (About, Hide, Edit, Window) and allows hiding the Edit and Window menus via options. On Windows and Linux, it provides the core menu model and delegate classes to bridge the JavaScript API with the native UI frameworks (Win32, GTK, and Views).
src/api/menu · high confidence
New build and packaging tools for NW.js
The tools directory now includes a suite of new Python and shell scripts to support building, packaging, and uploading NW.js binaries. Key additions include \package\_binaries.py\ for creating platform-specific distribution packages (handling inputs like \icudtl.dat\, \locales\, and various DLLs/SOs), \make-nw-headers.py\ to generate header archives for native modules, and \aws\_uploader.py\ to upload build artifacts to S3. Additional utilities such as \dump\_app\_syms\, \dump\_mac\_syms\, and \dump\_win\_syms.py\ handle symbol generation for crash reporting, while \commit\_id.py\ and \getnwversion.py\ manage versioning and commit hashes. The \patcher.py\ script applies configuration-driven patches to the source tree, and \roll-deps.py\ automates dependency updates. These tools collectively enable the automated generation, symbolization, and distribution of NW.js builds.
tools · high confidence
New internal error and status pages for Node-WebKit
Added several new HTML resource pages to the application's internal UI. These include a fatal error page and a package error page, both featuring a stylized cloud design, as well as a version information page that displays the Node-WebKit, Node, and Chromium versions along with the commit hash. Additionally, a print preview page was added to support printing functionality, and a shell devtools discovery page was introduced to allow remote debugging of web contents. A previous test file was also renamed to serve as a GPU information page.
src/resources/pages · high confidence
Architecture
Migrate NW.js API implementation to GN build system
The NW.js API implementation in src/api has been migrated from the legacy GYP build system to the modern GN build system. This includes new BUILD.gn, api.gyp, api\_registration.gyp, and \_api\_features.json files that define how the API schemas and C++ implementations are compiled and registered. The migration ensures compatibility with the Chromium build infrastructure and supports component builds.
src/api · high confidence
Behavioural changes
Added background.js stub for nwapp
A new background.js file was added to the nwapp resources, containing only a commented-out console.log statement. This appears to be a placeholder or stub for background script functionality.
src/resources/nwapp · medium confidence
Added custom search box template
A new search box template has been added to the custom theme, providing a dedicated search form with a text input for querying documentation.
_custom\theme · high confidence
Centralized manifest and command-line switch definitions for window and Node.js integration
The \src/common\ directory now contains centralized definitions for all manifest keys and command-line switches that control application behavior. This includes window properties (e.g., \kmFullscreen\, \kmShowInTaskbar\, \kmTransparent\), Node.js integration flags (\kNodeMain\, \kNodeOptions\), and user-agent override settings (\kmUserAgent\). These constants are now explicitly declared in \shell\_switches.h\ and \shell\_switches.cc\, providing a single source of truth for feature toggles and configuration options.
src/common · high confidence
Removed legacy nwebkit initialization wrapper
The previous entry point for the nwebkit library has been removed. This eliminates the automatic initialization of the underlying native module and the monkey-patching of global require and process objects, requiring consumers to handle initialization and module loading explicitly.
lib · high confidence
Update build system and browser automation patches
The build system is patched to link Node with libc++ as a static library on Linux, while the ICU build is updated to detect the host byte order and link against libc++ on Windows. The FFmpeg build is modified to set the macOS install name to @loader\_path/libffmpeg.dylib and to not set rpath on Linux. The Selenium patch is updated to support program arguments in ChromeDriver and migrate to Python 3. Additionally, the DevTools patch initializes the UI global for layout tests, and the Perfetto patch disables zlib to avoid conflicts with Node's zlib.
patch/patches · high confidence
Test coverage
Add MV3 DevTools extension test case; Add SharedWorker sanity test; Add Windows-specific test for window size regression; Add memory leak test for mixed-context reloads; Add sanity test for CORS and remote access; Add sanity test for window serialization; Add sanity tests for app.getProxyForURL with PAC file support; Add test coverage for issue \#5882 debugging tools crash; Add test coverage for mixed context window spawning; Add test coverage for webview injection; Add test for closing windows without quitting the driver; Add test for issue 5947 regarding localStorage crash; Add test for manifest-based JavaScript injection in new windows; Add test for multiple simultaneous WebSocket connections; Add test for nested loop issue \#5020; Add test infrastructure and new sanity tests for webview and remote window issues; Add webview-localfile test to the sanity suite; Added ESM sanity tests; Added Python test framework for the test/testpy directory; Added React DevTools extension test files; Added Windows-specific manifest test for window opening behavior; Added automated test for React DevTools extension; Added automated test for cookie loss after closing DevTools; Added automated test for issue 7173 iframe location access; Added automated test for remote webview with Node.js integration; Added automated test suite for Node.js API bindings; Added automated test suite for the open-remote feature; Added automated tests for JavaScript injection in iframes; Added automated tests for Screen.DesktopCaptureMonitor; Added automated tests for iframe-remote scenarios; Added automated tests for the window-open feature; Added automated tests for webview local resource loading; Added browser test for NWObject menu item click event dispatch; Added browser test for issue \#8243 regarding reload behavior; Added browser test for issue 4121 inspect node crash; Added browser test for issue 4269 click link crash; Added browser test for issue 6061 binary crash; Added browser test for jailed DevTools functionality; Added browser test for window.getPrinters return value; Added crash-dump-report integration test; Added full test suite for window and shortcut features; Added manual test for OS X context menu hotkey; Added manual test for memory leak on page reload; Added manual test suite for nw.Window API; Added new JS test driver for running tests with concurrency and port management; Added new sanity tests for Node.js integration and window management; Added new sanity tests for node-remote and window.eval; Added new test framework and utilities; Added sanity test for window position and resize behavior; Added sanity tests for download, window management, and user-agent headers; Added sanity tests for screen media selection and start page; Added sanity tests for the webview CDT extension; Added test coverage for Bluetooth permission handling; Added test coverage for JS injection start/end hooks; Added test coverage for Mac-specific crash in issue 6113; Added test coverage for NW.js worker binary loading; Added test coverage for Node.js worker message loop; Added test coverage for Node.js worker thread crash issue \#7450; Added test coverage for Windows window opening behavior; Added test coverage for X-Frame-Options security header; Added test coverage for cookie handling in issue 4199; Added test coverage for issue \#4822 regarding process.nextTick and setTimeout behavior; Added test coverage for issue \#6056 spawn crash; Added test coverage for issue \#6251 (Node.js crypto crash); Added test coverage for issue \#7305 regarding nwfaketop cookie handling; Added test coverage for issue 4131 form post functionality; Added test coverage for issue 4157 (nav window lost); Added test coverage for issue4679 uncaught exception handling; Added test coverage for mixed-context WebSocket behavior; Added test coverage for module-bin functionality; Added test coverage for new browser instance behavior; Added test coverage for new-instance window context isolation; Added test coverage for node:inspector module availability; Added test coverage for webview CDT extension; Added test coverage for webview executeScript; Added test coverage for window maximize and restore behavior; Added test coverage for window.opener security behavior; Added test data for Pepper Flash, screen sharing, PDF, and print functionality; Added test for URL with single quote crash; Added test for camera PTZ permission auto-grant; Added test for cookie loss when closing remote page devtools; Added test for duplicate close event firing in modals; Added test for fullscreen in window manifest; Added test for iframe error crash issue \#5148; Added test for issue \#5097 regarding packaged file creation; Added test for issue 5093 window size matching; Added test for issue 5980 regarding YouTube video crash; Added test for issue 6099 regarding cross-origin iframe access; Added test for issue 6136 regarding history navigation in iframes; Added test for issue 6324 regarding extension\_all\_frame\_true\_exit; Added test for issue 7305 regarding SameSite cookie handling; Added test for issue 7503 (window close behavior); Added test for issue6171 SDK start crash; Added test for loading native modules in Web Workers; Added test for macOS setProgressBar crash (issue \#6143); Added test for node-remote file access patterns; Added test for reloading a lost app window; Added test for tray menu ID allocation; Added test for webview data clearing functionality; Added test for window visibility on all workspaces; Added test suite for additional trust anchors; Added test suite for issue \#5762 regarding user data directory handling; Added test suite for issue 5730: add-node-in-permissions; Added test suite for remote window opening on Windows; Added tests for Node.js integration in webviews; Added tests for Node.js worker integration; Added tests for chrome.sockets.tcp permission handling; Added tests for jailed DevTools elements inspection; Added tests for manifest default injection behavior; Added tests for new-window-policy behavior; Added tests for notification permission handling; Added tests for nwjc buffer and ArrayBuffer support; Added tests for remote screen capture functionality; Added tests for the app-open event functionality; Added win-move sanity test for window movement; Removal of obsolete test files.
Dependencies
Added test dependencies and test case manifests
The project now includes a requirements.txt file specifying Python dependencies (Pygments, mkdocs, pymdown-extensions) and numerous package.json files for test cases and the test runner (jsdriver). These additions support the new test framework and browser test infrastructure, enabling automated testing of various NW.js features and bug fixes.
(dependencies) · high confidence
Updated to Chromium 150.0.7871.46
The browser engine has been updated to Chromium 150.0.7871.46, bringing the latest web platform features, performance improvements, and security fixes to the application.
(repo-wide) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Baseline
- First survey — no prior run to compare against. CAI 37.
Lenses
- Code Health 53
- Architecture 92
- Maturity 59
- Readiness 9
- Security 76
Changes since last survey
- 300 commits — 238 feature/other, 62 fixes
By area
- (root) — 143 commits
- src/api — 34 commits
- test/sanity — 28 commits
- src/nw_version.h — 25 commits
- patch/patches — 10 commits
- src/nwjs_browsertest.cc — 10 commits
- src/renderer — 7 commits
- test/browser — 7 commits
- test/jsdriver — 5 commits
- src/common — 4 commits
- src/nw_custom_bindings.cc — 4 commits
- src/browser — 3 commits
- docs/For Users — 2 commits
- docs/References — 2 commits
- docs/issue-8283-app-on-open-event.md — 2 commits
- src/resources — 2 commits
- test/data — 2 commits
- tools/exec_util.py — 2 commits
- tools/make-nw-headers.py — 2 commits
- src/nw_content_mac.h — 1 commit
Notable commits
- fix: Fix build error in menuitem_mac.mm
- fix: Fix build: use base::ScopedAllowBlocking instead of private PermanentThreadAllowance::AllowBlocking()
- fix: Fix linux syms dumping
- fix: Revert "Fix linux syms dumping"
- fix: Revert "rename BrowserFrame to BrowserWidget"
- fix: [test] Fix issue8243-reload for Node 25
- fix: [test] Fix race condition in local_pdf
- fix: [test] fix issue8243-reload
- fix: [test] fix logging in 6212-crossdomain-screen
- fix: [test] issue7503-close: fix race conditions
- fix: docs: fix evalNWBinModule example to use dynamic import (#8344)
- fix: fix #7861: preserve userAgentMetadata when overriding user-agent from manifest
- fix: fix #8274: strip chrome_crashpad_handler, minidump_stackwalk, libEGL, libGLESv2, libvulkan, libvk_swiftshader on Linux
- fix: fix #8281: normalize file permissions in Linux dist tarball to 644/755
- fix: fix #8283: nw.App.on('open') callback only fires once on subsequent app launches
- fix: fix #8296: enable Node.js message pump in service worker threads
- fix: fix App.argv caching preventing deep link URL from appearing (#7741)
- fix: fix Python 3 compatibility in packaging scripts
- fix: fix WebSocket overwritten by Node in mixed-context mode (#8226)
- fix: fix building error in browser test
- …and 280 more
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
nwjs/nw.js was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 6 August 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit a3bbe3042f42714cc3e09bec0e85f5f4a6d8b47e — the exact code this score is about.
- Scored under rubric-2026.08.15 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using localhost:5005/codehealth-analyzer rubric-2026.08.15.