# RE: difference between sidebar, plugins and nodes

**URL:** <https://discourse.nodered.org/t/re-difference-between-sidebar-plugins-and-nodes/101274>\
**Category:** General\
**Tags:** plugin\
**Created:** [13 June 2026 10:47 UTC](https://discourse.nodered.org/t/re-difference-between-sidebar-plugins-and-nodes/101274 "2026-06-13T10:47:32Z")\
**Posts on this page:** 12\
**Page:** 1

<div class="post-metadata">

**Author:** ![GogoVega](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/gogovega/32/71313_2.png) [@GogoVega](https://discourse.nodered.org/u/GogoVega)\
**Post date:** [13 June 2026 10:47 UTC](https://discourse.nodered.org/t/re-difference-between-sidebar-plugins-and-nodes/101274/1 "2026-06-13T10:47:32Z")

</div>

> [@tada Node-RED 5 now available](https://discourse.nodered.org/t/node-red-5-now-available/101239/46):
>
> Ah ok, so there is a difference between sidebar, plugins and nodes (config & workspace)? But why does it show "0 plugins" at all, for example, tarball does not have a sidebar nor plugin and nothing is shown: NodeDev has a plugin directory and in that directory there is a sidebar defined (which is also shown as a sidebar). In the package.json it's declared as a plugin but in fact there are [two](https://github.com/gorenje/node-red-contrib-nodedev/blob/30318b84966f0186caeed3d5992c5b7705dac03f/package.json#L33-L35) plugins defined - one is just init code. Indeed registerPlugin …

> [@tada Node-RED 5 now available](https://discourse.nodered.org/t/node-red-5-now-available/101239/46):
>
> there is a difference between sidebar, plugins and nodes

Yes. The Palette Manager only displays the two types of modules that can be installed via NR. It's either a node, a plugin, or both. The sidebar can be registered by either a node or a plugin. It's not possible any other way.

Your tarball module doesn't contain a plugin entry in the package.json file, so NR won't lookup for a plugin. However, NodeDev does have an entry, but since you're not registering a plugin, it considers it to be zero. A plugin file can contain multiple plugins; it's the same principle as for nodes.

Hiding the amount isn't an option because you're skipping the plugin registration. You can use a resource instead if you don't want to register a plugin.

---

<div class="post-metadata">

**Author:** ![gregorius](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/gregorius/32/73816_2.png) [@gregorius](https://discourse.nodered.org/u/gregorius)\
**Post date:** [13 June 2026 11:08 UTC](https://discourse.nodered.org/t/re-difference-between-sidebar-plugins-and-nodes/101274/2 "2026-06-13T11:08:13Z")

</div>

I think the question remains: why do I need to call registerPlugin for something that has a sidebar and is working as a sidebar?

What is the difference between sidebar and plugin?

> [@GogoVega](#):
>
> You can use a resource instead

But that seems to be [static content](https://nodered.org/docs/creating-nodes/resources) which I'm not loading. I'm loading a sidebar definition which also needs to be executed at startup. Hence the plugin in the package.json - to ensure it gets called.

---

<div class="post-metadata">

**Author:** ![knolleary](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/knolleary/32/3_2.png) [@knolleary](https://discourse.nodered.org/u/knolleary)\
**Post date:** [13 June 2026 11:10 UTC](https://discourse.nodered.org/t/re-difference-between-sidebar-plugins-and-nodes/101274/3 "2026-06-13T11:10:50Z")

</div>

Taking a step back, I agree that having it say `0 plugins` looks odd and inconsistent to the end user. It should only report non-zero counts.

---

<div class="post-metadata">

**Author:** ![GogoVega](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/gogovega/32/71313_2.png) [@GogoVega](https://discourse.nodered.org/u/GogoVega)\
**Post date:** [13 June 2026 11:34 UTC](https://discourse.nodered.org/t/re-difference-between-sidebar-plugins-and-nodes/101274/4 "2026-06-13T11:34:41Z")

</div>

> [@gregorius](#):
>
> But that seems to be [static content](https://nodered.org/docs/creating-nodes/resources) which I'm not loading. I'm loading a sidebar definition which also needs to be executed at startup. Hence the plugin in the package.json - to ensure it gets called.

You load the resource from one of your nodes. Note that plugins are loaded before nodes, which may have an impact on the task to be accomplished.

By definition, a plugin is supposed to add something to the editor.

I don't see what's wrong with wanting to declare a plugin with a modest task.

---

<div class="post-metadata">

**Author:** ![gregorius](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/gregorius/32/73816_2.png) [@gregorius](https://discourse.nodered.org/u/gregorius)\
**Post date:** [13 June 2026 11:49 UTC](https://discourse.nodered.org/t/re-difference-between-sidebar-plugins-and-nodes/101274/5 "2026-06-13T11:49:47Z")

</div>

> [@GogoVega](#):
>
> wrong with wanting to declare a plugin

There is nothing _wrong_ with it but I don't understand _why_ I should do it if nothing is broken - for me (i.e. my sidebars are there and working).

Is there some documentation for this?

But perhaps it's the reason why when I reload the editor, the sidebar isn't showing my sidebar if it's not an inbuilt?

![Screen Recording 2026-06-13 at 13.41.38](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/5/3/535aed0a1fa73a517101e5082db09ee5912269e7.gif)

Here I switch between having a configuration sidebar, my introspection sidebar and the context sidebar on the top and reload the browser each time.

A configuration of panels that only includes the built in ones is "remembered" between reloads while if I use a sidebar defined by me, it's not.

---

<div class="post-metadata">

**Author:** ![knolleary](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/knolleary/32/3_2.png) [@knolleary](https://discourse.nodered.org/u/knolleary)\
**Post date:** [13 June 2026 11:52 UTC](https://discourse.nodered.org/t/re-difference-between-sidebar-plugins-and-nodes/101274/6 "2026-06-13T11:52:54Z")

</div>

The plugin concept was introduced to put a bit more structure around modules that wanted to add stuff to the runtime/editor without being associated directly with a node.

It provides a way to have standard 'types' of plugin - such as custom themes.

It is something that needs documentation writing for.

But if what you're doing works, there's no pressure to change.

---

<div class="post-metadata">

**Author:** ![TotallyInformation](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/totallyinformation/32/31_2.png) [@TotallyInformation](https://discourse.nodered.org/u/TotallyInformation)\
**Post date:** [13 June 2026 12:12 UTC](https://discourse.nodered.org/t/re-difference-between-sidebar-plugins-and-nodes/101274/7 "2026-06-13T12:12:45Z")

</div>

> [@gregorius](#):
>
> But perhaps it's the reason why when I reload the editor, the sidebar isn't showing my sidebar if it's not an inbuilt?

So something _is_ broken?

I think the docs are pretty clear that to add custom "stuff" to Node-RED you use nodes or/and plugins.

That you are able to add the sidebar without them is luck rather than design I suspect.

---

<div class="post-metadata">

**Author:** ![gregorius](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/gregorius/32/73816_2.png) [@gregorius](https://discourse.nodered.org/u/gregorius)\
**Post date:** [13 June 2026 12:13 UTC](https://discourse.nodered.org/t/re-difference-between-sidebar-plugins-and-nodes/101274/8 "2026-06-13T12:13:38Z")

</div>

> [@TotallyInformation](#):
>
> That you are able to add the sidebar

No I use "plugins" directive in package.json but don't call `registerPlugin` - far from luck, more bending spoons.

---

<div class="post-metadata">

**Author:** ![TotallyInformation](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/totallyinformation/32/31_2.png) [@TotallyInformation](https://discourse.nodered.org/u/TotallyInformation)\
**Post date:** [13 June 2026 12:14 UTC](https://discourse.nodered.org/t/re-difference-between-sidebar-plugins-and-nodes/101274/9 "2026-06-13T12:14:27Z")

</div>

> [@gregorius](#):
>
> more bending spoons.

I've never had much luck bending spoons! 🤣`

---

<div class="post-metadata">

**Author:** ![gregorius](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/gregorius/32/73816_2.png) [@gregorius](https://discourse.nodered.org/u/gregorius)\
**Post date:** [13 June 2026 12:15 UTC](https://discourse.nodered.org/t/re-difference-between-sidebar-plugins-and-nodes/101274/10 "2026-06-13T12:15:54Z")

</div>

> [@TotallyInformation](#):
>
> much luck bending spoons

Use lead and have warm hands ....

---

<div class="post-metadata">

**Author:** ![gregorius](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/gregorius/32/73816_2.png) [@gregorius](https://discourse.nodered.org/u/gregorius)\
**Post date:** [16 June 2026 15:13 UTC](https://discourse.nodered.org/t/re-difference-between-sidebar-plugins-and-nodes/101274/11 "2026-06-16T15:13:12Z")

</div>

For those that read this later, a [template for sidebar initialisation](https://github.com/node-red/node-red/issues/5802#issuecomment-4709397810) is attached to the issue.

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/1X/d073cd938eafa2e558d7c2cd59003b3ef4963033.png) [@system](https://discourse.nodered.org/u/system)\
**Post date:** [14 September 2026 15:13 UTC](https://discourse.nodered.org/t/re-difference-between-sidebar-plugins-and-nodes/101274/12 "2026-09-14T15:13:19Z")

</div>

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.
