node-red-contrib-uibuilder
Version:
Easily create data-driven web UI's for Node-RED. Single- & Multi-page. Multiple UI's. Work with existing web development workflows or mix and match with no-code/low-code features.
65 lines (41 loc) • 3.83 kB
Markdown
---
title: Changing the uibuilder master root folder (uibRoot) in settings.js
description: |
Describes how to change uibRoot and what happens when you do.
created: 2021-07-03 20:46:33
updated: 2024-03-23 16:51:17
---
## What is the uibRoot folder?
The `uibRoot` folder on your Node-RED server is where all of the front-end files live along with security middleware, common front-end resources, security settings and the lists of packages that are served to the front end (e.g. VueJS).
By default, uibuilder will create a folder for you under your `userDir` folder - typically `~/.node-red/uibuilder/`.
If you have Node-RED projects turned on, the default uibRoot folder will sit under your projects root folder instead.
> [!NOTE]
> `uibRoot` will contain a sub-folder for every instance of uibuilder you have deployed. In addition, it will contain a `.config` and a `common` sub-folder.
Whenever Node-RED is started, the uibuilder module will check every instance (deployed node) of uibuilder and will ensure that a sub-folder named after the `url` configuration setting of the node exists within `uibRoot`.
If the uibuilder module has to create a missing sub-folder for a deployed node, it will use the configured Template to pre-populate the sub-folder.
> [!NOTE]
> If you change the uibRoot folder and restart Node-RED, **ALL** existing instances of uibuilder in your flow will get the appropriate templates copied. Any existing code **will not** be copied. However, it is not deleted either so you can manually copy the files and folders to the new location if you want to. <br><br>If you have never set a Template for an instance, the "Blank" template will be used. This does not use any front-end framework. This is a change in v4+ since previously, the Vue/bootstrap-vue template was the default. If you want a Vue/Bootstrap template, simply change the selected Template to Vue or simple Vue.
## Changing the uibRoot folder
To change the folder to a different location, edit the Node-RED `settings.js` file that is found in the userDir folder (normally `~/.node-red/settings.js`).
Add a new section to the exported object:
```js
/** Custom settings for all uibuilder node instances */
uibuilder: {
/** Optional: Change location of uibRoot
* If set, instead of something like `~/.node-red/uibuilder`, the uibRoot folder can be anywhere you like.
*/
uibRoot: process.env.UIBROOT || path.join(os.homedir(), 'myuibroot'),
},
```
You can, of course, set it to any folder path you like as long as Node-RED has access to it when running.
The example here shows how to be able to override it using an environment variable `UIBROOT` and to fall back to using a sub-folder in your users homedir folder (which will work for Windows, Linux, and MacOS).
Once you have changed the location, if you want to keep any existing front-end code, you should copy that to the new location _before restarting Node-RED_. That would prevent uibuilder from copying the selected template.
Similarly, if you have made any changes or additions to the `.config` or `common` folders, you should also copy those over as well.
## Finding the uibRoot folder
There are several ways to find out which folder is the uibuilder root.
1. When Node-RED starts, uibuilder prints some information to the log including the "root folder".
2. The "uibuilder details" button available in any uibuilder node.
The resulting page shows a list of all of the uibuilder instances that are deployed and includes the "Server Filing System Folder", the root of which is the uibuilder root folder.
It also shows a "Configuration" section that contains "uib.rootFolder".
3. The "instance details" button available in any uibuilder node.
Shows similar detail to #2 but just for the selected node.