Chapter 20

MQTT, the preinstalled node matrix, Palette management, and the FlowFuse Dashboard 2 extension (optional and not bundled)

MQTT involves more than entering a topic: the broker, protocol version, TLS, credentials (authentication data), authentication (identity verification), authorization (permissions), QoS, retained messages, and sessions each have distinct semantics. The Add-on also comes with 25 direct dependencies whose roles can be identified through an inventory, and it can install additional packages at startup. This chapter performs offline checks only: it does not connect or deploy.

Which Section Should You Read?

NeedReading pathYou can skip
MQTT onlyCore Concepts, Steps 1–4, MQTT, and TroubleshootingFull package matrix, Palette, and Dashboard
Audit preinstalled nodesPreinstalled Node MatrixMQTT and Dashboard details
Prepare to install a packagePreinstalled Node Matrix and Palette ManagementDashboard migration details
Adopt or migrate a DashboardPalette Management and Dashboard BoundaryMQTT details

First Distinguish Core Protocol Features, Preinstalled Packages, and Optional Packages

Add-on 22.0.1 embeds Node-RED 5.0.2 and HA WebSocket nodes 0.80.3. MQTT In, MQTT Out, and mqtt-broker are part of Node-RED core; the package matrix lists the Add-on image's direct dependencies; Palette Manager and npm_packages add third-party server code; and FlowFuse Dashboard 2 1.30.2 is optional and not bundled. Do not conflate these four layers.

LayerBaseline for this chapterSecurity concerns
MQTT core nodesNode-RED 5.0.2 mqtt in, mqtt out, and mqtt-brokerBroker ACLs, topics, QoS, retained messages, sessions, TLS, credentials, and message size
Add-on bundled direct dependenciesExactly 25 entries in node-red/package.jsonNot every entry appears in the Palette; some are runtime, theme, or wrapper support libraries
Custom packagesPalette Manager or the Add-on's npm_packages/system_packagesSupply-chain risk, native code, version drift, startup failure, and reconstruction after restoration
FlowFuse Dashboard 2@flowfuse/[email protected], optional and not bundledAdds an HTTP route, Socket.IO, browser input, and widgets; its authentication boundary must be managed separately

The Add-on has host_network: true and uart: true grants and mounts media:rw and share:rw storage. These settings indicate potential reachability or read/write access; they do not mean that MQTT, serial, File, File In, or Watch is in use. For every external connection or file node, pin the destination, topic, device, and path individually. See Chapter 21 for backup and secret-handling guidance.

Make Each MQTT Choice Independently

The broker connection configuration determines the transport, protocol version, and session. MQTT In determines the subscription filter, subscription QoS, and output data type. MQTT Out determines the publication topic, QoS, retained-message setting, and MQTT 5 properties. Selecting a TLS checkbox does not create a topic ACL, and choosing QoS 2 does not make downstream business operations execute “exactly once.”

ItemPrecise meaningCommon misconception
TopicA subscription may use +/# filters; a publication topic cannot contain wildcardsSubscribing to the entire # tree does not mean that all its data may be disclosed or processed
QoS 0At-most-once delivery; messages may be lostLow overhead does not mean that errors and disconnections can be ignored
QoS 1At-least-once delivery; duplicates are possibleA broker acknowledgment does not mean that a business side effect runs only once
QoS 2An exactly-once delivery handshake at the protocol layerIt does not guarantee end-to-end exactly-once behavior for a flow, external API, or device
RetainThe broker retains the last retained message for that topic and delivers it to later subscribersIt is not a historical database; an incorrect retained command can continue to affect new clients
SessionClean session/clean start, client ID, session expiry, and broker state determine behavior togetherIt is not Node-RED Context and does not guarantee that data will never be lost
TLS/credentialsTLS protects transport and server identity; a username/password authenticates with the brokerNeither replaces per-client publish/subscribe ACLs

MQTT 5 adds properties and subscription flags. When you select MQTT 3.1 or 3.1.1, you cannot rely on MQTT 5 features such as response topic, correlation data, content type, message expiry, user properties, no local, retain as published, retain handling, or session expiry. Pin the version supported by the broker before configuring nodes; do not rely on the client to guess.

For high-frequency MQTT and large-payload testing, follow the approach in Chapter 18: debug only allowlisted fields and limit the number of cases. See Chapter 5 for message-shape and data-type fundamentals.

