neutralinojs
Portable and lightweight cross-platform desktop application development framework
Top Related Projects
Build smaller, faster, and more secure desktop and mobile applications with a web frontend.
:electron: Build cross-platform desktop apps with JavaScript, HTML, and CSS
Call all Node.js modules directly from DOM/WebWorker and enable a new way of writing applications with all Web technologies.
:zap: Native, high-performance, cross-platform desktop apps - built with Reason!
A library for building cross-platform native desktop applications with Node.js and CSS 🚀. React NodeGui : https://react.nodegui.org and Vue NodeGui: https://vue.nodegui.org
Create beautiful applications using Go
Quick Overview
NeutralinoJS is a lightweight and portable desktop application development framework. It allows developers to build cross-platform applications using web technologies (HTML, CSS, and JavaScript) while providing access to the native OS capabilities. NeutralinoJS aims to be a lightweight alternative to Electron, offering a smaller footprint and better performance.
Pros
- Extremely lightweight (less than 1MB) compared to other similar frameworks
- Cross-platform support for Windows, macOS, and Linux
- Native API access for file system, OS, computer information, and more
- No additional runtime dependencies required
Cons
- Smaller ecosystem and community compared to more established frameworks like Electron
- Limited built-in UI components, requiring developers to bring their own UI frameworks
- Less extensive documentation and fewer learning resources available
- May require more manual configuration for advanced features
Code Examples
- Creating a simple window:
// main.js
Neutralino.init();
Neutralino.window.setTitle("My NeutralinoJS App");
- Accessing file system:
// Read file content
Neutralino.filesystem.readFile('./data.txt')
.then((content) => console.log(content))
.catch((error) => console.error(error));
// Write to file
Neutralino.filesystem.writeFile('./output.txt', 'Hello, NeutralinoJS!')
.then(() => console.log('File written successfully'))
.catch((error) => console.error(error));
- Fetching OS information:
Neutralino.os.getOSInfo().then((osInfo) => {
console.log(`OS: ${osInfo.name}`);
console.log(`Version: ${osInfo.version}`);
console.log(`Kernel: ${osInfo.kernel}`);
});
Getting Started
-
Install Neutralino CLI:
npm install -g @neutralinojs/neu
-
Create a new project:
neu create myapp cd myapp
-
Run the application:
neu run
-
Build for distribution:
neu build
This will create a basic NeutralinoJS application structure. Modify the resources/index.html
file for your UI and resources/js/main.js
for your application logic. Refer to the official documentation for more advanced usage and API details.
Competitor Comparisons
Build smaller, faster, and more secure desktop and mobile applications with a web frontend.
Pros of Tauri
- Better security with Rust backend and custom protocol
- Smaller bundle sizes due to native OS components
- More flexible frontend options (any web tech stack)
Cons of Tauri
- Steeper learning curve (Rust knowledge required)
- Less mature ecosystem compared to Neutralino
- More complex setup and configuration
Code Comparison
Tauri (Rust):
#[tauri::command]
fn greet(name: &str) -> String {
format!("Hello, {}!", name)
}
fn main() {
tauri::Builder::default()
.invoke_handler(tauri::generate_handler![greet])
.run(tauri::generate_context!())
.expect("error while running tauri application");
}
Neutralino (JavaScript):
function onWindowClose() {
Neutralino.app.exit();
}
Neutralino.init();
Neutralino.events.on("windowClose", onWindowClose);
Neutralino.window.setTitle("My Neutralino App");
Both Tauri and Neutralino aim to create lightweight, cross-platform desktop applications using web technologies. Tauri offers better security and smaller bundle sizes but has a steeper learning curve due to its Rust backend. Neutralino provides a simpler JavaScript-based approach but may have larger bundle sizes. Tauri's code involves Rust for backend logic, while Neutralino uses JavaScript throughout. Choose based on your team's expertise and project requirements.
:electron: Build cross-platform desktop apps with JavaScript, HTML, and CSS
Pros of Electron
- Mature ecosystem with extensive documentation and community support
- Rich set of APIs for deep OS integration and native features
- Cross-platform compatibility with consistent behavior across Windows, macOS, and Linux
Cons of Electron
- Large application size due to bundled Chromium and Node.js
- Higher memory usage and resource consumption
- Slower startup times compared to native applications
Code Comparison
Electron:
const { app, BrowserWindow } = require('electron')
function createWindow () {
const win = new BrowserWindow({ width: 800, height: 600 })
win.loadFile('index.html')
}
app.whenReady().then(createWindow)
Neutralino:
Neutralino.init();
Neutralino.window.create('myWindow', {
url: 'index.html',
width: 800,
height: 600
});
Both frameworks allow creating desktop applications using web technologies, but Neutralino aims for a lighter footprint and faster performance. Electron offers more extensive features and better OS integration, while Neutralino focuses on simplicity and reduced resource usage. The choice between the two depends on the specific requirements of your project, such as needed features, target platforms, and performance considerations.
Call all Node.js modules directly from DOM/WebWorker and enable a new way of writing applications with all Web technologies.
Pros of NW.js
- Mature ecosystem with extensive documentation and community support
- Full access to Node.js APIs and npm packages
- Cross-platform compatibility (Windows, macOS, Linux)
Cons of NW.js
- Larger application size due to bundled Chromium and Node.js
- Higher memory consumption compared to lightweight alternatives
- Slower startup times for applications
Code Comparison
NW.js:
const gui = require('nw.gui');
const win = gui.Window.get();
win.on('close', function() {
this.hide();
console.log('Window closed');
this.close(true);
});
NeutralinoJS:
Neutralino.window.on('windowClose', () => {
Neutralino.app.exit();
});
Neutralino.init();
NW.js offers a more Node.js-like approach with require statements and direct access to native APIs, while NeutralinoJS provides a lightweight alternative with a simplified API for basic window management. NW.js is better suited for complex applications requiring full Node.js capabilities, whereas NeutralinoJS is ideal for lightweight, cross-platform desktop apps with minimal overhead.
:zap: Native, high-performance, cross-platform desktop apps - built with Reason!
Pros of Revery
- Native performance with OCaml and ReasonML
- Cross-platform UI development with a single codebase
- Leverages React-like components for familiar development experience
Cons of Revery
- Smaller community and ecosystem compared to Neutralino
- Steeper learning curve due to OCaml/ReasonML language requirements
- Less documentation and fewer resources available for beginners
Code Comparison
Revery (ReasonML):
let app = () =>
<View>
<Text text="Hello, World!" />
<Button title="Click me" onClick={() => print_endline("Clicked!")} />
</View>;
ReasonReact.render(app);
Neutralino (JavaScript):
Neutralino.init();
Neutralino.window.setTitle("My Neutralino App");
document.getElementById("myButton").addEventListener("click", () => {
console.log("Button clicked!");
});
Summary
Revery offers native performance and cross-platform development using OCaml/ReasonML, with a React-like component system. However, it has a smaller community and steeper learning curve compared to Neutralino. Neutralino provides a more familiar JavaScript-based development experience with a larger ecosystem, but may not offer the same level of native performance as Revery. The choice between the two depends on the developer's language preferences, performance requirements, and desired ecosystem support.
A library for building cross-platform native desktop applications with Node.js and CSS 🚀. React NodeGui : https://react.nodegui.org and Vue NodeGui: https://vue.nodegui.org
Pros of NodeGUI
- Native performance and look-and-feel using Qt framework
- Smaller bundle sizes compared to Electron-based applications
- Access to powerful Qt widgets and APIs for complex UI development
Cons of NodeGUI
- Steeper learning curve due to Qt integration
- Less cross-platform consistency compared to web-based solutions
- Requires additional setup and dependencies (Qt libraries)
Code Comparison
NodeGUI example:
const { QMainWindow, QWidget, QLabel, FlexLayout } = require("@nodegui/nodegui");
const win = new QMainWindow();
const centralWidget = new QWidget();
const label = new QLabel();
label.setText("Hello World");
const rootLayout = new FlexLayout();
centralWidget.setLayout(rootLayout);
rootLayout.addWidget(label);
win.setCentralWidget(centralWidget);
win.show();
NeutralinoJS example:
Neutralino.init();
Neutralino.window.setTitle("My App");
let content = "<h1>Hello World</h1>";
Neutralino.window.setContent(content);
Neutralino.events.on("windowClose", () => {
Neutralino.app.exit();
});
NeutralinoJS offers a simpler, web-based approach with easier development and deployment, while NodeGUI provides native performance and advanced UI capabilities at the cost of increased complexity. Choose based on your project requirements and development preferences.
Create beautiful applications using Go
Pros of Wails
- Better performance due to native Go bindings
- More mature ecosystem with extensive documentation and examples
- Built-in tooling for packaging and distribution
Cons of Wails
- Larger application size due to Go runtime
- Steeper learning curve for developers unfamiliar with Go
- Less cross-platform compatibility compared to Neutralino
Code Comparison
Neutralino (JavaScript):
Neutralino.os.showMessageBox('Welcome', 'Hello Neutralino!');
Wails (Go):
runtime.MessageDialog(ctx, runtime.MessageDialogOptions{
Title: "Welcome",
Message: "Hello Wails!",
})
Both Neutralinojs and Wails are frameworks for building cross-platform desktop applications using web technologies. Neutralino focuses on lightweight, portable applications with a small footprint, while Wails leverages Go's performance and ecosystem for more robust applications.
Neutralino uses a lightweight native runtime and communicates with it via JavaScript, making it easier for web developers to transition. Wails, on the other hand, uses Go as the backend language, providing better performance but requiring knowledge of Go programming.
Wails offers more comprehensive tooling and documentation, making it easier to package and distribute applications. However, this comes at the cost of larger application sizes due to the inclusion of the Go runtime.
Neutralino has better cross-platform compatibility, running on more operating systems, while Wails primarily targets Windows, macOS, and Linux.
Convert
designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME

