Neutralinojs is a lightweight and portable desktop application development framework

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

Owner
Neutralinojs
Portable and lightweight cross platform desktop app development framework
Neutralinojs
Comments
  • 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

  • Unable to parse native call payload: Unknown exception api/debug/debug.cpp:16

    Unable to parse native call payload: Unknown exception api/debug/debug.cpp:16

    Expected Behavior
    Should return outputs of a command after call Neutralino.os.execCommand

    Actual Behavior
    Currently returning Unable to parse native call payload: Unknown exception api/debug/debug.cpp:16

    Steps to Reproduce the Problem

    1. Try it on windows. let info = await Neutralino.os.execCommand('ping google.com'); console.log(info);
    2. You won't get the console.log in dev tools console
    3. Stop the execution and see log in the terminal, you'll get the Error I noticed

    Specifications

    • NeutralinoJs Version:4.2.0
    • NeutralinoJs CLI version: 3.1.0
    • Platform: Windows 11 Pro
  • 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.

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

  • 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 %
    
  • 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
  • [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

  • 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
    
  • 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

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

  • 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

  • [#1053] Fix Windows Binary Corruption

    [#1053] Fix Windows Binary Corruption

    Description

    See #1053 for more details or sample test code. But this should fix binary data being appended getting corrupted (due to Window EOL.) But this seems to fix my issues where downloaded zip files are corrupted on Windows. :)

    Changes proposed

    • Handle appending data as binary as well

    How to test it

    • Run specs/tests
    • Can see the sample code in #1053

    Next steps

    None.

    Deploy notes

    None.

  • Appending binary files are corrupted on Windows.

    Appending binary files are corrupted on Windows.

    Describe the bug Hello, just to start off I discovered this neat tool last night and have been hacking away. And I want to say I'm quite pleased with this so far, as it's allowed me to develop something pretty quickly. So, thank you VERY MUCH for your project. I'm the lead developer for a game, and I'm developing a launcher for the game. When it requests the manifest from our server, the launcher is able to figure out which platform-build it can use, and the manifest contains the file size and a SHA1 hash to verify things downloaded correctly. This lead me to notice appending binary data corrupts the files on Windows.

    I've tested this on Linux, and it works correctly. As the file downloads, the binary data is appended correctly, and the file is valid (same size, same SHA1 checksum and can be opened.)

    However on Windows, the file sizes will increase slightly, and thus corrupting the entire file, which appears to be caused by the appending fs methods not handling binary correctly? Likely due to line encodings? (see: #619)

    To Reproduce I've managed to write a little sample script to generate a temporary buffer, and write the entire buffer to a file, and then a test case of it appending chunks of the buffer to a file. The written buffer works well as expected, however when appending binary data is when the file gets corrupted.

    Neutralino.init();
    
    async function sha1Sum(buf) {
        return await crypto.subtle.digest('sha-1', buf)
            .then(a => Array.from(new Uint8Array(a))
            .map(z  => z.toString(16).padStart(2,'0')).join(''));
    }
    
    Neutralino.events.on('ready', async () => {
        let buff = new ArrayBuffer(1024 * 1024);
        let view = new Uint8Array(buff);
    
        for (let i = 0; i < buff.byteLength; ++i) {
            view[i] = i % 256;
        }
    
        let i = 0;
        const fn = 'test.bin';
        console.log('filename = ' + fn + ', sha1 = ', await sha1Sum(buff));
    
        await Neutralino.filesystem.writeBinaryFile('good_'+fn, buff);
    
        while (i < buff.byteLength) {
            const chunk = buff.slice(i, i + 500);
            console.log('chunk = ', chunk.byteLength);
            await Neutralino.filesystem.appendBinaryFile('corrupt_' + fn, chunk);
            i += chunk.byteLength;
        }
    });
    

    Expected behavior The generated good_test.bin is ok, and the corrupt_test.bin should be EXACTLY the same as the previous file, with the same file size and same exact SHA1 hash.

    Screenshots/Screen recordings Here's a hex dump of both files (expected on the left, corrupted one on the right) and you can see there's 0x0D (carriage return) where it's not supposed to be there.

    image

    Specifications

    • OS: Windows 10 x64 (22H2 Build 19045.2364) & Linux 5.19.17
    • Neutralinojs version: 4.9.0
    • Neutralinojs client library version: 3.8.0
    • Neutralinojs CLI version: 9.3.1

    Note: you can enter the neu version command to find these details

  • GITHUB ISSUE #1031. Added movetoTrash(filepath) API in filesystem

    GITHUB ISSUE #1031. Added movetoTrash(filepath) API in filesystem

    GitHub issue #1031. Added movetoTrash API in filesystem

    To use the API

     Neutralino.filesystem.movetoTrash('path-of-file-to-be-deleted');
    

    Notes:

    • Added movetoTrash in filesystem.cpp
    • With the help of moveFile(), set the destination of Trash by checking the operating system.
    • Added the it in neutralino.js.map also

    Accidentally deleted the previous one 🫣

  • File or folder dialog functions do nothing

    File or folder dialog functions do nothing

    API functions as showFolderDialog, showSaveDialog and showOpenDialog do nothing on systems without default file manager. They just return empty arrays or empty strings etc. but don't even throw an error.

    Steps to reproduce the behavior: For this you need a simple Linux setup with a window manager (like DWM) and no file explorer. Then you can run a simple neutralino app that just tries to use showOpenDialog.

    Expected behavior If you try to use plain html file input, then it will open the default browser's manager. I suppose browsers ship some common file managers with them, so I expected neutralino API to use such fallback.

    Environment Neutralinojs version: v4.9.0 Neutralinojs client library version: v3.8.0

  • neu run 'Unable to open non-existing resources file'

    neu run 'Unable to open non-existing resources file'

    Describe the bug When using neu run, I found out that the CLI is trying to open a file in the /resources/ folder that does not exists. I have implemented a web-component router (https://github.com/vaadin/router).

    In my global index.js (which is in a different folder, not inside /resources/) file I import 2 web-components like so:

    import Dashboard from './js/components/dashboard.js'
    import UserInput from './js/components/user-input'
    
    const outlet = document.getElementById('outlet')
    const router = new Router(outlet)
    
    router.setRoutes([
        { path: '/', component: 'cabinet-dashboard' },
        { path: '/user-input', component: 'user-input' }
    ])
    

    When the global bundle.js of my application changes, neu does a reload and I get the following error Unable to open ./resources/user-input/index.html

    Expected behavior I would expect neu not to try to open web-component index.html, any idea why this happens?

    Specifications

    • OS: [e.g. MAC OS 11.6.1]
    • Neutralinojs version: [v4.7.0]
    • Neutralinojs client library version: [v3.6.0]
    • Neutralinojs CLI version: [v9.3.1]
DeskGap is a framework for building cross-platform desktop apps with web technologies (JavaScript, HTML and CSS).
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

Jan 4, 2023
Electron framework lets you write cross-platform desktop applications using JavaScript, HTML and CSS.
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

Jan 3, 2023
Purely native C++ cross-platform GUI framework for Android and iOS development. https://www.boden.io
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

Dec 27, 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.

Dec 26, 2022
Build performant, native and cross-platform desktop applications with Node.js and CSS like styling. πŸš€
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

Dec 30, 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

Jan 19, 2022
Radio.Garden desktop app and game overlay
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

Dec 8, 2022
AirPods desktop user experience enhancement program
AirPods desktop user experience enhancement program

AirPodsDesktop AirPods desktop user experience enhancement program

Jan 5, 2023
Modern Window Sitter for X11 based Desktop Environments
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.

Nov 30, 2022
Lagrange is a desktop GUI client for browsing Geminispace.
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.

Jan 1, 2023
Simple and portable (but not inflexible) GUI library in C that uses the native GUI technologies of each platform it supports.
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

Jan 2, 2023
libui-ng: a portable GUI library for C
 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

Jan 7, 2023
A tiny, portable, immediate-mode UI library written in ANSI C
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

Jan 6, 2023
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

Sep 16, 2022
Unity OnGUI(IMGUI) extensions for Rapid prototyping/development
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.

Dec 25, 2022
A minimalist andf platform-agnostic application layer for writing graphical applications, with a strong emphasis on simplicity and ease of use.
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

Dec 18, 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 is a window manager agnostic status bar that aims to be lightweight, simple, extensible/modular and fast.

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

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.

Jan 4, 2023
Taitank is a cross platform lightweight flex layout engine implemented in C++.
Taitank is a cross platform lightweight flex layout engine implemented in C++.

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

Dec 21, 2022