Six Offline Checks Without Establishing a Broker Connection

  1. Create a topic contract.

    For each direction of data flow, record a placeholder topic, publisher, subscriber, payload schema, maximum byte size, permitted frequency, QoS, retained-message setting, and duplicate-handling strategy. Do not enter a real broker, client ID, or credentials.

  2. Select the protocol and session behavior.

    Explicitly record MQTT 3.1, 3.1.1, or 5. Then decide on clean session/clean start, client ID, automatic unsubscription, and MQTT 5 session expiry. Leave fields unsupported by the selected protocol blank.

  3. Read the example JSON offline.

    Open 14-mqtt-in-out.json. Confirm that both MQTT In and MQTT Out have d:true, that the broker configuration has autoConnect:false, and that the host, client ID, and topics are complete placeholders with no credentials.

  4. Check TLS and ACLs.

    In the written specification, require a controlled TLS configuration, server-certificate verification, separate client credentials, and least-privilege publish/subscribe topic ACLs. Never put secrets in a broker URL, Function node, flow export, or Debug output.

  5. Conditional: inventory package sources.

    Only when auditing preinstalled nodes or evaluating an installation, compare against this chapter's 25-entry bundled matrix. Record the exact npm package and pinned version, maintenance status, license, transitive dependencies, permissions, and removal procedure. This chapter does not install anything; MQTT-only readers may skip this step.

  6. Conditional: document package or Dashboard failures and recovery.

    Only when packages or Dashboard are involved, document package startup failures, route/Socket.IO problems, and recovery procedures. Record broker unreachability, certificate errors, ACL denials, duplicates, stale retained messages, and session recovery in the MQTT topic contract. Keep the relevant nodes disabled and perform no I/O.

Offline MQTT contract (not connection configuration)
broker: PLACEHOLDER_MQTT_BROKER_HOST
client id: PLACEHOLDER_MQTT_CLIENT_ID
subscribe: PLACEHOLDER_MQTT_INPUT_TOPIC
publish: PLACEHOLDER_MQTT_OUTPUT_TOPIC
protocol: PLACEHOLDER_MQTT_VERSION
max payload: PLACEHOLDER_LIMIT
credentials: store only in the controlled credentials store
network action: do not execute

End-of-Chapter Offline Acceptance Check

ArtifactExpected contentStop if
Topic contractPlaceholder topic, publisher/subscriber, payload shape/bytes/frequency, QoS, retained-message setting, ACLs, and duplicate handlingA real broker/client/topic/secret appears, or payload and ACL boundaries remain undefined
Protocol/session decisionPinned MQTT version, clean start/session behavior, client-ID rules, expiry, TLS server verification, and credentials storage locationThe design relies on broker auto-detection, shares a client ID, disables certificate verification, or uses fields unsupported by the protocol
Disabled-state checkMQTT In/Out have d:true, the broker has autoConnect:false, and no installation, connection, Dashboard, file, or serial action occursAny executable node is enabled, connects at startup, or requires broker access to complete acceptance

Node-RED 5.0.2 MQTT In, MQTT Out, and Broker Fields

MQTT In: Subscriptions and Output Data Types

Field5.0.2 optionsSecurity boundary
BrokerRequired mqtt-broker configuration referenceSelect only an approved configuration; do not accept an external broker override
Action/TopicA Static topic has no input; with a Dynamic topic, the node has one inputPrefer a fixed subscription filter; permit dynamic actions only from controlled internal messages
QoS0, 1, or 2This is the requested maximum subscription QoS; you must still handle duplicates and broker downgrades
MQTT 5 flagsnl (no local), rap (retain as published), and rh (retain handling 0/1/2)Shown and effective only for an MQTT 5 broker; define each value explicitly rather than copying defaults
Outputauto-detect, legacy auto, buffer, UTF-8 string, parsed JSON, or Base64Auto-detected types still require validation; with an explicit schema, prefer a fixed output type

MQTT In output includes at least msg.topic, msg.payload, msg.qos, and msg.retain. An MQTT 5 packet may also expose responseTopic, correlationData, contentType, messageExpiryInterval, payloadFormatIndicator, reasonString, and userProperties. Treat all of these as untrusted broker/message metadata; never use them directly to select a Home Assistant Action, file path, or HTTP URL.