Neutralinojs is a lightweight and portable desktop application development framework. It lets you develop lightweight cross-platform desktop applications using JavaScript, HTML and CSS. Apps built with Neutralinojs can run on Linux, macOS, Windows, Web, and Chrome. Also, you can extend Neutralinojs with any programming language (via extensions IPC) and use Neutralinojs as a part of any source file (via child processes IPC).
- Neutralinojs vs. Electron, NW.JS, Tauri, NodeGui, Flutter, .Net MAUI, Wails
- Roadmap 2025
- Release notes
Get started with the neu CLI:
# Creating a new app
npm i -g @neutralinojs/neu
neu create hello-world
cd hello-world
neu run
# Building your app (No compilation - takes less than a second)
neu build
You can use your favorite frontend frameworks:
# Creating a new React-based app
neu create hello-react -t codezri/neutralinojs-react
Start building apps: neutralino.js.org/docs
Why Neutralinojs?
In Electron and NWjs, you have to install NodeJs and hundreds of dependency libraries. Embedded Chromium and Node make simple apps bloaty. Neutralinojs offers a lightweight and portable SDK which is an alternative for Electron and NW.js. Neutralinojs doesn't bundle Chromium and uses the existing web browser library in the operating system (Eg: gtk-webkit2 on Linux). Neutralinojs implements a WebSocket connection for native operations and embeds a static web server to serve the web content. Also, it offers a built-in JavaScript client library for developers.
Ask questions on StackOverflow using the tag neutralinojs
Contributing
Please check the contribution guide. We use GitHub Discussions and Discord for quick discussions.
Neutralinojs contributors:
Image created with contributors-img.
Subprojects
- Builds are powered by BuildZri
- Releases are powered by ReleaseZri
Sponsors and Donators
Organizations and individuals support Neutralinojs development. See: https://codezri.org/sponsors
If you like to support our work, you can donate to Neutralinojs via Patreon or GitHub Sponsors.
Licenses and Copyrights
- Neutralinojs core: MIT. Copyright (c) 2025 Neutralinojs and contributors.
- C++ websocket client/server library: BSD-3-Clause from zaphoyd/websocketpp. Copyright (c) 2014, Peter Thorson. All rights reserved.
- JSON parser library: MIT from nlohmann/json. Copyright (c) 2013-2022 Niels Lohmann.
- Cross-platform webview library: MIT from webview/webview. Copyright (c) 2017 Serge Zaitsev.
- Cross-platform tray library: MIT from zserge/tray. Copyright (c) 2017 Serge Zaitsev.
- Cross-platform GUI dialogs library: WTFPL from samhocevar/portable-file-dialogs. Copyright (c) 2018â2020 Sam Hocevar
- Base64 encoder/decoder library: MIT from tobiaslocker/base64. Copyright (c) 2019 Tobias Locker.
- Cross-platform known platform directories API: MIT from sago007/PlatformFolders. Copyright (c) 2015 Poul Sander.
- C++ logging library: MIT from amrayn/easyloggingpp. Copyright (c) 2012-2018 Amrayn Web Services. Copyright (c) 2012-2018 @abumusamq
- Cross-platform process library: MIT from eidheim/tiny-process-library. Copyright (c) 2015-2020 Ole Christian Eidheim.
- Asio standalone C++ library: Boost License v1.0 from chriskohlhoff/asio. Copyright (c) 2003-2021 Christopher M. Kohlhoff
- Cross-platform C++ clipboard library: MIT from dacap/clip. Copyright (c) 2015-2021 David Capello
- Cross-platform C++ system information library: CC0 1.0 Universal from ThePhD/infoware. Written in 2016-2020 by nabijaczleweli and ThePhD
- Cross-platform C++ filesystem watcher library: MIT from SpartanJ/efsw. Copyright (c) 2020 MartÃn Lucas Golini
- Logo design credits: IconsPng. Copyright free as mentioned on their website.
Top Related Projects
Build smaller, faster, and more secure desktop and mobile applications with a web frontend.
:electron: Build cross-platform desktop apps with JavaScript, HTML, and CSS
Call all Node.js modules directly from DOM/WebWorker and enable a new way of writing applications with all Web technologies.
:zap: Native, high-performance, cross-platform desktop apps - built with Reason!
A library for building cross-platform native desktop applications with Node.js and CSS 🚀. React NodeGui : https://react.nodegui.org and Vue NodeGui: https://vue.nodegui.org
Create beautiful applications using Go
Convert
designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot