Neutralinojs is a lightweight and portable desktop application development framework

Overview

GitHub (pre-)release GitHub last commit Build status FOSSA Status

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).

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

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 tag neutralinojs

Contributing

Please check the contribution guide. We use GitHub Discussions, Slack, and Discord for quick discussions.

Neutralinojs contributors:

Image created with contributors-img.

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.

Become a Patreon

Licenses and Copyrights

  • Neutralinojs core: MIT. Copyright (c) 2021 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-2021 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 [email protected]
  • 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 (chris at kohlhoff dot com)
  • Cross-platform C++ clipboard library: MIT from dacap/clip. Copyright (c) 2015-2021 David Capello
  • Logo design credits: IconsPng. Copyright free as mentioned in their website.

Complete license details

FOSSA Status

Issues
  • Add time related information to `filesystem.getStats` result.

    Add time related information to `filesystem.getStats` result.

    Hello,

    with this issue I would like to propose an extension to the return object of the filesystem.getStats method. It currently only returns the information about the checked item being a file or directory and its size. In certain scenarios it would be great to also have access to the file creation and last file modification dates.

    So please consider extending the return object from the current state of

    {
      isDirectory: false,
      isFile: true,
      size: 11
    }
    

    to something like

    {
      isDirectory: false,
      isFile: true,
      size: 11,
      createdAt: 1650956224,
      modifiedAt: 1650956224
    }
    

    where both times are numbers represent the milliseconds in unix time.

    Thank you very much for considering this feature request. Keep on the great work on Neutralino!

    Sincerely, Happy Striker

    feature-request API 
    opened by HappyStriker 32
  • Native API calls not working

    Native API calls not working

    Describe the bug Trying to call any Native API is failing.

    To Reproduce Steps to reproduce the behavior:

    1. Use the following config:
    {
      "applicationId": "app.test.org",
      "version": "0.1.0",
      "defaultMode": "window",
      "documentRoot": "/dist/",
      "url": "/index.html",
      "enableServer": true,
      "enableNativeAPI": true,
      "tokenSecurity": "one-time",
      "modes": {
        "window": {
          "title": "testapp",
          "minWidth": 800,
          "minHeight": 500,
          "icon": "/src/assets/icons/icon.png",
          "enableInspector": true
        }
      },
      "cli": {
        "binaryName": "testapp",
        "resourcesPath": "/dist",
        "extensionsPath": "/extensions/",
        "clientLibrary": "/neutralino.js",
        "binaryVersion": "4.5.0",
        "clientVersion": "3.4.0"
      }
    }
    
    1. Try and run a native API like so:
    <button onClick={async () => {
                console.log("exiting app")
                await Neutralino.debug.log("testing")
                await Neutralino.app.exit()
    }}>
    

    Expected behavior The app to output "testing" to the debug log and to exit. Instead, only the console.log statement runs.

    Screenshots/Screen recordings image

    Specifications

    • OS: M1 Mac Monterrey
    • Neutralinojs version: v4.5.0
    • Neutralinojs client library version: v3.4.0
    • Neutralinojs CLI version: v9.3.0

    Additional context Maybe I don't understand the docs, but it seems like if enableNativeAPI is set to true, it should work? The docs mentioning this say that If you don't use any native API functions, you can set this option to true., which would be the opposite of what the name implies.

    bug question 
    opened by 0ctopirate 21
  • window.enableInspector

    window.enableInspector

    Is there a way to change "window.enableInspector" to false when I run neu build? (apart from editing neutralino.config.json)

    It would be nice to have an option like --window-enable-inspector in neu cli.

    opened by cer1969 19
  • v2.8.0: Can't 'run' or 'build' starter app on macOS

    v2.8.0: Can't 'run' or 'build' starter app on macOS

    Expected Behavior
    Using neutralinojs 2.8.0 / neutralino client 1.5.0 on macOS 10.15.7, I followed the First Neutralino App steps:

    yarn global add @neutralinojs/neu
    neu create firstneuapp
    cd firstneuapp
    neu run
    neu build --release
    

    I expected the app to run.

    Actual Behavior
    neu run flashes up the window and then exits. .dist/firstneuapp/firstneuapp-mac_x64 gives a segfault. See the output below.

    This is the same behavior as reported in #528, but that previous report was confused by a permissions error. This problem fails out-of-the box. As always, I will be happy to provide any additional debugging info. Thanks.

    Specifications

    • NeutralinoJs Version: [2.8.0]
    • NeutralinoJs CLI version: [1.5.0]
    • Platform: [macOS 10.15.7]
    √ github % yarn global add @neutralinojs/neu
    yarn global v1.22.11
    warning package.json: No license field
    [1/4] πŸ”  Resolving packages...
    [2/4] 🚚  Fetching packages...
    [3/4] πŸ”—  Linking dependencies...
    [4/4] πŸ”¨  Building fresh packages...
    success Installed "@neutralinojs/[email protected]" with binaries:
          - neu
    ✨  Done in 4.17s.
    √ github % neu create firstneuapp
    Downloading minimal template to firstneuapp directory...
    Extracting template zip file..
    Downloading Neutralinojs binaries..
    Extracting zip file..
    Finalizing and cleaning temp. files.
    Downloading the Neutralinojs client..
    Finalizing and cleaning temp. files.
    
    ----
    Enter 'cd firstneuapp && neu run' to run your application.
      _   _            _             _ _             _
     | \ | | ___ _   _| |_ _ __ __ _| (_)_ __   ___ (_)___
     |  \| |/ _ \ | | | __| '__/ _` | | | '_ \ / _ \| / __|
     | |\  |  __/ |_| | |_| | | (_| | | | | | | (_) | \__ \
     |_| \_|\___|\__,_|\__|_|  \__,_|_|_|_| |_|\___// |___/
                                                  |__/
    √ github % cd firstneuapp
    √ firstneuapp % neu version
      _   _            _             _ _             _
     | \ | | ___ _   _| |_ _ __ __ _| (_)_ __   ___ (_)___
     |  \| |/ _ \ | | | __| '__/ _` | | | '_ \ / _ \| / __|
     | |\  |  __/ |_| | |_| | | (_| | | | | | | (_) | \__ \
     |_| \_|\___|\__,_|\__|_|  \__,_|_|_|_| |_|\___// |___/
                                                  |__/
    --- Global ---
    Neutralinojs binaries: v2.8.0
    Neutralinojs client: v1.5.0
    neu CLI: v6.2.0
    
    --- Project: firstneuapp (js.neutralino.sample) ---
    Neutralinojs binaries: v2.8.0
    Neutralinojs client: v1.5.0
    √ firstneuapp % neu run
    Starting process: neutralino-mac_x64  --load-dir-res --path=. --debug-mode
    devAPIServer listening at http://localhost:5050
    neutralino-mac_x64 was stopped with error code null
    √ firstneuapp % neu build --release
    Bundling app...
    Generating res.neu...
    Copying binaries...
      _   _            _             _ _             _
     | \ | | ___ _   _| |_ _ __ __ _| (_)_ __   ___ (_)___
     |  \| |/ _ \ | | | __| '__/ _` | | | '_ \ / _ \| / __|
     | |\  |  __/ |_| | |_| | | (_| | | | | | | (_) | \__ \
     |_| \_|\___|\__,_|\__|_|  \__,_|_|_|_| |_|\___// |___/
                                                  |__/
    Please check the ./dist directory!
    √ firstneuapp % ./dist/firstneuapp/firstneuapp-mac_x64
    zsh: segmentation fault  ./dist/firstneuapp/firstneuapp-mac_x64
    ?139 firstneuapp %
    
    bug platform: Darwin 
    opened by richb-hanover 18
  • Missing permission to execute the native method

    Missing permission to execute the native method

    Expected Behavior
    Should throw no error at all-

    Actual Behavior
    Throws error saying: Uncaught (in promise) {"code":"NE_RT_NATPRME","message":"Missing permission to execute the native method"}

    Steps to Reproduce the Problem
    No real reproducing step. This happened after a fresh install.

    Specifications

    • NeutralinoJs Version: v3.1.0
    • NeutralinoJs CLI version: v4.2.0
    • Platform: Windows 64bit
    opened by jonasmoeller 17
  • [SUGGESTION] Allow file filtering in Open Dialog

    [SUGGESTION] Allow file filtering in Open Dialog

    Expected Behavior
    Currently. the showDialogOpen dialog will show all files in all folders. It would be really nice to have the ability to add a filter, so that it only shows certain extensions.

    The api function could be:

    let response = await Neutralino.os.showDialogOpen({
      title: 'Select a file',
      isDirectoryMode: false,
      filter: ["txt", "bmp", "myextension"]
    });
    

    As far as I know, all operating systems include a filter feature for these dialogs, so it shouldn't be impossible to add

    feature-request 
    opened by hypherionmc 17
  • Getting Started: Can't 'run' or 'build' starter app on macOS

    Getting Started: Can't 'run' or 'build' starter app on macOS

    Using neutralinojs 2.4.0 / 5.1.3 on macOS 10.15.7, I followed the First Neutralino App steps:

    yarn global add @neutralinojs/neu
    neu create firstneuapp
    cd firstneuapp
    neu run
    neu build --release
    

    @shalithasuranga I am sorry to report that I received several error messages with the 5.1.3 build:

    1. neu run flashed up the GUI very briefly, and gave a message Application was terminated.
    2. neu build --release gave Error: EACCES: permission denied, copyfile 'bin/neutralino-mac' -> 'dist/firstneuapp/firstneuapp-mac' (This looks similar to neutralinojs/neutralinojs-cli#54 .)
    3. Applying chmod 764 bin/neutralino-mac as suggested in a comment permits the build step to work, but...
    4. Running ./dist/firstneuapp/firstneuapp-mac gives zsh: segmentation fault ./dist/firstneuapp/firstneuapp-mac

    Here is the full output

    √ github % yarn global add @neutralinojs/neu
    yarn global v1.22.10
    warning package.json: No license field
    [1/4] πŸ”  Resolving packages...
    [2/4] 🚚  Fetching packages...
    [3/4] πŸ”—  Linking dependencies...
    [4/4] πŸ”¨  Building fresh packages...
    success Installed "@neutralinojs/[email protected]" with binaries:
          - neu
    ✨  Done in 3.02s.
    √ github % neu version
      _   _            _             _ _             _
     | \ | | ___ _   _| |_ _ __ __ _| (_)_ __   ___ (_)___
     |  \| |/ _ \ | | | __| '__/ _` | | | '_ \ / _ \| / __|
     | |\  |  __/ |_| | |_| | | (_| | | | | | | (_) | \__ \
     |_| \_|\___|\__,_|\__|_|  \__,_|_|_|_| |_|\___// |___/
                                                  |__/
    --- Global ---
    Neutralinojs binaries: v2.4.0
    Neutralinojs client: v1.0.0
    neu CLI: v5.1.3
    INFO Run this command inside your project directory to get project specific Neutralinojs version.
    √ github % neu create firstneuapp
    Downloading minimal template to firstneuapp directory...
    Extracting template zip file..
    Downloading Neutralinojs binaries..
    Extracting zip file..
    Finalizing and cleaning temp. files.
    Downloading the Neutralinojs client..
    Finalizing and cleaning temp. files.
    
    ----
    Enter 'cd firstneuapp && neu run' to run your application.
      _   _            _             _ _             _
     | \ | | ___ _   _| |_ _ __ __ _| (_)_ __   ___ (_)___
     |  \| |/ _ \ | | | __| '__/ _` | | | '_ \ / _ \| / __|
     | |\  |  __/ |_| | |_| | | (_| | | | | | | (_) | \__ \
     |_| \_|\___|\__,_|\__|_|  \__,_|_|_|_| |_|\___// |___/
                                                  |__/
    √ github % cd firstneuapp
    √ firstneuapp % neu run
    Application was terminated.
    √ firstneuapp % neu build --release
    Bundling app...
    Generating res.neu...
    Copying binaries...
    Error: EACCES: permission denied, copyfile 'bin/neutralino-mac' -> 'dist/firstneuapp/firstneuapp-mac'
        at Object.copyFileSync (fs.js:1941:3)
        at copyFile (/Users/richb/.config/yarn/global/node_modules/fs-extra/lib/copy-sync/copy-sync.js:67:6)
        at onFile (/Users/richb/.config/yarn/global/node_modules/fs-extra/lib/copy-sync/copy-sync.js:53:25)
        at getStats (/Users/richb/.config/yarn/global/node_modules/fs-extra/lib/copy-sync/copy-sync.js:48:44)
        at startCopy (/Users/richb/.config/yarn/global/node_modules/fs-extra/lib/copy-sync/copy-sync.js:38:10)
        at handleFilterAndCopy (/Users/richb/.config/yarn/global/node_modules/fs-extra/lib/copy-sync/copy-sync.js:33:10)
        at Object.copySync (/Users/richb/.config/yarn/global/node_modules/fs-extra/lib/copy-sync/copy-sync.js:26:10)
        at Object.module.exports.bundleApp (/Users/richb/.config/yarn/global/node_modules/@neutralinojs/neu/src/modules/bundler.js:34:13)
        at processTicksAndRejections (internal/process/task_queues.js:93:5)
        at async Command.<anonymous> (/Users/richb/.config/yarn/global/node_modules/@neutralinojs/neu/src/commands/build.js:11:13) {
      errno: -13,
      syscall: 'copyfile',
      code: 'EACCES',
      path: 'bin/neutralino-mac',
      dest: 'dist/firstneuapp/firstneuapp-mac'
    }
      _   _            _             _ _             _
     | \ | | ___ _   _| |_ _ __ __ _| (_)_ __   ___ (_)___
     |  \| |/ _ \ | | | __| '__/ _` | | | '_ \ / _ \| / __|
     | |\  |  __/ |_| | |_| | | (_| | | | | | | (_) | \__ \
     |_| \_|\___|\__,_|\__|_|  \__,_|_|_|_| |_|\___// |___/
                                                  |__/
    Please check the ./dist directory!
    √ firstneuapp % ll
    total 32
    drwxr-xr-x   11 richb  staff   352B Jul  4 07:34 .
    drwxr-xr-x  308 richb  staff   9.6K Jul  4 07:34 ..
    -rw-r--r--    1 richb  staff   185B Jul  4 07:34 .gitignore
    -rw-r--r--    1 richb  staff   1.1K Jul  4 07:34 LICENSE
    -rw-r--r--    1 richb  staff   515B Jul  4 07:34 README.md
    drwxr-xr-x    6 richb  staff   192B Jul  4 07:34 bin
    drwxr-xr-x    3 richb  staff    96B Jul  4 07:34 dist
    -rw-r--r--    1 richb  staff   815B Jul  4 07:34 neutralino.config.json
    -rw-r--r--    1 richb  staff     0B Jul  4 07:34 neutralinojs.log
    drwxr-xr-x    6 richb  staff   192B Jul  4 07:34 resources
    drwxr-xr-x    4 richb  staff   128B Jul  4 07:34 temp
    √ firstneuapp % ll dist
    total 0
    drwxr-xr-x   3 richb  staff    96B Jul  4 07:34 .
    drwxr-xr-x  11 richb  staff   352B Jul  4 07:34 ..
    drwxr-xr-x   5 richb  staff   160B Jul  4 07:34 firstneuapp
    √ firstneuapp % ll dist/firstneuapp
    total 4664
    drwxr-xr-x  5 richb  staff   160B Jul  4 07:34 .
    drwxr-xr-x  3 richb  staff    96B Jul  4 07:34 ..
    -rw-r--r--  1 richb  staff   753K Jul  4 07:34 firstneuapp-linux
    -rw-r--r--  1 richb  staff   1.5M Jul  4 07:34 firstneuapp-win.exe
    -rw-r--r--  1 richb  staff    32K Jul  4 07:34 res.neu
    √ firstneuapp % ll bin
    total 7384
    drwxr-xr-x   6 richb  staff   192B Jul  4 07:34 .
    drwxr-xr-x  11 richb  staff   352B Jul  4 07:34 ..
    -rw-r--r--   1 richb  staff   418K Jul  4 07:34 WebView2Loader.dll
    -rw-r--r--   1 richb  staff   753K Jul  4 07:34 neutralino-linux
    --wxrw--wt   1 richb  staff   970K Jul  4 07:34 neutralino-mac
    -rw-r--r--   1 richb  staff   1.5M Jul  4 07:34 neutralino-win.exe
    
    opened by richb-hanover 16
  • core-linux and core-macos fork sources are GPL-3.0 licensed.

    core-linux and core-macos fork sources are GPL-3.0 licensed.

    As far as I know, you can't re-license the core-linux and core-macos codebases (even if it got modified as long as you are using some of the original code) into MIT. I don't see any credits to the original author except for the link below. Original repository

    referenced in here https://github.com/neutralinojs/neutralinojs/tree/master/core-linux#neutralino-server-for-linux

    opened by ghost 16
  • Refactor Neutralino into single code base

    Refactor Neutralino into single code base

    Neutralino was initially developed as a POC. So there are two implementations for Linux and Windows. There is a plan to rewrite Neutralino in a single codebase by following a good coding pattern.

    enhancement architecture 
    opened by shalithasuranga 15
  • Mac os debug error

    Mac os debug error

    Expected Behavior
    console no error。

    Actual Behavior
    image

    Steps to Reproduce the Problem

    1. npm install -g @neutralinojs/neu
    2. neu create myapp
    3. cd myapp
    4. neu run
    5. inspect element ζˆͺ屏2021-07-03 δΈ‹εˆ3 12 59
    6. error image

    Specifications

    • NeutralinoJs Version: [Version number of NeutralinoJs framework] image

    • NeutralinoJs CLI version: [neu-cli version] image

    • Platform: [Platform specifications]
      image

    opened by 25juan 14
  • FileOpen / Save dialogs open behind main window

    FileOpen / Save dialogs open behind main window

    Expected Behavior
    When opening an OpenFile or SaveFile dialog, I expect it to open above the main window so that user can see it has opened and interact with it.

    Actual Behavior
    The dialogs open behind the main window and you don't notice them unless you see the flashing icon on the taskbar

    Steps to Reproduce the Problem

    1. Use a call to open an OpenFile dialog or SaveFile dialog

    Suggestions Maybe add a flag to allow you to change this behavior or just have it open above the window by default.

    Specifications

    • NeutralinoJs Version: [Version number of NeutralinoJs framework] 2.2.0

    • NeutralinoJs CLI version: [neu-cli version] Not sure? Would probably also be 2.2.0

    • Platform: [Platform specifications]

      • OS: Windows 10 Pro 64-bit
      • CPU: AMD
    opened by hypherionmc 14
  • Remove --enable-automation Chrome flag to fix #915.

    Remove --enable-automation Chrome flag to fix #915.

    This PR removes the --enable-automation Chrome flag. This removes the "Chrome is being controlled by automated test software" infobar. This fixes issue #915.

    opened by sergei202 0
  • gRPC support in Neutralino

    gRPC support in Neutralino

    Hello,

    I wanted to know if gRPC can be used with neutralinojs to establish communication with other processes. As far as I know, gRPC supports node.js. But does it work integrated with Neutralino.

    feature-request 
    opened by yash-2209 0
  • Under Linux workflow to run test suite, error occured

    Under Linux workflow to run test suite, error occured

    Describe the bug

    Please checkline no: 39, 40, 41. This is probably because an instance of an app starts on the same port which already has another app running.

    Expected behavior

    The test suite should be configured to first test a feature, then exit the app and thereafter run other tests. That is, the port should be freed up before another instance starts.

    bug 
    opened by pathange-s 0
  • Fix #930

    Fix #930

    :warning: Not Complete, Under Development :warning:

    Description

    • lib/webview/webview.h - Hide The Window By Default
    • api/window/window.cpp - Show The Window (If hidden is set to false in config` Because it is hidden by default.

    How to test it

    • Set The Hidden Property in Configuration To true
    • Launch The Program

    Bugs

    • After Window is Shown using window.show API, nothing is rendered Except White Screen.
    opened by pegvin 0
  • window.create() not available to extensions

    window.create() not available to extensions

    Is your feature request related to a problem? Please describe. I have a complex extension that needs to be able to open windows. But the web socket doesn't accept "window.create"

    Describe the solution you'd like Add window.create to the router

    Describe alternatives you've considered I can in theory do this by broadcasting a message and having an existing window listen for that and call the JS method. But this is awkward, and requires a specific window to know it's the one responsible for doing the opening.

    feature-request 
    opened by icambron 0
Releases(nightly)
  • nightly(Jun 23, 2022)

    :warning: Nightly build: This nighly-release may contain experimental features and breaking changes.

    What's new

    No changes β€” this version is similar to the previous version

    Update the config file option cli.binaryVersion with nightly and enter neu update to fetch this version.

    Get started: https://neutralino.js.org/docs


    This release was auto-generated by ReleaseZri :rocket:

    Download Neutralinojs

    Source code(tar.gz)
    Source code(zip)
    neutralinojs-nightly.zip(2.73 MB)
  • v4.6.0(May 27, 2022)

    What's new

    API: Process spawning API

    We have os.execCommand for launching processes, but it's synchronous, meaning, the developer has to wait unti process completion to receive pid, stdOut and stdErr. execCommand is not suitable for long-running processes. The new spawning API offers API functions for handling long-running processes in a multi-threaded way.

    • os.spawnProcess(command): Spawns a process and returns id (A virtual Neutralino-scoped pid) and pid (Operating system-level pid).
    • os.getSpawnedProcesses(): Returns a list of spawned processes.
    • os.updateSpawnedProcess(id, action, data): Sends an action event for the spawned process. Supports the following actions:
      • stdIn: Sends a string via the standard input stream. data is the input string.
      • stdInEnd: Closes the standard input stream.
      • exit: Terminates the spawned process.

    Core: events

    • spawnedProcess: Dispatched when there is a change in the spawned process. CustomEvent gets triggered with the following object:
    {
      id: <id>,
      pid: <pid>,
      action: <action>,
      data: <data>
    }
    

    Available actions:

    • stdOut: Outputs standard output data. data contains the standard output payload.
    • stdErr: Outputs standard error data. data contains the standard error payload.
    • exit: Notified when the process terminates. data contains the process exit code.

    DevOps

    • Add official Linux ARM (armhf and arm64) binary build support for the standard release workflow and nightly build.

    API: filesystem

    • Expose createdAt and modifiedAt JavaScript timestamps via the filesystem.getStats function.

    Bugfixes/improvements

    • Hide the .storage directory (Neutralinojs storage location) on Windows.
    • Support using query parameters in resources URLs. i.e., index.html?v=2.0 is supported, but caching is not yet implemented.
    • Show a user-friendly error message for Neutralinojs server initialization failures.

    Update the config file option cli.binaryVersion with 4.6.0 and enter neu update to fetch this version.

    Get started: https://neutralino.js.org/docs


    This release was auto-generated by ReleaseZri :rocket:

    Download Neutralinojs

    Source code(tar.gz)
    Source code(zip)
    neutralinojs-v4.6.0.zip(2.32 MB)
  • v4.5.0(Apr 21, 2022)

    What's new

    Core: events

    • Added windowFocus and windowBlur native events.

    DevOps

    • Use BuildZri for C++ build automation.
    • Implement a new workflow for nightly releases. Developers can get the nightly release binaries via the nightly version tag.

    Bugfixes/improvements

    • Search and dynamically load app indicator libraries on Linux. This enhancement supports Neutralinojs to start without a crash when there is no app indicator library present on the system.
    • Throw NE_OS_TRAYIER from the os.setTray function for initialization failures.
    • Fix binary file write error on Windows with the filesystem.writeBinaryFile function. This was fixed by using LF as the line breaker on all platforms as a portable solution. If the developer needs CRLF on Windows (or CR on Darwin), the developer needs to handle it explicitly with NL_OS.

    Core: global variables

    • Add NL_COMMIT to hold framework's release commit. This is helpful to find the nightly release's code snapshot.

    Update the config file option cli.binaryVersion with 4.5.0 and enter neu update to fetch this version.

    Get started: https://neutralino.js.org/docs


    This release was auto-generated by ReleaseZri :rocket:

    Download Neutralinojs

    Source code(tar.gz)
    Source code(zip)
    neutralinojs-v4.5.0.zip(1.86 MB)
  • v4.4.0(Mar 10, 2022)

    What's new

    API: window

    • Add window.getPosition to get the current window coordinates.

    API: filesystem

    • Add filesystem.appendFile to append text content to a file. Thrown errors are similar to the filesystem.writeFile function.
    • Add filesystem.appendBinaryFile to append binary content to a file. Thrown errors are similar to the filesystem.writeBinaryFile function.

    Dependencies

    • Use ayatana-appindicator3-0.1 instead of appindicator3-0.1 (Marked as obsolete in Debian packages)

    Bugfixes/improvements

    • Dynamically call SetProcessDpiAwarenessContext function to support previous Windows versions.
    • Display the native method name with the NE_RT_NATPRME error payload.

    Update the config file option cli.binaryVersion with 4.4.0 and enter neu update to fetch this version.

    Get started: https://neutralino.js.org/docs


    This release was auto-generated by ReleaseZri :rocket:

    Download Neutralinojs

    Source code(tar.gz)
    Source code(zip)
    neutralinojs-v4.4.0.zip(1.84 MB)
  • v4.3.0(Feb 4, 2022)

    What's new

    Core: auth

    • Added tokenSecurity to the configuration to improve the security of NL_TOKEN. Accepted values are none and one-time. If none is set, Neutralinojs server will always expose NL_TOKEN for any application instance, so you can open Neutralinojs apps from browser directly. If one-time (recommended) is set, Neutralinojs server expose NL_TOKEN only once and client persists the token in sessionStorage, so all other clients that acces the app after the initial client will get an auth error message (Displayed to the user via HTML).

    API: window

    • window.setAlwaysOnTop(bool) was added.
    • window.getSize was added.

    Core: global variables

    • Added NL_EXTENABLED which returns true if extensions are enabled. It is used to check extensions status faster during initialization process.

    Bugfixes

    • Fixed the file dialog order issue on Windows.
    • Removed tray icon when the application exits.

    Update the config file option cli.binaryVersion with 4.3.0 and enter neu update to fetch this version.

    Get started: https://neutralino.js.org/docs


    This release was auto-generated by ReleaseZri :rocket:

    Download Neutralinojs

    Source code(tar.gz)
    Source code(zip)
    neutralinojs-v4.3.0.zip(1.85 MB)
  • v4.2.0(Jan 22, 2022)

    What's new

    API: clipboard

    • Add clipboard API for all platforms. Supports reading and writing text in the system clipboard.

    Core: configuration

    • Accept chrome-related CLI args: --chrome-width, --chrome-height, and --chrome-args.
    • Accept --neu-dev-extension to enable devtools connections (For internal usages with CLI).
    • Accept custom HTTP headers via serverHeaders option.

    API: global variables

    • Added NL_RESMODE to get details about application resources source. Returns bundle if resources are loaded from resources.neu. Otherwise, returns directory.

    Bugfixes

    • Fix chrome mode user data dir issue (Support paths with spaces).
    • Fix browser mode's shutdown issue with neu CLI.

    Update the config file option cli.binaryVersion with 4.2.0 and enter neu update to fetch this version.

    Get started: https://neutralino.js.org/docs


    This release was auto-generated by ReleaseZri :rocket:

    Download Neutralinojs

    Source code(tar.gz)
    Source code(zip)
    neutralinojs-v4.2.0.zip(1.84 MB)
  • v4.1.0(Dec 28, 2021)

    What's new

    API: window

    • window.getTitle returns the current native window title.

    API: os

    • Remove NE_OS_ENVNOEX from os.getEnv and return an empty string if environment variable is not defined.

    Core: Chrome mode

    • Now you can run Neutralinojs apps as Chrome apps via the chrome mode.

    Core: configuration

    • Getting chrome mode config from modes.chrome. Added height, width, and args specially for the chrome mode.

    Get started: https://neutralino.js.org/docs

    Download Neutralinojs

    Source code(tar.gz)
    Source code(zip)
    neutralinojs-v4.1.0.zip(1.83 MB)
  • v4.0.0(Dec 11, 2021)

    Milestone v4.0.0 was closed with 31 issues.

    What's new

    API: os.execCommand

    • Renamed shouldRunInBackground option to background.
    • Supports stdIn as an optional input.
    • Returns multiple values: stdOut, stdErr, pid, and exitCode.

    Core: API extensions

    • Config file supports new extensions array globally or in a specific mode.
    • Neutralino spawns extension processes based on extensions array.
    • Neutralino doesn't send kill signals to extension processes. The extension developer needs to stop processes properly.
    • extension setting has 4 fields: id, command, commandLinux,commandDarwin, and commandWindows.
    • The command's (platform-specific command's) value accepts ${NL_PATH} global variable.
    • Each extension process instance is called with three CLI args: --nl-port={}, --nl-extension-id={} and --nl-token={}
    • Enable/disable extensions with enableExtensions config.

    Core: Static server

    • Supports setting document root (with documentRoot) via config. Now, it's possible to launch the app without a subdirectory in the URL.

    Core: Community driver processes

    Now developers can use Neutralinojs as a part of their software with any programming language by spawning Neutralinojs as a child process. Use exportAuthInfo to write auth details to ${NL_PATH}/.tmp/auth_info.json. Then the parent process can pick up access details there. Note that WebSocket communication needs to be initiated via extensions API/loader.

    API: app.broadcast

    • Sends an event to all app clients. This method is for extension developers.

    API: events.broadcast

    • Sends an event to all clients (apps and extensions). Useful for notifying important general events.

    API: extensions

    • dispatch: Sends an event to a specific extension.
    • broadcast: Sends an event to all connected extensions. Useful for sending shutdown signals.
    • getStats: Returns details about loaded extensions and connected extensions.

    API: updater

    • checkForUpdates: Send a request to a seed URL (JSON) and fetch update details.
    • install: Install updates based on the currently downloaded manifest.

    Events

    • appClientConnect and appClientDisconnect: Occurs when a new app instance is launched and closed respectively.
    • extClientConnect and extClientDisconnect: Occurs when a new extension is connected and disconnected respectively.
    • extensionReady can be used to implement immediate extension calls. This is implemented from the client-side with extensions.getStats and extClientConnect. This event gurantees that it will be triggered regardless of the extension's start time.

    Error codes

    • NE_EX_EXTNOTC: Thrown by extensions.dispatch if the target extension is not connected.
    • NE_UP_CUPDMER: Thrown by updater.checkForUpdates if the JSON update manifest is invalid or applicationId is not matching.
    • NE_UP_CUPDERR: Thrown by updater.checkForUpdates if the updater API cannot fetch the manifest.
    • NE_UP_UPDNOUF: Thrown by updater.install when the update manifest is not loaded.
    • NE_UP_UPDINER: Thrown by updater.install for update installation errors.

    Bug fixes

    • Fix port 0 issue with modes. Earlier, if the developer sets port as 0 from a specific mode, the NL_PORT also becomes 0.
    • Fix an issue with writeToLogFile config option. Earlier, the log file was created even this option is set to false.

    Global variables

    • NL_APPVERSION: Value of the version key in the config file.

    Get started: https://neutralino.js.org/docs

    Download Neutralinojs

    Source code(tar.gz)
    Source code(zip)
    neutralinojs-v4.0.0.zip(1.81 MB)
  • v3.0.0(Oct 18, 2021)

    Milestone v3.0.0 was closed with 16 issues.

    What's new

    • New JavaScript API spec implementation.
    • Using WebSocket messages for native calls.
    • Error codes to identify failed native calls.
    • Static server improvements (404, support any mime-type, etc)
    • Add a way to close the window when a remote URL is loaded via the exitProcessOnClose config.
    • os.getPath(name) to get known platform-specific folders.
    • Support overriding root-level config properties from modes (Eg: One URL for browser mode and another for window mode).
    • New library for dialog boxes.
    • New config property (logging) for enabling/disabling logging feature.
    • New events: ready, clientConnect and clientDisconnect
    • Supports client library v2.0.0
    • Bugfixes and enhancements.

    Get started: https://neutralino.js.org/docs

    Download Neutralinojs

    Source code(tar.gz)
    Source code(zip)
    neutralinojs-v3.0.0.zip(2.48 MB)
  • v2.8.0(Sep 18, 2021)

  • v2.7.0(Aug 27, 2021)

  • v2.6.0(Aug 5, 2021)

    Milestone v2.6.0 was closed with 5 issues.

    What's new

    • Draggable region support.
    • Allow wildcard * in block/allow lists.
    • nativeAllowList in config.
    • Allow filtering with Neutralino.os.showDialogOpen
    • Include 32-bit (ia32/x86_32) Linux binary in releases.
    • Enable 32-bit builds on all platforms (build from source).

    Get started: https://neutralino.js.org/docs

    Download Neutralinojs

    Source code(tar.gz)
    Source code(zip)
    neutralinojs-v2.6.0.zip(1.52 MB)
  • v2.5.0(Jul 18, 2021)

  • v2.4.1(Jul 5, 2021)

  • v2.4.0(Jun 24, 2021)

  • v2.3.0(Jun 12, 2021)

  • v2.2.0(Jun 6, 2021)

  • v2.1.1(May 30, 2021)

  • v2.1.0(May 28, 2021)

  • v2.0.0(Mar 20, 2021)

  • v1.9.0(Mar 5, 2021)

    Milestone v1.9.0 was closed with 8 issues.

    What's new

    Highlights

    • Native message boxes API was added.
    • Resolved path issues. Now users can launch Neutralinojs apps from any working directory.
    • Improvements are done in the source code. Refactored the codebase by moving platform-independent code to a directory.
    • Bug fixes.

    Native message boxes API

    Now developers can have native message boxes in their Neutralinojs applications via the Neutralino.os.showMessageBox(Object options) method. The options object should contain the following properties.

    • string title: Title of the message box.
    • string content: Message box's content.
    • string type: Type of the message box. Accepted values are INFO, WARN, ERROR, and QUESTION.

    Neutralinojs server will include the boolean yesClicked property into the response only for the question-type message boxes.

    Example:

    const options = {title: "Hello", content: "This is an example", type: "INFO"};
    Neutralino.os.showMessageBox(options, function() { }, function() { });
    

    Please notice that the macOS version of Neutralino is not having the most features. We will try to bring it to the same level soon.

    Download Neutralinojs

    Source code(tar.gz)
    Source code(zip)
    neutralinojs-v1.9.0.zip(2.09 MB)
  • v1.8.0(Feb 13, 2021)

    Milestone v1.8.0 was closed with 5 issues.

    What's new

    Highlights

    • Resources loading from res.neu archive.
    • --load-dir-res pre-defined command line argument
    • Bugfixes and improvements were done to the Windows and Linux versions.

    res.neu

    When you release your application with the neu release command, all application resources will be bundled into the res. neu file. Therefore, now your final application bundle has platform-specific binaries and one resource file. If you need to load resources from the app directory, you can provide the --load-dir-res command-line argument.

    Please notice that the macOS version of Neutralino is not having the most features. We will try to bring it to the same level soon.

    Source code(tar.gz)
    Source code(zip)
    neutralinojs-v1.8.0.zip(1.98 MB)
  • v1.7.0(Jan 18, 2021)

    Milestone v1.7.0 was closed with 7 issues.

    What's new

    Highlights

    • Command-line arguments support.
    • Open a directory using the file-open dialog.
    • Adding support for the neu listen command.
    • Maximize-window option on the Windows platform.
    • Bugfixes and improvements were done to the Windows and Linux versions of Neutralinojs.

    Command-line arguments

    Now you can access an array of command-line arguments of the binary via NL_ARGS. --debug-mode is an in-built option for every Neutralinojs application. For now, it enables live reloading for developers.

    Directory selection dialog

    Now Neutralino.os.dialogOpen(options) will accept an object as the parameter. See the following example.

    Neutralino.os.dialogOpen({title: "My dialog", isDirectoryMode:true});
    

    Live-reload

    The neu listen command will enable the live reload feature for developers. When the application is launched via either neu listen command or --debug-mode option, a modification on theapp directory will automatically reload your application. Make sure your port 8080 is free before trying this feature.

    Please notice that the macOS version of Neutralino is not having the most features. We will try to bring it to the same level soon.

    Download Neutralinojs

    Source code(tar.gz)
    Source code(zip)
    neutralinojs-v1.7.0.zip(1.89 MB)
  • v1.6.0(Dec 15, 2020)

    Milestone v1.6.0 was closed with 5 issues.

    What's new

    Highlights

    • Native notifications
    • Support asset paths with spaces and other special characters.
    • Made window.iconfile property as an optional property.
    • Maximize option for the main window on Linux.

    Native notifications

    Each operating system has an option to display notifications. Neutralino.os.showNotification(properties, s, e) will show a notification on the current operating system.

    parameters

    properties accepts a JSON object with the options for displaying a notification.

    {
      "summary": "Title of the message",
      "body": "Content of the message"
    }
    

    s and e are usual callbacks for a generic Neutralinojs API function.

    Maximize option for the window mode

    window.maximize: <boolean> in settings.json

    If this option has true, the main window will be maximized at the startup of the application. Otherwise, it will use the given height and width. The default value is false.

    Example:

    {
        "appname": "myapp",
        "appport": "5006",
        "mode": "window",
        "url": "/",
        "window": {
            "title": "My app",
            "width": "1000",
            "height": "700",
            "maximize": true
        }
    }
    

    Please notice that the macOS version of Neutralino is not having the most features. We will try to bring it to the same level soon.

    Download Neutralinojs

    Source code(tar.gz)
    Source code(zip)
    neutralinojs-v1.6.0.zip(1.89 MB)
  • v1.5.0(Jun 14, 2020)

    Milestone v1.5.0 was closed with 10 issues.

    What's new

    • window.iconfile feature was added to macOs
    • Improvements done to Neutralino.filesystem.readFile for handling non-existent files.
    • Router module's MIME type handling code was refactored and .mp3 file support was added to all platforms.
    • Binary file serving issue was fixed on Windows
    • Custom URL navigation feature is introduced.

    Custom URL nagivation

    url: <path> in settings.json

    url setting value can be either / or a custom URL. This will be the entry point of Neutralino application. If / is provided, index.html will be served otherwise custom URL content will be served. Default value is /.

    Example:

    {
        "appname": "myapp",
        "appport": "5006",
        "mode": "window",
        "url": "/",
        "window": {
            "title": "My app",
            "width": "1000",
            "height": "700",
            "iconfile": "neutralino.png"
        }
    }
    

    Download Neutralinojs

    Source code(tar.gz)
    Source code(zip)
    neutralinojs-v1.5.0.zip(2.01 MB)
  • v1.4.0(May 3, 2020)

    Milestone v1.4.0 was closed with 11 issues.

    What's new

    • window.title option added. Older setting was used as a shared identifier for url path and title whereas now appname is kind of app id (won't support spaces). Thus, window.title refers to the Native window title which supports spaces etc.

    • More native window properties/configuration added.

    window.alwaysontop [bool] on all platforms

    If true window will appear always on top.

    window.borderless [bool] on all platforms

    If true title bar will be hidden and allows developer to make their own title bar using CSS.

    window.iconfile [string] on Windows and Linux

    Sets an image/icon for Native window and it will appear on the task bar of the operating system. Transparent .png is recommended.

    • NL_CWD global variable was added to all platforms. it has the current working directory.

    • Binary file support was added to all platforms. Eg: .png like images will be served by the Neutralino file server.

    • Quick build script was added to the macos as well. (bash build.sh macos to build and copy all the things to dist)

    Example settings.json structure for this version

    {
        "appname" : "myapp",
        "appport" : "5006",
        "mode" : "window",
        "window" : {
            "title": "My app",
            "width" : "1000",
            "height" : "700",
            "fullscreen" : false,
            "alwaysontop": true,
            "borderless": false,
            "iconfile": "neutralino.png"
        }
    }
    

    Download Neutralinojs

    Source code(tar.gz)
    Source code(zip)
    neutralinojs-v1.4.0.zip(1.69 MB)
  • v1.3.0(Dec 30, 2019)

    • Fixed build errors on Windows (filesystem headers related)
    • Neutralino.debug.log() for all platforms
    • Developer guide for Neutralino-mac was added to the README
    • Neutralino.app.exit() for all platforms
    • Typescript starter app
    • Full screen mode for all platforms

    Eg:-

    {
        "appname" : "myapp",
        "appport" : "5006",
        "mode" : "window",
        "window" : {
            "width" : "1000",
            "height" : "700",
            "fullscreen" : true
        }
    }
    

    Milestone v1.3.0

    Download Neutralinojs

    Source code(tar.gz)
    Source code(zip)
    neutralinojs-v1.3.0.zip(1.45 MB)
  • v1.2.0(Sep 22, 2019)

  • v1.1.0(Jan 20, 2019)

  • v1.0.8(Dec 12, 2018)

    This is a stable release of Neutralinojs

    What's new

    • Default app was updated
    • NL_VERSION global variable added
    • Neutralino mode changes
      • window - Runs on a native window
      • browser - Debug using a web browser
      • cloud - Runs as a server in background
    • Automatic ping feature(self shutdown) with browser mode
    • Neutralino was compared with Electron and NW.js
    • window mode was selected as default
    • neutralino.exe was updated with an icon and publisher details (can be modified using a resource editing tool)

    Bug fixes

    • There are several bug fixes and improvements
    Source code(tar.gz)
    Source code(zip)
    neutralinojs-v1.0.8.zip(1005.10 KB)
Owner
Neutralinojs
Portable and lightweight cross platform desktop app development framework
Neutralinojs
DeskGap is a framework for building cross-platform desktop apps with web technologies (JavaScript, HTML and CSS).

A cross-platform desktop app framework based on Node.js and the system webview

Wang, Chi 1.8k Jun 24, 2022
Electron framework lets you write cross-platform desktop applications using JavaScript, HTML and CSS.

?? Available Translations: ???? ???? ???? ???? ???? ???? ???? ???? . View these docs in other languages at electron/i18n. The Electron framework lets

Electron 102.3k Jun 28, 2022
Purely native C++ cross-platform GUI framework for Android and iOS development. https://www.boden.io

BODEN CROSS-PLATFORM FRAMEWORK Build purely native cross-platform experiences with Boden Website ⬑ Getting Started ⬑ API Reference ⬑ Guides ⬑ Twitter

Ashampoo Systems GmbH & Co KG 1.5k Jun 26, 2022
Arcan is a powerful development framework for creating virtually anything from user interfaces

Arcan is a powerful development framework for creating virtually anything from user interfaces for specialized embedded applications all the way to full-blown standalone desktop environments.

Bjorn Stahl 1.1k Jul 2, 2022
Build performant, native and cross-platform desktop applications with Node.js and CSS like styling. πŸš€

NodeGui Build performant, native and cross-platform desktop applications with Node.js and CSS like styling. ?? NodeGUI is powered by Qt5 ?? which make

NodeGui 7.7k Jun 25, 2022
Radio.Garden desktop app and game overlay

Radio.Garten A radio.garden desktop client and overlay written with SDL2 and ImGui Overlay Example Overlay Compatibility Please check the compatibilit

null 9 May 31, 2022
The Application Framework for the Orion Operating System

Welcome to OrionAPI. Luxury + Linux, for everyone. The Application Framework for the Orion Operating System This toolkit is in development and current

Rosetta H&S 21 Jan 19, 2022
AirPods desktop user experience enhancement program

AirPodsDesktop AirPods desktop user experience enhancement program

Sprite 193 Jun 27, 2022
Modern Window Sitter for X11 based Desktop Environments

Modern Window Sitter for X11 based Desktop Environments (Coming to Wayland, Windows and Mac soon-ish). But using with a terminal emulator is recommended.

Antony Jr 33 May 7, 2022
Lagrange is a desktop GUI client for browsing Geminispace.

Lagrange is a desktop GUI client for browsing Geminispace. It offers modern conveniences familiar from web browsers, such as smooth scrolling, inline image viewing, multiple tabs, visual themes, Unicode fonts, bookmarks, history, and page outlines.

Jaakko KerΓ€nen 869 Jun 25, 2022
Simple and portable (but not inflexible) GUI library in C that uses the native GUI technologies of each platform it supports.

libui: a portable GUI library for C This README is being written. Status It has come to my attention that I have not been particularly clear about how

Pietro Gagliardi 10.3k Jun 30, 2022
libui-ng: a portable GUI library for C

libui-ng: a portable GUI library for C Fork of andlabs/libui. This README is being written. Status See CHANGELOG.md Old announcements can be found in

null 187 Jun 27, 2022
A tiny, portable, immediate-mode UI library written in ANSI C

A tiny, portable, immediate-mode UI library written in ANSI C Features Tiny: around 1100 sloc of ANSI C Works within a fixed-sized memory region: no a

null 2.3k Jun 28, 2022
Cross-platform malware development library for anti-analysis techniques

The Anti-Analysis Menagerie Cross-platform malware development library for anti-analysis techniques. Design Goals Provide a rich and convenient interf

Alan 19 Jun 23, 2022
Unity OnGUI(IMGUI) extensions for Rapid prototyping/development

RapidGUI Unity IMGUI extensions for Rapid prototyping/development. Installation Install via OpenUPM The package is available on the openupm registry.

null 232 Jun 16, 2022
A minimalist andf platform-agnostic application layer for writing graphical applications, with a strong emphasis on simplicity and ease of use.

SlimApp A minimalist(*) and platform-agnostic application layer for writing graphical applications. Available as either a single header file or a dire

Arnon Marcus 33 Apr 22, 2022
WMBar is a window manager agnostic status bar that aims to be lightweight, simple, extensible/modular and fast.

WMBar is a window manager agnostic status bar that aims to be lightweight, simple, extensible/modular and fast.

WMBar 1 Nov 27, 2021
win-vind provides a lightweight hybrid UI system of CUI and GUI for Windows

win-vind provides a lightweight hybrid UI system of CUI and GUI for Windows. And everything is inspired by Vim and its plugins. Simply put, it is a Vim-oriented toy box consisting of various useful features.

pit-ray 783 Jun 22, 2022
Taitank is a cross platform lightweight flex layout engine implemented in C++.

Taitank is a cross platform lightweight flex layout engine implemented in C++.

Tencent 415 Jun 23, 2022