MQTT Out: Publication Fields and Message Overrides

MQTT Out has Broker, Topic, QoS, and Retain fields. If Topic is blank, it may use msg.topic; if QoS or Retain is blank, it may use the corresponding message value. A topic, QoS, or retained-message setting fixed in the node takes precedence. This flexibility also means that an untrusted message can change publication behavior. Remove or validate msg.topic, msg.qos, and msg.retain on external input.

MQTT 5 also supports User Properties, Response Topic, Correlation Data, Content Type, and Message Expiry. A Response Topic is protocol metadata; it does not create a secure RPC mechanism. Design the reply-topic ACL, correlation uniqueness, timeout, duplicate handling, and late-reply handling separately. A publication topic cannot contain + or #.

mqtt-broker: Connection, Security, Sessions, and Messages

Tab/group5.0.2 fieldsConfiguration principle
ConnectionName, Broker, Port, Auto-connect, Use TLS/TLS config, Protocol Version 3/4/5, Client ID, and KeepaliveEnter a host or controlled scheme in Broker; pin the port, verify the server certificate with TLS, and use a unique client ID for each persistent session
SessionClean session (v3/v4) or Clean start (v5), and Auto unsubscribe; v5 also has Session Expiry and User PropertiesA non-clean session requires a client ID; impose limits and cleanup policies on offline queues and stale subscriptions
SecurityUsername and Password credentialsStore them in the Node-RED credentials store, not in a broker URL or flow JSON; use broker ACLs to restrict topics in both directions
MessagesBirth, Close, and Will each have Topic, Payload, QoS, and Retain fieldsConfigure them only for an explicit lifecycle requirement; avoid retained commands, and keep payloads fixed and free of secrets
MQTT 5 message propertiesContent Type, User Properties, Response Topic, Correlation Data, and Expiry; Will also has DelayUse only with v5; constrain byte size, type, and expiry, and never let external input select a control topic

When importing an old broker configuration, also inspect the persisted verifyservercert value. The legacy default defined by the 5.0.2 editor is false; if the TLS configuration does not provide rejectUnauthorized, the runtime uses that value as a fallback. Migrate an old configuration to an approved TLS configuration and confirm that the resulting value is rejectUnauthorized=true. Enabling only the TLS toggle indicates encrypted transport; it does not prove that the broker's identity is verified.

Protocol value 3 is MQTT 3.1 compatibility, 4 is MQTT 3.1.1, and 5 is MQTT 5. When auto-connect is disabled, 5.0.2 allows a controlled action message to connect or disconnect. That capability is not an entry point for this chapter: never wire an external payload from MQTT In or HTTP In directly to broker control. Because the Add-on's host_network:true setting may make more local services reachable, a broker allowlist and ACLs are especially important.

Example boundary: In 14-mqtt-in-out.json, both executable In/Out nodes are fixed at d:true. A configuration node does not have a d field, so autoConnect:false prevents it from establishing a connection. The MQTT In/Out broker fields reference only a configuration ID in the same file; the actual host, client ID, input topic, and output topic are all placeholders.

Role Summary for the Direct Dependencies in Add-on 22.0.1

The pinned node-red/package.json contains 25 direct dependencies: 19 provide Palette/configuration nodes, 1 is the Node-RED runtime, 1 is an editor theme, and 4 are wrapper/runtime support libraries. This is not the complete transitive dependency tree. Preinstalled means available; it does not mean that any flow has run the package. Readers interested only in MQTT may skip the reference inventory below.

