Skip to content

neutralinojs-community/node-neutralino

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Node Neutralino

Node Neutralino is a NPM Package that lets you write backend code for your Neutralinojs apps, It supports Vanilla JS as well as frontend frameworks.


Table Of Content


Getting Started

You could manually add Node Neutralino to your projects or get started with one of the premade templates!

Templates:

Using Templates:

# Use neutralinojs-community/node-neutralino-vanilla for Vanilla JS template
$ neu create myapp --template neutralinojs-community/node-neutralino-react
$ cd myapp

# Run Neu App
$ neu run

# Build Neu App
$ neu build --clean

Manual Installation:

  • Add node-neutralino as npm dependency in root of your NEU App.
$ npm i node-neutralino
  • Add the following config in neutralino.config.json for projectRunner.
// This is required since node-neutralino communicates via neutralinojs extension protocol.
"enableExtensions": true,
"extensions": [
  {
      "id": "js.node-neutralino.projectRunner"
  }
]

// Add projectRunner Config
"cli": {
  "projectRunner": {
    "projectPath": "/", // initCommand, devCommand, buildCommand will run in this folder
    "buildPath": "./node-src/dist/", // Location where built backend file(s) need to be located after buildCommand
    "initCommand": "npm install", // (optional) This command is executed when app is created from a template repo with neu create
    "devCommand": "tsx ./server.ts", // (optional) This command is executed when app is opened in dev mode to run the projectRunner File
    "buildCommand": "tsc" // (optional) This command is executed when app is being built, developers are responsible to make sure that built backend files are located in projectRunner.buildPath after executing this command.
  }
}
  • Create backend file that imports node-neutralino package and initializes the Neu app. Example:
// server.ts
import NeutralinoApp from "node-neutralino"

async function main() {
  const app = new NeutralinoApp({
    url: "/",
    windowOptions: {
      enableInspector: false,
    }
  });

  app.init();

  app.events.on("backend.maximize", () => {
    app.window.maximize();
  });
}

main();
  • Now you can run/build the Neu app with neu-cli easily.
# To run the app
$ neu run

# To build the app
$ neu build --clean

NeutralinoApp Configuration Options

url

  • The entry URL of the application. Neutralinojs will initially load this URL Ref

windowOptions.title

  • Title of the native window. Ref

windowOptions.icon

  • Application icon's file name. Ref

windowOptions.fullScreen

  • Activates the full-screen mode. Ref

windowOptions.alwaysOnTop

  • Activates the top-most mode. Ref

windowOptions.enableInspector

  • Automatically opens the developer tools window. Ref

windowOptions.borderless

  • Activates the borderless mode. Ref

windowOptions.maximize

  • Launches the application maximized. Ref

windowOptions.hidden

  • Make the window invisible. Ref

windowOptions.maximizable

  • Makes the window maximizable or not. Ref

windowOptions.useSavedState

  • Save and load the primary window state (width, height, x, y, values and maximized status) automatically. Ref

windowOptions.exitProcessOnClose

  • If this setting is true, the app process will exit when the user clicks on the close button. Ref

windowOptions.extendUserAgentWith

  • Extends the default webview-specific user agent string with a custom suffix. Ref

windowOptions.processArgs

  • (String) Additional command-line arguments for the new window process. Check all supported internal command-line arguments from here

Read more about working with frontend library and config here.

windowOptions.frontendLibrary.patchFile

  • [String] Location for HTML file for HRM (hot module replacement)

windowOptions.frontendLibrary.devUrl

  • [String] (Optional) Development Server URL

windowOptions.frontendLibrary.clientLibrary

  • [String] (Optional) Filename of the Neutralinojs JavaScript library. Ref

windowOptions.frontendLibrary.resourcesPath

  • [String] (Optional) Path of your application resources. Ref

windowOptions.frontendLibrary.documentRoot

  • [String] (Optional) Sets the document root for the static server. Ref

windowOptions.frontendLibrary.projectPath

  • [String] (Optional) Path to resources for frontend lib app. windowOptions.frontendLibrary.devCommand will be executed in this location.

windowOptions.frontendLibrary.devCommand

  • [String] (Optional) Command to start frontend library development server.

windowOptions.frontendLibrary.waitTimeout

  • [Number] (Optional) Amount of time to wait in miliseconds to start the development server before the Neu App exits out.

Create your own Project Runner in any language

  • This is a guide to show you how you can create similar package like node-neutralino in any language, eg: py-neutralino, rust-neutralino, etc.
  • Steps:
  • 1st Step (Spawning Neutralino Binaries With Process Args):
    • Take input from users for all the supported args.
    • Spawn Binaries with given args by converting from object to string.
  • 2nd Step (Connect To Neutralino Server):
    • To communicate with the spawed app you can connect with the internal server through WebSockets.
    • --export-auth-info args can be given to export the auth info used to connect with Neutralino Server.
    • --enable-extensions=true can be given in args to enable for extension in server.
    • You can follow this guide to connect with the WS server.
    • Listens for messages and emit the messages according to its type. Send Message/event when a function is triggered on the connected WS.
  • 3rd Step (Support Frontend Libraries):
    • If frontendLib option are provided during spawning the binaries, then few extra steps need to be followed.
    • Patch HTML file by including script for global variables.
    • Start the given devCommand in projectPath to start the frontend lib dev server.
    • Wait for the port to be busy to detect if the development server is started or not.