# Node RED v4 : Single File Executable

**URL:** <https://discourse.nodered.org/t/node-red-v4-single-file-executable/89323>\
**Category:** Share Your Projects\
**Tags:** pkg, single-file-executable, executable, sfe\
**Created:** [6 July 2024 16:26 UTC](https://discourse.nodered.org/t/node-red-v4-single-file-executable/89323 "2024-07-06T16:26:08Z")\
**Posts on this page:** 20\
**Page:** 2

<div class="post-metadata">

**Author:** ![marcus-j-davies](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/marcus-j-davies/32/103435_2.png) [@marcus-j-davies](https://discourse.nodered.org/u/marcus-j-davies)\
**Post date:** [6 August 2024 04:39 UTC](https://discourse.nodered.org/t/node-red-v4-single-file-executable/89323/21 "2024-08-06T04:39:28Z")

</div>

To support running within an SFE or not,  
Something like this _should_ work.

```js
const getStaticPath = () => {
    if (process.pkg !== undefined) {
        return join(dirname(process.argv0), 'static');
    } else {
        return join(__dirname, 'static');
    }
}

httpStatic: {
        path: getStaticPath(),
        root: '/',
        options: {
            maxAge:'1d',
            setHeaders:function(res,path,stat){
                res.set('x-timestamp',Date.now())
                if(path.endsWith("png")){res.setHeader('Cache-Control','public, max-age=86400')}
            }
        }
    },

```

Explanation.

The SFE will treat relative paths as relative paths inside the VFS - so we actually need to use absolute paths.

The `if (process.pkg !== undefined)` block just checks if we should use the path that the executable its self is run from, or from the uncompiled script location.

`process.argv0` is the SFE that was launched.

You can see it happening here.  
Whether the SFE should use an embedded flow or create a standard User Directory if not embedded (it create the user Direct next to the executable)

> <https://github.com/marcus-j-davies/Node-RED-SFE/blob/3974e2da5b6d7c507e6adad9c487e9ef761f1dad/node-red.js#L66>

And to detect the correct prefix.

```auto
const pathPrefix = process.platform === 'win32' ? 'c:/' : '/';

```

> <https://github.com/marcus-j-davies/Node-RED-SFE/blob/3974e2da5b6d7c507e6adad9c487e9ef761f1dad/node-red.js#L13>

---

<div class="post-metadata">

**Author:** ![HaroldPetersInskipp](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/haroldpetersinskipp/32/42319_2.png) [@HaroldPetersInskipp](https://discourse.nodered.org/u/HaroldPetersInskipp)\
**Post date:** [6 August 2024 16:14 UTC](https://discourse.nodered.org/t/node-red-v4-single-file-executable/89323/22 "2024-08-06T16:14:38Z")

</div>

So the absolute path on Windows is: `C:\Users\Bannd\Downloads\GameDev\Node-RED-SFE-main\NRUserDir\static`  
so far I think I have tried:  
`httpStatic: { path: 'c:\\Users\\Bannd\\Downloads\\GameDev\\Node-RED-SFE-main\\NRUserDir\\static\\' },`

`httpStatic: { path: 'C:\\Users\\Bannd\\Downloads\\GameDev\\Node-RED-SFE-main\\NRUserDir\\static\\' },`

`httpStatic: { path: 'c:\Users\Bannd\Downloads\GameDev\Node-RED-SFE-main\NRUserDir\static\' },`

`httpStatic: { path: 'C:\Users\Bannd\Downloads\GameDev\Node-RED-SFE-main\NRUserDir\static\' },`

`httpStatic: { path: 'c:/Users/Bannd/Downloads/GameDev/Node-RED-SFE-main/NRUserDir/static/' },`

`httpStatic: { path: 'C:/Users/Bannd/Downloads/GameDev/Node-RED-SFE-main/NRUserDir/static/' },`

`httpStatic: { path: 'c:\\Users\\Bannd\\Downloads\\GameDev\\Node-RED-SFE-main\\NRUserDir\\static' },`

`httpStatic: { path: 'C:\\Users\\Bannd\\Downloads\\GameDev\\Node-RED-SFE-main\\NRUserDir\\static' },`

`httpStatic: { path: 'c:\Users\Bannd\Downloads\GameDev\Node-RED-SFE-main\NRUserDir\static' },`

`httpStatic: { path: 'C:\Users\Bannd\Downloads\GameDev\Node-RED-SFE-main\NRUserDir\static' },`

`httpStatic: { path: 'c:/Users/Bannd/Downloads/GameDev/Node-RED-SFE-main/NRUserDir/static' },`

`httpStatic: { path: 'C:/Users/Bannd/Downloads/GameDev/Node-RED-SFE-main/NRUserDir/static' },`  
But non seem to work even in a regular Node-RED instance (not SFE), can anyone clarify the correct format for me?

---

<div class="post-metadata">

**Author:** ![marcus-j-davies](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/marcus-j-davies/32/103435_2.png) [@marcus-j-davies](https://discourse.nodered.org/u/marcus-j-davies)\
**Post date:** [6 August 2024 16:49 UTC](https://discourse.nodered.org/t/node-red-v4-single-file-executable/89323/23 "2024-08-06T16:49:32Z")

</div>

I vaguely remember trying `httpStatic` in a standard Node RED install, and always receving `Cannot GET /static`

You can actually just add it to your own `app` instance.

```auto
app.use('/static', express.static(path.join(__dirname, 'static')))

```

> **[Serving static files in Express](https://expressjs.com/en/starter/static-files.html)**

Have never really experimented apart from my attempts with `httpStatic`

---

<div class="post-metadata">

**Author:** ![HaroldPetersInskipp](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/haroldpetersinskipp/32/42319_2.png) [@HaroldPetersInskipp](https://discourse.nodered.org/u/HaroldPetersInskipp)\
**Post date:** [6 August 2024 17:29 UTC](https://discourse.nodered.org/t/node-red-v4-single-file-executable/89323/24 "2024-08-06T17:29:01Z")

</div>

So including

```auto
app.use('/', express.static(join(__dirname, 'static')));
console.log(join(__dirname, 'static'));

```

Works perfectly but logs `C:\Users\Bannd\Downloads\GameDev\Node-RED-SFE-main\static` to console.

---

<div class="post-metadata">

**Author:** ![HaroldPetersInskipp](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/haroldpetersinskipp/32/42319_2.png) [@HaroldPetersInskipp](https://discourse.nodered.org/u/HaroldPetersInskipp)\
**Post date:** [6 August 2024 19:40 UTC](https://discourse.nodered.org/t/node-red-v4-single-file-executable/89323/25 "2024-08-06T19:40:21Z")

</div>

According to the README:

```txt
Node-RED SFE can actually operate in two ways:

 - With an Embedded flow (the main use case)
 - A standard Node-RED portable application

 Both scenarios will output an SFE, so Node JS is still not required in either setup.
 The mode is manipulated based on whether there is a directory called `NRHomeDir`.

 When you run `npm run-script build`, it will check if there is such a directory.
 If there is, it will package it up and cause it to "lock" to the developed/embedded flow.

```

I'm supposed to be able to embed a flow file but I always seem to get the result:

```auto
[2024-08-06 01:36:51] info Embedded UserDir Found : false

```

Looking through the code, I see no such checks for `NRHomeDir` to exist, only for `NRUserDir`

Can you clarify on how a flow can be embedded?

---

<div class="post-metadata">

**Author:** ![marcus-j-davies](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/marcus-j-davies/32/103435_2.png) [@marcus-j-davies](https://discourse.nodered.org/u/marcus-j-davies)\
**Post date:** [6 August 2024 19:54 UTC](https://discourse.nodered.org/t/node-red-v4-single-file-executable/89323/26 "2024-08-06T19:54:48Z")

</div>

Hi @HaroldPetersInskipp,

During the build process (ESBuild), if there is a folder called `NRUserDir`.

- [Node-RED-SFE/build.js at 3974e2da5b6d7c507e6adad9c487e9ef761f1dad · marcus-j-davies/Node-RED-SFE · GitHub](https://github.com/marcus-j-davies/Node-RED-SFE/blob/3974e2da5b6d7c507e6adad9c487e9ef761f1dad/build.js#L111)

It will move that folder to the `build` folder - which is used by `pkg`

Later it checks for this folder within the VFS, during start up,  
and uses the embedded location as part of the `--userDir` parameter of Node RED

- [Node-RED-SFE/node-red.js at 3974e2da5b6d7c507e6adad9c487e9ef761f1dad · marcus-j-davies/Node-RED-SFE · GitHub](https://github.com/marcus-j-davies/Node-RED-SFE/blob/3974e2da5b6d7c507e6adad9c487e9ef761f1dad/node-red.js#L63)

- [Node-RED-SFE/node-red.js at 3974e2da5b6d7c507e6adad9c487e9ef761f1dad · marcus-j-davies/Node-RED-SFE · GitHub](https://github.com/marcus-j-davies/Node-RED-SFE/blob/3974e2da5b6d7c507e6adad9c487e9ef761f1dad/node-red.js#L102)

There might be a typo in the read me 😇

`npm run-script build` : Moves things to the build folder + ESBuilds a few things  
`npm run-script package` : compiles everything in the build folder to the final executable

`npm run-script develop` : starts up Node RED - allowing you to start building flows + creates `NRUserDir`

`NRUserDir` : is no different to the normal `.node-red` directory.

There is nothing stopping you taking everything in a `.node-red` directory, moving its contents to a `NRUserDir` directory resulting in an embedded build (based on what was in `.node-red`)

---

<div class="post-metadata">

**Author:** ![HaroldPetersInskipp](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/haroldpetersinskipp/32/42319_2.png) [@HaroldPetersInskipp](https://discourse.nodered.org/u/HaroldPetersInskipp)\
**Post date:** [6 August 2024 20:52 UTC](https://discourse.nodered.org/t/node-red-v4-single-file-executable/89323/27 "2024-08-06T20:52:14Z")

</div>

So I copied everything in my `.node-red` directory over to the `NRUserDir` like you suggested, and when I run `npm run-script build` it does move things to the build folder. However, when I then run `npm run-script package` it creates an executable with no flow and no installed nodes. But it works fine when I run `npm run-script develop` however I still get

```auto
[2024-08-06 01:36:51] info Embedded UserDir Found : false

```

even with the `NRUserDir` in place?

---

<div class="post-metadata">

**Author:** ![marcus-j-davies](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/marcus-j-davies/32/103435_2.png) [@marcus-j-davies](https://discourse.nodered.org/u/marcus-j-davies)\
**Post date:** [6 August 2024 21:07 UTC](https://discourse.nodered.org/t/node-red-v4-single-file-executable/89323/28 "2024-08-06T21:07:12Z")

</div>

Mmm I'm not seeing this.

Is the folder `NRUserDir` in the same location as all the build scripts?  
It checks for this folder relative to the `build.js` script

plus are you working within the directory SFE was downloaded to?

```auto
cd <path-to-SFE-Working-Directory>
npm run-script build
npm run-script package

```

 ![Screenshot 2024-08-06 at 22.04.49](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/e/0/e08e65d4f6825362f7f34499fde5f23746422984.jpeg)

---

<div class="post-metadata">

**Author:** ![HaroldPetersInskipp](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/haroldpetersinskipp/32/42319_2.png) [@HaroldPetersInskipp](https://discourse.nodered.org/u/HaroldPetersInskipp)\
**Post date:** [6 August 2024 21:15 UTC](https://discourse.nodered.org/t/node-red-v4-single-file-executable/89323/29 "2024-08-06T21:15:46Z")

</div>

My folder looks like this and I still get it:

 ![](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/8/5/851201a97b9c3234149132fedad214d3c647e7d7.png)

---

<div class="post-metadata">

**Author:** ![marcus-j-davies](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/marcus-j-davies/32/103435_2.png) [@marcus-j-davies](https://discourse.nodered.org/u/marcus-j-davies)\
**Post date:** [6 August 2024 21:24 UTC](https://discourse.nodered.org/t/node-red-v4-single-file-executable/89323/30 "2024-08-06T21:24:50Z")

</div>

So that is `Design Time`  
Not a packaged image being executed.

During `Design Time` - nothing is embedded - Node RED is started and has been set to use the local `NRuserDir`

`Design Time` does nothing other then

- Starts Node RED (as normal)
- Sets its `userDir` param to the local folder you see (NRUserDir) - therefore its not embedded (yet)

At this stage, you're designing a flow/installing the extra nodes etc etc

Im not sure what tool is being used - but running `npm run-script build` followed by npm `run-script package` will package all that up into an executable.

You need to be in : `C:\Users\Bannd\Downloads\GameDev\Node-RED-SFE-main` within command prompt and run those commands.

as per my screen shot - not sure why your not getting the same.

the output will be placed in `build/dist`

---

<div class="post-metadata">

**Author:** ![HaroldPetersInskipp](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/haroldpetersinskipp/32/42319_2.png) [@HaroldPetersInskipp](https://discourse.nodered.org/u/HaroldPetersInskipp)\
**Post date:** [6 August 2024 22:00 UTC](https://discourse.nodered.org/t/node-red-v4-single-file-executable/89323/31 "2024-08-06T22:00:01Z")

</div>

I had to make a change to line 54-56 of the `node-red.js`

```auto
const ns = 'Node-RED-SFE-main';
const userDir = 'NRUserDir';
const userDirPath = `${pathPrefix}snapshot/${ns}/${userDir}`;

```

And switch to using `C:/snapshot/Node-RED-SFE-main` for my development directory to get it working. I think something about how the path is formed is incorrect/hard-coded?

---

<div class="post-metadata">

**Author:** ![marcus-j-davies](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/marcus-j-davies/32/103435_2.png) [@marcus-j-davies](https://discourse.nodered.org/u/marcus-j-davies)\
**Post date:** [7 August 2024 07:11 UTC](https://discourse.nodered.org/t/node-red-v4-single-file-executable/89323/32 "2024-08-07T07:11:27Z")

</div>

> [@HaroldPetersInskipp](#):
>
> `const ns = 'Node-RED-SFE-main';`

You should try to avoid changing this.  
This variable is updated during build, to reflect your working directory, hence why it is a place holder.

```auto
const projectName = path.dirname(__filename).split(path.sep).pop();
const replacements = [
		['{SFE_PROJECT_DIR}', projectName]
];

```

`pkg` makes reference to the immediate parent folder during compile (and used internally in the executable)

If you're going to hard code it - you must always ensure the directory in which you're working is : `Node-RED-SFE-main` - or whatever you set as `ns`

> [@HaroldPetersInskipp](#):
>
> And switch to using `C:/snapshot/Node-RED-SFE-main` for my development directory to get it working

`C:/snapshot`, `/snapshot` is just the mount point that `pkg` will use.  
there is no need to pay any attention to it or work in a directory called snapshot.

Im really not sure why it's not working for you, unless you make the changes you have.  
I get flawless builds in `OSX` and `Windows` without these steps.

I use VSCode or Command Prompt both set the working directory, so scripts are run with the current working directory in context. not sure if that has anything to do with it.

I:

- Pull down the scripts and everything else (into any folder I want)
- in command prompt (or VS Code) move into this directory
- `npm install`
- `npm run-script develop` OR
  - `mkdir NRUserDir` and copy the contents of an already `.node-red` environment

- `npm run-script build`
- `npm run-script package`

If you can share a project with me, I'm happy to see what may be going on - But maybe send me a PM (I'm away for 3 days however).

This thread is getting large 😬

---

<div class="post-metadata">

**Author:** ![HaroldPetersInskipp](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/haroldpetersinskipp/32/42319_2.png) [@HaroldPetersInskipp](https://discourse.nodered.org/u/HaroldPetersInskipp)\
**Post date:** [7 August 2024 15:56 UTC](https://discourse.nodered.org/t/node-red-v4-single-file-executable/89323/33 "2024-08-07T15:56:38Z")

</div>

I am working in the directory `C:\Users\Bannd\Downloads\GameDev\Node-RED-SFE-main`  
As soon as I change these variables back it no longer embeds:

```auto
const ns = '{SFE_PROJECT_DIR}';
const userDir = 'NRUserDir';
const userDirPath = `${pathPrefix}snapshot/${ns}/${userDir}`;

```

and I get the following log when running `npm run-script develop`:

```auto
[2024-08-07 09:48:30] info UserDirPath : c:/snapshot/{SFE_PROJECT_DIR}/NRUserDir
[2024-08-07 09:48:30] info Node Version : 20.7.0
[2024-08-07 09:48:30] info Node-RED Version : 4.0.2
[2024-08-07 09:48:30] info Mode : Design Time
[2024-08-07 09:48:30] info Namespace : {SFE_PROJECT_DIR}
[2024-08-07 09:48:30] info Embedded UserDir Found : false
[2024-08-07 09:48:30] info UserDir : C:\Users\Bannd\Downloads\GameDev\Node-RED-SFE-main\NRUserDir
[2024-08-07 09:48:30] info Flow File : flows.json
[2024-08-07 09:48:30] info UI Enabled : true
[2024-08-07 09:48:31] info UI Endpoint : http://127.0.0.1:1880/
[2024-08-07 09:48:31] info Copy into browser to play: : http://127.0.0.1:1880/dashboard/title

```

At the top I included logging for the variable `UserDirPath`

line 64 of `node-rd.js`:

```auto
const isEmbedded = checkFileExists(userDirPath);

```

Cant possibly equal true because that folder location doesn't exist on my system.

Also in your screenshot above the namespace has been replaced but as you can see in mine it is still stuck as `'{SFE_PROJECT_DIR}'`.

---

<div class="post-metadata">

**Author:** ![marcus-j-davies](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/marcus-j-davies/32/103435_2.png) [@marcus-j-davies](https://discourse.nodered.org/u/marcus-j-davies)\
**Post date:** [7 August 2024 16:53 UTC](https://discourse.nodered.org/t/node-red-v4-single-file-executable/89323/34 "2024-08-07T16:53:09Z")

</div>

Ignore the fact the place holder isn’t updated - it is not updated while in design time - and you currently are according to your log.

isEmbedded, userDirPath, ns - is not relevant, until a build has taken place and you are executing that build.

Those parameters are for when the SFE is being executed after a build (build/dist)

userDirPath is used to check if it can find the NRUserDir - and this references an internal VFS path - so not relevant during design time

Sorry, not sure what else to say, I fail to get any errors/issues on widows - and can successfully execute an embedded flow - when following the guide, and executing the resulting output.

I’m away for 3 days - so can’t investigate any edge cases if this one is 🤷

---

<div class="post-metadata">

**Author:** ![KarolisL](https://avatars.discourse-cdn.com/v4/letter/k/a4c791/32.png) [@KarolisL](https://discourse.nodered.org/u/KarolisL)\
**Post date:** [23 January 2025 11:43 UTC](https://discourse.nodered.org/t/node-red-v4-single-file-executable/89323/35 "2025-01-23T11:43:11Z")

</div>

Hello, very nice tool.

I wonder if it is possible to make editor in SFE available for changes?

 ![image](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/3/7/376a79efa89bdb9bcb8637c52a5eaac005ba1072.png)  
As I read:

> Node-RED SFE can actually operate in two ways:
> 
> - With an Embedded flow (the main use case)
> - A standard Node-RED portable application
> 
> Both scenarios will output an SFE, so Node JS is still not required in either setup. The mode is manipulated based on whether there is a directory called `NRUserDir`.

If I understand correctly it is possible to have standard Node-RED portable application with all flows and dashboard embedded and available for all modifications, but what to do with NRUserDir? I cannot delete it because it contains flow to be embedded

---

<div class="post-metadata">

**Author:** ![marcus-j-davies](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/marcus-j-davies/32/103435_2.png) [@marcus-j-davies](https://discourse.nodered.org/u/marcus-j-davies)\
**Post date:** [23 January 2025 15:43 UTC](https://discourse.nodered.org/t/node-red-v4-single-file-executable/89323/36 "2025-01-23T15:43:24Z")

</div>

Hi @KarolisL

You can’t embed a flow if you want it modifiable.

To have a portable/modifiable environment

Ensure the folder **NRuserDIR** doesn’t exist (or is renamed) during compile time.

This will then create one for you, during run time (relative to the executable) that is created.

This then becomes a modifiable environment - you can distribute both the executable and the working NRUserDIR together

---

<div class="post-metadata">

**Author:** ![KarolisL](https://avatars.discourse-cdn.com/v4/letter/k/a4c791/32.png) [@KarolisL](https://discourse.nodered.org/u/KarolisL)\
**Post date:** [23 January 2025 16:29 UTC](https://discourse.nodered.org/t/node-red-v4-single-file-executable/89323/37 "2025-01-23T16:29:24Z")

</div>

For future references:

 ![image](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/9/1/916159c7e18b0875df2c99803b33d23ea2d98ecd.png)  
After running:

> npm run-script build

I get:

 ![image](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/9/4/9458c71d8bffcc09d4ec836e7a1bec963aba75e9.png)

After running:

> `npm run-script package`

I at directory

> ./build/dist  
> I get what I want:
> 
> ![image](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/f/f/ffedf04b237b1d225d25414f9773430fede6f147.png)

I zip dist folder and can distribute it with editable environment.

Works exactly as I wanted!!!

One feature would be nice: If settings file would contain option to autorun localhost:port/dashboard automatically after executing application.

---

<div class="post-metadata">

**Author:** ![marcus-j-davies](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/marcus-j-davies/32/103435_2.png) [@marcus-j-davies](https://discourse.nodered.org/u/marcus-j-davies)\
**Post date:** [23 January 2025 16:33 UTC](https://discourse.nodered.org/t/node-red-v4-single-file-executable/89323/38 "2025-01-23T16:33:01Z")

</div>

I started this project to address a need I had - I am more then happy to receive contributions to it 😉

Some things aren’t working (noted at the bottom of the read me) - but for the most part, it all works

---

<div class="post-metadata">

**Author:** ![ziga](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/ziga/32/98138_2.png) [@ziga](https://discourse.nodered.org/u/ziga)\
**Post date:** [23 January 2025 17:15 UTC](https://discourse.nodered.org/t/node-red-v4-single-file-executable/89323/39 "2025-01-23T17:15:03Z")

</div>

Interesting project. I installed it for curiosity on my Linux machine - works so kudos for that.

One thing I noticed though, although editor is disabled, I can still use keyboard shortcuts. So if I press `crtl+d` changes are deployed. They are not persistent so on app restart things are back to embedded original flow, but still probably good to know that things can get modified atm.

---

<div class="post-metadata">

**Author:** ![marcus-j-davies](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/marcus-j-davies/32/103435_2.png) [@marcus-j-davies](https://discourse.nodered.org/u/marcus-j-davies)\
**Post date:** [23 January 2025 17:18 UTC](https://discourse.nodered.org/t/node-red-v4-single-file-executable/89323/40 "2025-01-23T17:18:33Z")

</div>

Yup - when in embedded mode - I insert custom CSS to disable some things  
(and to alter the login prompt)

mainly to stop unexpected errors, if someone tries to deploy to a read/only VFS - But I make use of the `readOnly` flag anyway - so may be pointless - but to test temp changes - could be good.

Call it an accidental feature 😉

[Previous page](https://discourse.nodered.org/t/node-red-v4-single-file-executable/89323.md?page=1)

[Next page](https://discourse.nodered.org/t/node-red-v4-single-file-executable/89323.md?page=3)