Expand the complete matrix of 25 direct dependencies
Package/pinned versionRolePurpose and primary risk
[email protected]Wrapper support library, not a Palette nodeHashes passwords for HTTP Basic Auth; never expose plaintext or hash input, and do not misrepresent it as an available node
[email protected]Wrapper/runtime support library, not a Palette nodeParses YAML; still constrain the byte size, structure, and types of untrusted YAML
[email protected]Runtime baseline, not an additional Palette nodeProvides the editor, runtime, and core nodes; do not confuse its version with Add-on 22.0.1
[email protected]Palette nodesSchedules may repeat or trigger downstream actions at the wrong time because of time zones, DST, or restarts
[email protected]Palette/configuration nodesConnects to and controls Cast devices; pin the device, media URL, and network scope
[email protected]Palette nodeValidate increment/decrement/reset inputs and restart state to prevent an incorrect threshold from triggering an action
[email protected]Palette/configuration nodesCan read HA and perform actions; protect tokens and environment IDs, and constrain side effects node by node
[email protected]Palette/configuration nodesQueries/writes a database; pin query/write shapes, credentials, and retention
[email protected]Palette nodeHandle out-of-order, missing, and duplicate data, as well as post-deploy state, to avoid incorrect durations
[email protected]Palette/configuration nodesCan read and write OT/physical devices; pin host, unit, address, and function, and keep every write disabled
[email protected]Palette nodePin the time zone, locale, and input format to avoid parsing ambiguity or DST errors
[email protected]Palette nodeValidate persistent states and transitions; after recovery, confirm state before allowing an action
[email protected]Palette nodeLocation/time-zone data may be sensitive; restarts, DST, and polar-region dates may cause missed or duplicate events
[email protected]Palette nodeHandle time zones, DST, and midnight crossings explicitly so messages do not enter the wrong side-effect branch
[email protected]Palette nodeBase64 is encoding, not encryption; its output may still contain secrets
[email protected]Palette/configuration nodesReceiving or sending email creates network and data-exfiltration risks; pin recipients, attachments, and credentials
[email protected]Palette nodeFetches an external feed; pin the HTTPS URL, response limit, and timeout, and treat the content as untrusted
[email protected]Palette nodeCan probe through the host network; pin the host and frequency, and reject dynamic destinations
[email protected]Palette nodeDoes not provide cryptographic randomness; never use it for tokens, passwords, nonces, or authorization decisions
[email protected]Palette/configuration nodesCan read and write physical devices through the UART grant; pin the device path, baud rate, and command, and keep writes disabled
[email protected]Palette nodeValidate numeric types and limit the sample window to prevent unbounded state or incorrect smoothing
[email protected]Palette nodeCoordinates reveal sensitive location data; handle time zones, DST, and dates without a valid sunrise or sunset
@node-red-contrib-themes/[email protected]Editor theme, not a runtime Palette nodeChanges appearance only; it is neither a security control nor a flow feature
[email protected]Wrapper/runtime support library, not a Palette nodeProcesses data line by line; still constrain the size and errors of large or untrusted files
[email protected]Stack support library, not a Palette nodePresence in the list does not prove registration; stacks/logs may still expose paths and sensitive data

Cast, InfluxDB, Modbus, email, feedparser, ping, and serialport can perform network, database, or physical I/O. BigTimer, SunEvents, and suncalc-related nodes may generate messages autonomously based on time. Even apparently pure transformations such as Counter, moment, and smooth can pass an incorrect result to a downstream action. Follow Chapter 17 to separate computation from side effects; do not omit validation merely because a package is bundled.

Palette, npm_packages, and Startup Persistence

Palette Manager installs a node module, whose server-side JavaScript runs with the permissions of the Node-RED process; this is not merely a UI change that adds an editor icon. On every startup, the Add-on processes npm_packages by changing to /opt and running npm install --omit=dev --omit=optional. It first installs system_packages with the Alpine package manager, then processes npm packages, and finally runs eval on each line of init_commands. Any failure aborts initialization.

MethodPersistence/startup behaviorKey controls
Image-bundled pinsProvided by the Add-on image, with all 25 direct versions pinnedCompare the package matrix and node behavior when upgrading the Add-on
Palette ManagerManages extra nodes in the Node-RED user directory; the Add-on fixes nodesDir=/config/nodesPin version and source before installation; confirm that dependencies can be reconstructed after backup/restore
npm_packagesThe Supervisor option declaration persists, but package installation runs again whenever the Add-on startsUse a full package name plus an exact version; an unavailable registry or installation error prevents startup
system_packagesUpdates the index and then installs each item on every startupNative execution surface, architecture, repository availability, and startup time
init_commandsRuns shell eval line by line after installationIt is not a package manager; never put secrets in it or use it to bypass pinning, and do not run it in this chapter

Do not record only a package name or a loose semver range. At minimum, retain the exact version, official registry identity, source repository, license, maintainer, publication date, known advisories, Node/Node-RED compatibility, a transitive-tree summary, and a rollback version. Pinning a direct version does not make every transitive dependency immutable. Generate a reproducible lock/inventory in an isolated environment, then update it through the formal process.

Add-on backups explicitly exclude node_modules, so restoration does not reproduce the installation tree byte for byte. Custom declarations, package metadata, and an available registry must be sufficient to reconstruct the same dependencies. Startup-time installation also adds an availability dependency. Do not manage the same package with both Palette Manager and npm_packages, which would make ownership and version ambiguous.

File/File In/Watch and Mounted Storage

Node-RED core also includes File, File In, and Watch. The Add-on's media:rw and share:rw grants give the container potential read/write access; they do not automatically authorize a flow to use any path. If a file name comes from MQTT, Dashboard, or HTTP input, it can enable path traversal, overwriting, or data exfiltration. Pin the base directory, allowlist file names, constrain byte size and frequency, and keep all writes disabled. The same principle applies to serial nodes: uart:true is a grant, not approval for arbitrary device commands.

FlowFuse Dashboard 2 1.30.2: Optional and Not Bundled

The 25-entry dependency list for Add-on 22.0.1 does not include @flowfuse/node-red-dashboard. Pinned package version 1.30.2 declares Node >=14 and Node-RED >=3.0.0. Node-RED 5.0.2 is within those declared ranges, but you must still test it in the target Add-on. The package registers 5 configuration nodes and 22 ui-* widgets—a total of 27 registrations—and adds server code, browser code, an HTTP route, and Socket.IO communication.

Boundary1.30.2 behaviorRequired verification
Package identity@flowfuse/[email protected]Use the scoped package and exact version; do not accidentally select the unscoped legacy package
RouteThe ui-base path defaults to /dashboard and is mounted under Node-RED's httpNodeRootThe Add-on root is /endpoint; verify the actual external path, proxy rewrites, and conflicts in an isolated environment
PWA manifest/dashboard/manifest.webmanifest is a hard-coded route; a custom ui-base.path does not change it, and it sits outside the route-local Dashboard middleware for the custom pathWhen using a custom path, explicitly test this fixed route's external path, authentication, authorization, and expected response
HTTP authenticationDashboard has its own optional HTTP middleware; the Add-on editor, Ingress, and direct endpoint are separate layersInitial HTML, setup, assets, and page routes must all follow the same authentication and authorization policy
Socket.IOThe socket path combines httpNodeRoot, the Dashboard path, and socket.io; ioMiddleware can be configured separatelyTest the handshake, same-origin policy, session authentication, message-size limits, proxy upgrade/streaming, and reconnection
Browser inputButtons, forms, templates, and other widgets can send data back to a flowTreat all input as untrusted; enforce schemas, authorization, rate limits, and isolation from downstream side effects

The Add-on's direct NGINX /endpoint/ path does not pass through the editor's Supervisor auth_request. Ingress accepts only the Supervisor ingress source, but that does not imply that every Dashboard user has widget authorization. Verify whether http_node Basic Auth protects your route and Socket.IO session over the actual proxy path. With a custom Dashboard path, test the custom route and the hard-coded /dashboard/manifest.webmanifest separately for path and authentication behavior. Never assume that the Dashboard page, manifest, assets, and real-time channel are secure merely because the editor requires login.

Options only; no installation: The package named by the pinned README is the scoped @flowfuse/node-red-dashboard. This chapter provides neither Palette installation steps nor a directly usable npm_packages value. Before installing any optional package, complete the pinning, supply-chain, routing, and recovery plan described above.

Legacy Migration, Not a Drop-In Replacement

The old, unscoped node-red-dashboard is based on Angular v1 and is considered legacy; this chapter does not teach a fresh installation. The former scoped name @flowforge/node-red-dashboard is deprecated and no longer updated. FlowFuse Dashboard 2 is a rewrite. Do not claim that existing ui_* nodes, themes, layouts, custom templates, browser scripts, URLs, authentication, or client state will migrate automatically and unchanged.

First inventory the existing legacy flow's pages/groups/widgets, template code, routes, authentication, CSS, browser dependencies, and message contracts. Then rebuild and compare it page by page in an isolated copy. Running the legacy and new Dashboards in parallel also requires preventing conflicts in routes, Socket.IO, credentials, and duplicate side effects. Do not remove the old package first, and do not connect a new widget to a production action.

Troubleshooting

  • MQTT node remains disconnected: Keep In/Out disabled and check, in order, the placeholder, DNS, port, protocol version, TLS chain, server hostname, client ID, credentials, and broker ACL. Do not begin by disabling certificate validation or switching to anonymous access.
  • Duplicate messages arrive: QoS 1, reconnection, or a subscriber restart may cause redelivery. Use a stable message ID/business key for bounded deduplication and record the retention period. Do not assume that QoS 2 provides end-to-end exactly-once side effects for HA, email, or a database.
  • A new subscription immediately receives an old command: Inspect the packet's retain flag and the broker's retained state. Do not use this chapter's example to publish a clearing message; first have the broker administration process confirm the topic, permissions, and scope of impact.
  • Subscriptions behave unexpectedly after a non-clean session: Confirm that the client ID is unique and stable, and check session expiry, automatic unsubscription, broker queue limits, and whether an old client remains online. Never share a client ID across multiple instances.
  • JSON output reports a parse error: Confirm the content type, encoding, and publisher schema. Do not switch unparseable bytes to auto-detect and then treat the result as a trusted object. Limit payload byte size and route errors to a bounded Catch path.
  • The Add-on fails to start after a custom package is added: Check the exact package, architecture, registry availability, and the fail-fast system_packages → npm_packages → init_commands sequence. Use the recorded rollback version; do not repeatedly try unpinned versions.
  • A package appears in the Palette inventory, but the expected node does not: Check the package's role first. bcryptjs, js-yaml, line-by-line, source-map-support, the Node-RED runtime, and the theme collection are not ordinary runtime Palette nodes. Then inspect the package's actual registrations and startup log.
  • The Dashboard page opens, but real-time data does not update: Check the external route rewrite, Socket.IO path, HTTP and Socket.IO middleware, proxy streaming/upgrade, same-origin policy, and session separately. Do not expose the direct endpoint or remove authentication for troubleshooting.
  • A migrated legacy Dashboard flow has a different layout/template: Dashboard 2 is not a drop-in replacement. Rebuild configuration nodes, widgets, layouts, CSS, templates, and message contracts page by page. Do not freshly install the legacy package or directly interchange the two sets of node names.

Pinned Versions and Official Documentation

This chapter uses exact commits to verify MQTT fields, the 25 direct dependencies, startup installation order, and Dashboard 2 boundaries. External brokers and organizational ACLs are environment-specific policies; this source code does not provide them automatically.

Frequently Asked Questions

Does QoS 2 guarantee that a Home Assistant Action runs only once?
No. QoS 2 governs protocol delivery between an MQTT client and broker; it does not cover flow restarts, node retries, the HA API, or physical devices. Side effects still require an idempotency key, bounded deduplication, an acknowledgment signal, and a retry limit.
The broker ACL has not been approved. Can I test with a shared administrator account first?
No. Administrator credentials mask publish/subscribe authorization errors and magnify the impact of an incorrectly sent retained command. Stop the connection design until each client has a least-privilege topic ACL and separate credentials. This chapter's offline contract does not require a broker account.
The example mqtt-broker configuration does not have d:true. Will it connect automatically?
A configuration node does not have the executable node's d field. The example fixes autoConnect at false, and both MQTT In/Out nodes have d:true. The host and client ID are also placeholders, so do not replace them, enable the nodes, or deploy.
The Add-on preinstalls 25 packages. Does that mean the Palette gains 25 sets of nodes?
No. The 25 entries are direct dependencies: 19 are Palette/configuration-node packages; the others are the Node-RED runtime, a theme, and support libraries including bcryptjs, js-yaml, line-by-line, and source-map-support. Transitive dependencies are not included in the count of 25.
Can I enter only a package name in npm_packages and automatically track the latest version?
You should not. Installation runs again at every startup, so an unpinned version introduces unpredictable drift and availability risk. First record the exact version, source, compatibility, transitive tree, and rollback version. This chapter does not perform an installation.
Does FlowFuse Dashboard 2 come with the Add-on?
No. @flowfuse/[email protected] is optional and not bundled; it is not one of the 25 bundled direct dependencies. Adding it introduces routes, Socket.IO, and browser input, so it requires separate supply-chain, authentication, and proxy design.
Can I freshly install the old node-red-dashboard in a new flow?
This guide does not recommend that. The unscoped node-red-dashboard is an Angular v1 legacy package; the new scoped package is a rewrite, not a drop-in replacement. For existing systems, inventory and migrate in stages rather than creating a new legacy deployment.