[{"data":1,"prerenderedAt":3173},["ShallowReactive",2],{"docs-\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Fnode-red-messages\u002F":3,"featureCatalog":1723,"docs-nav":2128},{"id":4,"title":5,"body":6,"description":16,"editUrl":1713,"extension":1714,"layout":1715,"meta":1716,"metaTitle":5,"navGroup":1715,"navGroupOrder":1715,"navOrder":139,"navTitle":1717,"navigation":33,"originalPath":1715,"path":1718,"redirect":1715,"seo":1719,"stem":1720,"updated":1721,"version":1715,"__hash__":1722},"docs\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Fnode-red-messages.md","Understanding Node-RED Messages",{"type":7,"value":8,"toc":1679},"minimark",[9,13,17,20,25,28,47,50,55,66,69,143,158,162,169,172,201,204,222,226,229,236,239,286,298,302,305,309,321,324,393,402,406,409,509,529,594,597,674,678,681,684,687,719,722,725,829,833,836,840,844,851,870,873,880,962,966,969,975,1002,1005,1008,1115,1121,1185,1188,1192,1201,1204,1218,1222,1228,1231,1248,1255,1259,1262,1266,1269,1274,1335,1340,1391,1397,1409,1421,1425,1436,1440,1480,1484,1518,1522,1525,1529,1550,1554,1585,1589,1592,1596,1630,1634,1672,1675],[10,11,5],"h1",{"id":12},"understanding-node-red-messages",[14,15,16],"p",{},"Node-RED operates by passing messages between nodes to create dynamic IoT, automation, and data-processing workflows. Each message transports data that nodes read, modify, process, or analyze. Understanding message structure and handling is essential for building reliable flows. Poor message management can cause subtle bugs like data overwrites, infinite loops, or system crashes.",[14,18,19],{},"This guide explores Node-RED message mechanics, common pitfalls, and best practices for maintaining smooth, error-free data flow.",[21,22,24],"h2",{"id":23},"what-are-node-red-messages","What Are Node-RED Messages?",[14,26,27],{},"Messages in Node-RED are data packets that flow between nodes in your workflow. Node-RED follows an event-driven architecture where nodes act as both event emitters and listeners, with messages serving as the communication medium between them.",[14,29,30,43],{},[31,32,38],"video",{"autoPlay":33,"loop":33,"muted":33,"playsInline":33,"ariaLabel":34,"width":35,"height":36,"preload":37},true,"Node-RED message passing animation",800,133,"none",[39,40],"source",{"src":41,"type":42},"\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Fimages\u002Fnode-red-message-passing.webm","video\u002Fwebm",[44,45,46],"em",{},"Node-RED message passing visualization",[14,48,49],{},"Messages carry the data that powers your workflows, sensor readings, user inputs, API responses, and more. Fundamentally, Node-RED messages are JavaScript objects, providing a flexible structure for managing and transferring data throughout your flows.",[51,52,54],"h3",{"id":53},"javascript-objects-primer","JavaScript Objects Primer",[14,56,57,58,65],{},"A ",[59,60,64],"a",{"href":61,"rel":62},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=BRSg22VacUA",[63],"nofollow","JavaScript object"," is a data structure that stores multiple values in key-value pairs. Each key (property) associates with a specific value, allowing organized access to related data.",[14,67,68],{},"Example:",[70,71,76],"pre",{"className":72,"code":73,"language":74,"meta":75,"style":75},"language-javascript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  name: \"Bob\",\n  age: 24,\n  married: true\n}\n","javascript","",[77,78,79,88,111,125,137],"code",{"__ignoreMap":75},[80,81,84],"span",{"class":82,"line":83},"line",1,[80,85,87],{"class":86},"sMK4o","{\n",[80,89,91,95,98,101,105,108],{"class":82,"line":90},2,[80,92,94],{"class":93},"sBMFI","  name",[80,96,97],{"class":86},":",[80,99,100],{"class":86}," \"",[80,102,104],{"class":103},"sfazB","Bob",[80,106,107],{"class":86},"\"",[80,109,110],{"class":86},",\n",[80,112,114,117,119,123],{"class":82,"line":113},3,[80,115,116],{"class":93},"  age",[80,118,97],{"class":86},[80,120,122],{"class":121},"sbssI"," 24",[80,124,110],{"class":86},[80,126,128,131,133],{"class":82,"line":127},4,[80,129,130],{"class":93},"  married",[80,132,97],{"class":86},[80,134,136],{"class":135},"sfNiH"," true\n",[80,138,140],{"class":82,"line":139},5,[80,141,142],{"class":86},"}\n",[14,144,145,146,149,150,153,154,157],{},"Here, ",[77,147,148],{},"name",", ",[77,151,152],{},"age",", and ",[77,155,156],{},"married"," are object properties. Node-RED messages use this same structure to organize and transport data within flows.",[21,159,161],{"id":160},"anatomy-of-node-red-messages","Anatomy of Node-RED Messages",[14,163,164,165,168],{},"Node-RED messages are referenced as ",[77,166,167],{},"msg"," by default, and nodes are designed around this convention.",[14,170,171],{},"Key message properties include:",[173,174,175,185,193],"ul",{},[176,177,178,184],"li",{},[179,180,181],"strong",{},[77,182,183],{},"msg._msgid",": A unique identifier automatically assigned by Node-RED for tracking and debugging messages within flows.",[176,186,187,192],{},[179,188,189],{},[77,190,191],{},"msg.payload",": The primary data container. This holds the main information that nodes process, sensor readings, user input, computed results, etc.",[176,194,195,200],{},[179,196,197],{},[77,198,199],{},"msg.topic",": An optional property for categorizing or identifying messages, useful for routing or filtering based on context.",[14,202,203],{},"These are the most frequently used properties, though additional custom properties can be added as needed.",[14,205,206,207,210,211,214,215,218,219,221],{},"The ",[77,208,209],{},"_msgid"," property appears automatically, even when sending an empty object between nodes. However, ",[77,212,213],{},"payload"," and ",[77,216,217],{},"topic"," are not always present, their inclusion depends on whether nodes append them. Most Node-RED nodes, including community-contributed ones, use ",[77,220,213],{}," as the standard communication property.",[21,223,225],{"id":224},"data-types-in-node-red-messages","Data Types in Node-RED Messages",[14,227,228],{},"Understanding data types is crucial when working with Node-RED messages. Messages themselves must always be JavaScript objects, or Node-RED will throw an error.",[14,230,231,232,235],{},"One exception: you can send ",[77,233,234],{},"null"," as a message. This effectively stops message propagation, preventing data from flowing to subsequent nodes.",[14,237,238],{},"Message property values can be any JavaScript-supported data type:",[173,240,241,248,255,262,269,276,283],{},[176,242,243],{},[59,244,247],{"href":245,"rel":246},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString",[63],"String",[176,249,250],{},[59,251,254],{"href":252,"rel":253},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FNumber",[63],"Number",[176,256,257],{},[59,258,261],{"href":259,"rel":260},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FArray",[63],"Array",[176,263,264],{},[59,265,268],{"href":266,"rel":267},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FBoolean",[63],"Boolean",[176,270,271],{},[59,272,275],{"href":273,"rel":274},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FObject",[63],"Object",[176,277,278],{},[59,279,282],{"href":280,"rel":281},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FArrayBuffer",[63],"Buffer",[176,284,285],{},"Other complex data types",[14,287,288,295],{},[31,289,292],{"autoPlay":33,"loop":33,"muted":33,"playsInline":33,"ariaLabel":290,"width":35,"height":291,"preload":37},"Inject node sending different data types",301,[39,293],{"src":294,"type":42},"\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Fimages\u002Fnode-red-data-types.webm",[44,296,297],{},"Various data types supported by Node-RED",[21,299,301],{"id":300},"how-to-clone-messages-and-properties","How to Clone Messages and Properties",[14,303,304],{},"Cloning creates an independent copy of a message or its properties, allowing modifications without affecting the original. This is essential when sending different versions of data to multiple flow branches or when preserving original data for comparison.",[51,306,308],{"id":307},"using-the-change-node","Using the Change Node",[14,310,206,311,314,315,317,318,320],{},[179,312,313],{},"Change"," node provides a visual interface for modifying and cloning message properties. Note that you cannot clone the entire ",[77,316,167],{}," object in change node at once, properties must be copied individually. The Change node can clone properties to other ",[77,319,167],{}," properties, or to flow\u002Fglobal context.",[14,322,323],{},"Steps to clone using the Change node:",[325,326,327,333,336,352],"ol",{},[176,328,329,330,332],{},"Double-click on the ",[179,331,313],{}," node to open its configuration dialogue.",[176,334,335],{},"You will see an interface with an existing item added by default.",[176,337,338,339,149,342,149,345,153,348,351],{},"On the left side of the field, you will see options like ",[179,340,341],{},"\"Set\"",[179,343,344],{},"\"Change\"",[179,346,347],{},"\"Delete\"",[179,349,350],{},"\"Move\"",". You can use these options to perform the corresponding operations on the message.",[176,353,354,355,357,358,361,362,364,365,368,369,371,372,375,376,379,380,383,384,386,387,389,390,392],{},"To clone the property ",[77,356,191],{}," to ",[77,359,360],{},"flow.data",", select the ",[179,363,341],{}," action. In the first ",[179,366,367],{},"\"Property\""," field, enter ",[77,370,213],{},", and in the ",[179,373,374],{},"\"to the value\""," field, select ",[179,377,378],{},"flow"," and enter ",[77,381,382],{},"data",". For cloning ",[77,385,167],{}," properties to new ",[77,388,167],{}," properties, select ",[179,391,167],{}," in the second field and specify the new property name.",[14,394,395,396,401],{},"For comprehensive information on Change node capabilities, including Delete, Move, and Change actions, refer to the ",[59,397,400],{"href":398,"rel":399},"https:\u002F\u002Fnodered.org\u002Fdocs\u002Fuser-guide\u002Fnodes",[63],"Change Node documentation",".",[51,403,405],{"id":404},"using-the-function-node","Using the Function Node",[14,407,408],{},"The Function node offers programmatic control over message cloning using JavaScript:",[70,410,414],{"className":411,"code":412,"language":413,"meta":75,"style":75},"language-js shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F Clone the entire message\nvar newMsg = RED.util.cloneMessage(msg);\n\n\u002F\u002F Modify the clone safely (original remains unchanged)\nnewMsg.payload = \"Modified data\";\n\n\u002F\u002F Return the original message\nreturn msg;\n","js",[77,415,416,422,455,460,465,486,491,497],{"__ignoreMap":75},[80,417,418],{"class":82,"line":83},[80,419,421],{"class":420},"sHwdD","\u002F\u002F Clone the entire message\n",[80,423,424,428,432,435,438,440,443,445,449,452],{"class":82,"line":90},[80,425,427],{"class":426},"spNyl","var",[80,429,431],{"class":430},"sTEyZ"," newMsg ",[80,433,434],{"class":86},"=",[80,436,437],{"class":430}," RED",[80,439,401],{"class":86},[80,441,442],{"class":430},"util",[80,444,401],{"class":86},[80,446,448],{"class":447},"s2Zo4","cloneMessage",[80,450,451],{"class":430},"(msg)",[80,453,454],{"class":86},";\n",[80,456,457],{"class":82,"line":113},[80,458,459],{"emptyLinePlaceholder":33},"\n",[80,461,462],{"class":82,"line":127},[80,463,464],{"class":420},"\u002F\u002F Modify the clone safely (original remains unchanged)\n",[80,466,467,470,472,475,477,479,482,484],{"class":82,"line":139},[80,468,469],{"class":430},"newMsg",[80,471,401],{"class":86},[80,473,474],{"class":430},"payload ",[80,476,434],{"class":86},[80,478,100],{"class":86},[80,480,481],{"class":103},"Modified data",[80,483,107],{"class":86},[80,485,454],{"class":86},[80,487,489],{"class":82,"line":488},6,[80,490,459],{"emptyLinePlaceholder":33},[80,492,494],{"class":82,"line":493},7,[80,495,496],{"class":420},"\u002F\u002F Return the original message\n",[80,498,500,504,507],{"class":82,"line":499},8,[80,501,503],{"class":502},"s7zQu","return",[80,505,506],{"class":430}," msg",[80,508,454],{"class":86},[14,510,511,514,515,518,519,522,523,525,526,528],{},[179,512,513],{},"Critical Note:"," Direct assignment like ",[77,516,517],{},"let newMsg = msg;"," does ",[179,520,521],{},"not"," create a true clone. It creates a reference to the same object, meaning changes to ",[77,524,469],{}," will affect ",[77,527,167],{}," as both point to the same data.",[70,530,532],{"className":411,"code":531,"language":413,"meta":75,"style":75},"\u002F\u002F This creates a reference, NOT a clone\nvar newMsg = msg;\n\n\u002F\u002F Modifying newMsg also modifies the original msg\nnewMsg.payload = \"Modified data\";\n\nreturn msg; \u002F\u002F The original is now changed!\n",[77,533,534,539,551,555,560,578,582],{"__ignoreMap":75},[80,535,536],{"class":82,"line":83},[80,537,538],{"class":420},"\u002F\u002F This creates a reference, NOT a clone\n",[80,540,541,543,545,547,549],{"class":82,"line":90},[80,542,427],{"class":426},[80,544,431],{"class":430},[80,546,434],{"class":86},[80,548,506],{"class":430},[80,550,454],{"class":86},[80,552,553],{"class":82,"line":113},[80,554,459],{"emptyLinePlaceholder":33},[80,556,557],{"class":82,"line":127},[80,558,559],{"class":420},"\u002F\u002F Modifying newMsg also modifies the original msg\n",[80,561,562,564,566,568,570,572,574,576],{"class":82,"line":139},[80,563,469],{"class":430},[80,565,401],{"class":86},[80,567,474],{"class":430},[80,569,434],{"class":86},[80,571,100],{"class":86},[80,573,481],{"class":103},[80,575,107],{"class":86},[80,577,454],{"class":86},[80,579,580],{"class":82,"line":488},[80,581,459],{"emptyLinePlaceholder":33},[80,583,584,586,588,591],{"class":82,"line":493},[80,585,503],{"class":502},[80,587,506],{"class":430},[80,589,590],{"class":86},";",[80,592,593],{"class":420}," \u002F\u002F The original is now changed!\n",[14,595,596],{},"To clone specific properties only:",[70,598,600],{"className":411,"code":599,"language":413,"meta":75,"style":75},"\u002F\u002F Clone selective properties\nvar newMsg = {};\nnewMsg.payload = msg.payload;  \u002F\u002F Copy payload\nnewMsg.topic = msg.topic;      \u002F\u002F Copy topic\n\nreturn newMsg;\n",[77,601,602,607,618,639,661,665],{"__ignoreMap":75},[80,603,604],{"class":82,"line":83},[80,605,606],{"class":420},"\u002F\u002F Clone selective properties\n",[80,608,609,611,613,615],{"class":82,"line":90},[80,610,427],{"class":426},[80,612,431],{"class":430},[80,614,434],{"class":86},[80,616,617],{"class":86}," {};\n",[80,619,620,622,624,626,628,630,632,634,636],{"class":82,"line":113},[80,621,469],{"class":430},[80,623,401],{"class":86},[80,625,474],{"class":430},[80,627,434],{"class":86},[80,629,506],{"class":430},[80,631,401],{"class":86},[80,633,213],{"class":430},[80,635,590],{"class":86},[80,637,638],{"class":420},"  \u002F\u002F Copy payload\n",[80,640,641,643,645,648,650,652,654,656,658],{"class":82,"line":127},[80,642,469],{"class":430},[80,644,401],{"class":86},[80,646,647],{"class":430},"topic ",[80,649,434],{"class":86},[80,651,506],{"class":430},[80,653,401],{"class":86},[80,655,217],{"class":430},[80,657,590],{"class":86},[80,659,660],{"class":420},"      \u002F\u002F Copy topic\n",[80,662,663],{"class":82,"line":139},[80,664,459],{"emptyLinePlaceholder":33},[80,666,667,669,672],{"class":82,"line":488},[80,668,503],{"class":502},[80,670,671],{"class":430}," newMsg",[80,673,454],{"class":86},[21,675,677],{"id":676},"adding-new-properties-to-messages","Adding New Properties to Messages",[14,679,680],{},"Node-RED messages are JavaScript objects, making them highly flexible for customization. You can add unlimited properties to carry additional data through your flow, metadata, tags, timestamps, configuration details, and more.",[51,682,308],{"id":683},"using-the-change-node-1",[14,685,686],{},"The Change node allows property addition without coding:",[325,688,689,695,702,713],{},[176,690,691,692,694],{},"Drag a ",[179,693,313],{}," node into your flow and open configuration.",[176,696,697,698,701],{},"Select the ",[179,699,700],{},"Set"," action.",[176,703,704,705,708,709,712],{},"In the ",[179,706,707],{},"Property"," field, enter the new property name (e.g., ",[77,710,711],{},"msg.customData",").",[176,714,704,715,718],{},[179,716,717],{},"To"," field, enter the value, this can be a string, number, boolean, JSONata expression, or reference to another property.",[51,720,405],{"id":721},"using-the-function-node-1",[14,723,724],{},"For programmatic control, add properties in a Function node:",[70,726,728],{"className":411,"code":727,"language":413,"meta":75,"style":75},"\u002F\u002F Add custom properties to the message\nmsg.customData = {\n    description: \"Sensor reading from device A\",\n    timestamp: new Date().toISOString(),\n    location: \"Building 3, Floor 2\"\n};\n\n\u002F\u002F Return the enhanced message\nreturn msg;\n",[77,729,730,735,749,766,791,806,811,815,820],{"__ignoreMap":75},[80,731,732],{"class":82,"line":83},[80,733,734],{"class":420},"\u002F\u002F Add custom properties to the message\n",[80,736,737,739,741,744,746],{"class":82,"line":90},[80,738,167],{"class":430},[80,740,401],{"class":86},[80,742,743],{"class":430},"customData ",[80,745,434],{"class":86},[80,747,748],{"class":86}," {\n",[80,750,751,755,757,759,762,764],{"class":82,"line":113},[80,752,754],{"class":753},"swJcz","    description",[80,756,97],{"class":86},[80,758,100],{"class":86},[80,760,761],{"class":103},"Sensor reading from device A",[80,763,107],{"class":86},[80,765,110],{"class":86},[80,767,768,771,773,776,779,782,784,787,789],{"class":82,"line":127},[80,769,770],{"class":753},"    timestamp",[80,772,97],{"class":86},[80,774,775],{"class":86}," new",[80,777,778],{"class":447}," Date",[80,780,781],{"class":430},"()",[80,783,401],{"class":86},[80,785,786],{"class":447},"toISOString",[80,788,781],{"class":430},[80,790,110],{"class":86},[80,792,793,796,798,800,803],{"class":82,"line":139},[80,794,795],{"class":753},"    location",[80,797,97],{"class":86},[80,799,100],{"class":86},[80,801,802],{"class":103},"Building 3, Floor 2",[80,804,805],{"class":86},"\"\n",[80,807,808],{"class":82,"line":488},[80,809,810],{"class":86},"};\n",[80,812,813],{"class":82,"line":493},[80,814,459],{"emptyLinePlaceholder":33},[80,816,817],{"class":82,"line":499},[80,818,819],{"class":420},"\u002F\u002F Return the enhanced message\n",[80,821,823,825,827],{"class":82,"line":822},9,[80,824,503],{"class":502},[80,826,506],{"class":430},[80,828,454],{"class":86},[21,830,832],{"id":831},"deleting-and-moving-message-properties","Deleting and Moving Message Properties",[14,834,835],{},"In addition to adding and cloning properties, you may need to remove or relocate properties within messages.",[51,837,839],{"id":838},"deleting-properties","Deleting Properties",[841,842,308],"h4",{"id":843},"using-the-change-node-2",[14,845,846,847,850],{},"Use the ",[179,848,849],{},"Delete"," action to remove unwanted properties from messages:",[325,852,853,857,862],{},[176,854,329,855,332],{},[179,856,313],{},[176,858,697,859,861],{},[179,860,347],{}," action from the dropdown.",[176,863,704,864,866,867,712],{},[179,865,367],{}," field, specify the property to remove (e.g., ",[77,868,869],{},"msg.tempData",[841,871,405],{"id":872},"using-the-function-node-2",[14,874,875,876,879],{},"To delete properties programmatically in a Function node, use the ",[77,877,878],{},"delete"," operator:",[70,881,883],{"className":411,"code":882,"language":413,"meta":75,"style":75},"\u002F\u002F Delete a single property\ndelete msg.tempData;\n\n\u002F\u002F Delete multiple properties\ndelete msg.tempData;\ndelete msg.oldPayload;\ndelete msg.metadata;\n\nreturn msg;\n",[77,884,885,890,903,907,912,924,937,950,954],{"__ignoreMap":75},[80,886,887],{"class":82,"line":83},[80,888,889],{"class":420},"\u002F\u002F Delete a single property\n",[80,891,892,894,896,898,901],{"class":82,"line":90},[80,893,878],{"class":86},[80,895,506],{"class":430},[80,897,401],{"class":86},[80,899,900],{"class":430},"tempData",[80,902,454],{"class":86},[80,904,905],{"class":82,"line":113},[80,906,459],{"emptyLinePlaceholder":33},[80,908,909],{"class":82,"line":127},[80,910,911],{"class":420},"\u002F\u002F Delete multiple properties\n",[80,913,914,916,918,920,922],{"class":82,"line":139},[80,915,878],{"class":86},[80,917,506],{"class":430},[80,919,401],{"class":86},[80,921,900],{"class":430},[80,923,454],{"class":86},[80,925,926,928,930,932,935],{"class":82,"line":488},[80,927,878],{"class":86},[80,929,506],{"class":430},[80,931,401],{"class":86},[80,933,934],{"class":430},"oldPayload",[80,936,454],{"class":86},[80,938,939,941,943,945,948],{"class":82,"line":493},[80,940,878],{"class":86},[80,942,506],{"class":430},[80,944,401],{"class":86},[80,946,947],{"class":430},"metadata",[80,949,454],{"class":86},[80,951,952],{"class":82,"line":499},[80,953,459],{"emptyLinePlaceholder":33},[80,955,956,958,960],{"class":82,"line":822},[80,957,503],{"class":502},[80,959,506],{"class":430},[80,961,454],{"class":86},[51,963,965],{"id":964},"moving-properties","Moving Properties",[841,967,308],{"id":968},"using-the-change-node-3",[14,970,846,971,974],{},[179,972,973],{},"Move"," action to relocate a property to a new location while removing it from the original location:",[325,976,977,981,985,993],{},[176,978,329,979,332],{},[179,980,313],{},[176,982,697,983,861],{},[179,984,350],{},[176,986,987,988,990,991,712],{},"In the first ",[179,989,367],{}," field, specify the source property (e.g., ",[77,992,191],{},[176,994,704,995,998,999,712],{},[179,996,997],{},"\"to\""," field, specify the destination property (e.g., ",[77,1000,1001],{},"msg.oldPayload",[841,1003,405],{"id":1004},"using-the-function-node-3",[14,1006,1007],{},"To move a property programmatically in a Function node, copy the property to its new location and then delete it from the original:",[70,1009,1011],{"className":411,"code":1010,"language":413,"meta":75,"style":75},"\u002F\u002F Move msg.payload to msg.oldPayload\nmsg.oldPayload = msg.payload;\ndelete msg.payload;\n\n\u002F\u002F Or move a nested property\nmsg.backup = {\n    data: msg.tempData\n};\ndelete msg.tempData;\n\nreturn msg;\n",[77,1012,1013,1018,1037,1049,1053,1058,1071,1085,1089,1101,1106],{"__ignoreMap":75},[80,1014,1015],{"class":82,"line":83},[80,1016,1017],{"class":420},"\u002F\u002F Move msg.payload to msg.oldPayload\n",[80,1019,1020,1022,1024,1027,1029,1031,1033,1035],{"class":82,"line":90},[80,1021,167],{"class":430},[80,1023,401],{"class":86},[80,1025,1026],{"class":430},"oldPayload ",[80,1028,434],{"class":86},[80,1030,506],{"class":430},[80,1032,401],{"class":86},[80,1034,213],{"class":430},[80,1036,454],{"class":86},[80,1038,1039,1041,1043,1045,1047],{"class":82,"line":113},[80,1040,878],{"class":86},[80,1042,506],{"class":430},[80,1044,401],{"class":86},[80,1046,213],{"class":430},[80,1048,454],{"class":86},[80,1050,1051],{"class":82,"line":127},[80,1052,459],{"emptyLinePlaceholder":33},[80,1054,1055],{"class":82,"line":139},[80,1056,1057],{"class":420},"\u002F\u002F Or move a nested property\n",[80,1059,1060,1062,1064,1067,1069],{"class":82,"line":488},[80,1061,167],{"class":430},[80,1063,401],{"class":86},[80,1065,1066],{"class":430},"backup ",[80,1068,434],{"class":86},[80,1070,748],{"class":86},[80,1072,1073,1076,1078,1080,1082],{"class":82,"line":493},[80,1074,1075],{"class":753},"    data",[80,1077,97],{"class":86},[80,1079,506],{"class":430},[80,1081,401],{"class":86},[80,1083,1084],{"class":430},"tempData\n",[80,1086,1087],{"class":82,"line":499},[80,1088,810],{"class":86},[80,1090,1091,1093,1095,1097,1099],{"class":82,"line":822},[80,1092,878],{"class":86},[80,1094,506],{"class":430},[80,1096,401],{"class":86},[80,1098,900],{"class":430},[80,1100,454],{"class":86},[80,1102,1104],{"class":82,"line":1103},10,[80,1105,459],{"emptyLinePlaceholder":33},[80,1107,1109,1111,1113],{"class":82,"line":1108},11,[80,1110,503],{"class":502},[80,1112,506],{"class":430},[80,1114,454],{"class":86},[14,1116,1117,1120],{},[179,1118,1119],{},"Important Note:"," Just like with cloning, if you need to move a property that contains an object or array and want to ensure the original is completely removed from memory, you should clone it first:",[70,1122,1124],{"className":411,"code":1123,"language":413,"meta":75,"style":75},"\u002F\u002F Move with cloning (for objects\u002Farrays)\nmsg.oldPayload = RED.util.cloneMessage(msg.payload);\ndelete msg.payload;\n\nreturn msg;\n",[77,1125,1126,1131,1161,1173,1177],{"__ignoreMap":75},[80,1127,1128],{"class":82,"line":83},[80,1129,1130],{"class":420},"\u002F\u002F Move with cloning (for objects\u002Farrays)\n",[80,1132,1133,1135,1137,1139,1141,1143,1145,1147,1149,1151,1154,1156,1159],{"class":82,"line":90},[80,1134,167],{"class":430},[80,1136,401],{"class":86},[80,1138,1026],{"class":430},[80,1140,434],{"class":86},[80,1142,437],{"class":430},[80,1144,401],{"class":86},[80,1146,442],{"class":430},[80,1148,401],{"class":86},[80,1150,448],{"class":447},[80,1152,1153],{"class":430},"(msg",[80,1155,401],{"class":86},[80,1157,1158],{"class":430},"payload)",[80,1160,454],{"class":86},[80,1162,1163,1165,1167,1169,1171],{"class":82,"line":113},[80,1164,878],{"class":86},[80,1166,506],{"class":430},[80,1168,401],{"class":86},[80,1170,213],{"class":430},[80,1172,454],{"class":86},[80,1174,1175],{"class":82,"line":127},[80,1176,459],{"emptyLinePlaceholder":33},[80,1178,1179,1181,1183],{"class":82,"line":139},[80,1180,503],{"class":502},[80,1182,506],{"class":430},[80,1184,454],{"class":86},[14,1186,1187],{},"This ensures that the moved property is independent and modifications to the new location won't affect any lingering references to the old location.",[21,1189,1191],{"id":1190},"handling-json-messages","Handling JSON Messages",[14,1193,1194,1195,1200],{},"Working with ",[59,1196,1199],{"href":1197,"rel":1198},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FLearn\u002FJavaScript\u002FObjects\u002FJSON",[63],"JSON"," is common in Node-RED, especially with APIs and IoT data. JSON (JavaScript Object Notation) is a lightweight data-exchange format.",[14,1202,1203],{},"Two forms of JSON exist in Node-RED:",[325,1205,1206,1212],{},[176,1207,1208,1211],{},[179,1209,1210],{},"JSON Object",": A structured JavaScript object that can be directly manipulated, access properties, modify values, pass through nodes seamlessly.",[176,1213,1214,1217],{},[179,1215,1216],{},"JSON String",": A serialized JSON representation, commonly used when transmitting data between systems. Unlike objects, JSON strings cannot be directly manipulated as structured data.",[51,1219,1221],{"id":1220},"converting-json-string-to-json-object","Converting JSON String to JSON Object",[14,1223,1224,1225,1227],{},"To work with a JSON string as a JavaScript object, convert it using the ",[179,1226,1199],{}," node. This node parses the string into a usable object structure.",[14,1229,1230],{},"Steps:",[325,1232,1233,1239,1242,1245],{},[176,1234,1235,1236,1238],{},"Drag the ",[179,1237,1199],{}," node onto the canvas.",[176,1240,1241],{},"Double-click to configure.",[176,1243,1244],{},"Set the action to \"Always convert to JavaScript Object\" and click Done.",[176,1246,1247],{},"Connect the JSON node between the source node (sending the JSON string) and the destination node (requiring the parsed object).",[14,1249,1250,1251,401],{},"The JSON node automatically converts incoming JSON strings into JavaScript objects. For more details, see the ",[59,1252,1254],{"href":1253},"\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fparsers\u002Fjson\u002F","JSON node documentation",[21,1256,1258],{"id":1257},"common-mistakes-to-avoid","Common Mistakes to Avoid",[14,1260,1261],{},"Avoiding these pitfalls ensures smooth flow operation:",[51,1263,1265],{"id":1264},"_1-adding-properties-to-non-object-types","1. Adding Properties to Non-Object Types",[14,1267,1268],{},"Attempting to add properties to primitive types (strings, numbers) causes errors.",[14,1270,1271],{},[179,1272,1273],{},"Incorrect:",[70,1275,1277],{"className":72,"code":1276,"language":74,"meta":75,"style":75},"msg.payload = 'stringValue';\nmsg.payload.newProperty = 'value';  \u002F\u002F Error: Cannot add property to string\nreturn msg;\n",[77,1278,1279,1300,1327],{"__ignoreMap":75},[80,1280,1281,1283,1285,1287,1289,1292,1295,1298],{"class":82,"line":83},[80,1282,167],{"class":430},[80,1284,401],{"class":86},[80,1286,474],{"class":430},[80,1288,434],{"class":86},[80,1290,1291],{"class":86}," '",[80,1293,1294],{"class":103},"stringValue",[80,1296,1297],{"class":86},"'",[80,1299,454],{"class":86},[80,1301,1302,1304,1306,1308,1310,1313,1315,1317,1320,1322,1324],{"class":82,"line":90},[80,1303,167],{"class":430},[80,1305,401],{"class":86},[80,1307,213],{"class":430},[80,1309,401],{"class":86},[80,1311,1312],{"class":430},"newProperty ",[80,1314,434],{"class":86},[80,1316,1291],{"class":86},[80,1318,1319],{"class":103},"value",[80,1321,1297],{"class":86},[80,1323,590],{"class":86},[80,1325,1326],{"class":420},"  \u002F\u002F Error: Cannot add property to string\n",[80,1328,1329,1331,1333],{"class":82,"line":113},[80,1330,503],{"class":502},[80,1332,506],{"class":430},[80,1334,454],{"class":86},[14,1336,1337],{},[179,1338,1339],{},"Correct:",[70,1341,1343],{"className":72,"code":1342,"language":74,"meta":75,"style":75},"msg.payload = {};  \u002F\u002F Initialize as object\nmsg.payload.newProperty = 'value';\nreturn msg;\n",[77,1344,1345,1361,1383],{"__ignoreMap":75},[80,1346,1347,1349,1351,1353,1355,1358],{"class":82,"line":83},[80,1348,167],{"class":430},[80,1350,401],{"class":86},[80,1352,474],{"class":430},[80,1354,434],{"class":86},[80,1356,1357],{"class":86}," {};",[80,1359,1360],{"class":420},"  \u002F\u002F Initialize as object\n",[80,1362,1363,1365,1367,1369,1371,1373,1375,1377,1379,1381],{"class":82,"line":90},[80,1364,167],{"class":430},[80,1366,401],{"class":86},[80,1368,213],{"class":430},[80,1370,401],{"class":86},[80,1372,1312],{"class":430},[80,1374,434],{"class":86},[80,1376,1291],{"class":86},[80,1378,1319],{"class":103},[80,1380,1297],{"class":86},[80,1382,454],{"class":86},[80,1384,1385,1387,1389],{"class":82,"line":113},[80,1386,503],{"class":502},[80,1388,506],{"class":430},[80,1390,454],{"class":86},[14,1392,1393,1394,1396],{},"This commonly occurs when an Inject node sends ",[77,1395,191],{}," as a string or number, then a Change node attempts to add properties to it.",[14,1398,1399,1406],{},[31,1400,1403],{"autoPlay":33,"loop":33,"muted":33,"playsInline":33,"ariaLabel":1401,"width":35,"height":1402,"preload":37},"Showing the common mistake: adding property to non-object",351,[39,1404],{"src":1405,"type":42},"\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Fimages\u002Fmistake1.webm",[44,1407,1408],{},"Incorrect: Adding properties to a non-object type",[14,1410,1411,1418],{},[31,1412,1415],{"autoPlay":33,"loop":33,"muted":33,"playsInline":33,"ariaLabel":1413,"width":35,"height":1414,"preload":37},"Correct approach to prevent the error",348,[39,1416],{"src":1417,"type":42},"\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Fimages\u002Fmistake-1-solution.webm",[44,1419,1420],{},"Correct: Initialize as object before adding properties",[51,1422,1424],{"id":1423},"_2-overwriting-the-entire-message-object","2. Overwriting the Entire Message Object",[14,1426,1427,1428,1430,1431,149,1433,1435],{},"Accidentally replacing the entire ",[77,1429,167],{}," object loses important properties like ",[77,1432,209],{},[77,1434,217],{},", and custom metadata.",[14,1437,1438],{},[179,1439,1273],{},[70,1441,1443],{"className":72,"code":1442,"language":74,"meta":75,"style":75},"msg = { newProperty: 'value' };  \u002F\u002F Destroys existing msg structure\nreturn msg;\n",[77,1444,1445,1472],{"__ignoreMap":75},[80,1446,1447,1450,1452,1455,1458,1460,1462,1464,1466,1469],{"class":82,"line":83},[80,1448,1449],{"class":430},"msg ",[80,1451,434],{"class":86},[80,1453,1454],{"class":86}," {",[80,1456,1457],{"class":753}," newProperty",[80,1459,97],{"class":86},[80,1461,1291],{"class":86},[80,1463,1319],{"class":103},[80,1465,1297],{"class":86},[80,1467,1468],{"class":86}," };",[80,1470,1471],{"class":420},"  \u002F\u002F Destroys existing msg structure\n",[80,1473,1474,1476,1478],{"class":82,"line":90},[80,1475,503],{"class":502},[80,1477,506],{"class":430},[80,1479,454],{"class":86},[14,1481,1482],{},[179,1483,1339],{},[70,1485,1487],{"className":72,"code":1486,"language":74,"meta":75,"style":75},"msg.newProperty = 'value';  \u002F\u002F Preserves existing properties\nreturn msg;\n",[77,1488,1489,1510],{"__ignoreMap":75},[80,1490,1491,1493,1495,1497,1499,1501,1503,1505,1507],{"class":82,"line":83},[80,1492,167],{"class":430},[80,1494,401],{"class":86},[80,1496,1312],{"class":430},[80,1498,434],{"class":86},[80,1500,1291],{"class":86},[80,1502,1319],{"class":103},[80,1504,1297],{"class":86},[80,1506,590],{"class":86},[80,1508,1509],{"class":420},"  \u002F\u002F Preserves existing properties\n",[80,1511,1512,1514,1516],{"class":82,"line":90},[80,1513,503],{"class":502},[80,1515,506],{"class":430},[80,1517,454],{"class":86},[51,1519,1521],{"id":1520},"_3-returning-incorrect-data-types","3. Returning Incorrect Data Types",[14,1523,1524],{},"Node-RED expects function nodes to return message objects. Returning primitives breaks the flow.",[14,1526,1527],{},[179,1528,1273],{},[70,1530,1532],{"className":72,"code":1531,"language":74,"meta":75,"style":75},"return \"some string\";  \u002F\u002F Error: Not a valid message\n",[77,1533,1534],{"__ignoreMap":75},[80,1535,1536,1538,1540,1543,1545,1547],{"class":82,"line":83},[80,1537,503],{"class":502},[80,1539,100],{"class":86},[80,1541,1542],{"class":103},"some string",[80,1544,107],{"class":86},[80,1546,590],{"class":86},[80,1548,1549],{"class":420},"  \u002F\u002F Error: Not a valid message\n",[14,1551,1552],{},[179,1553,1339],{},[70,1555,1557],{"className":72,"code":1556,"language":74,"meta":75,"style":75},"msg.payload = \"some string\";\nreturn msg;\n",[77,1558,1559,1577],{"__ignoreMap":75},[80,1560,1561,1563,1565,1567,1569,1571,1573,1575],{"class":82,"line":83},[80,1562,167],{"class":430},[80,1564,401],{"class":86},[80,1566,474],{"class":430},[80,1568,434],{"class":86},[80,1570,100],{"class":86},[80,1572,1542],{"class":103},[80,1574,107],{"class":86},[80,1576,454],{"class":86},[80,1578,1579,1581,1583],{"class":82,"line":90},[80,1580,503],{"class":502},[80,1582,506],{"class":430},[80,1584,454],{"class":86},[51,1586,1588],{"id":1587},"_4-forgetting-to-return-the-message","4. Forgetting to Return the Message",[14,1590,1591],{},"In Function nodes, forgetting the return statement halts the flow at that node.",[14,1593,1594],{},[179,1595,1273],{},[70,1597,1599],{"className":72,"code":1598,"language":74,"meta":75,"style":75},"msg.payload = msg.payload * 2;\n\u002F\u002F Missing return statement - flow stops here\n",[77,1600,1601,1625],{"__ignoreMap":75},[80,1602,1603,1605,1607,1609,1611,1613,1615,1617,1620,1623],{"class":82,"line":83},[80,1604,167],{"class":430},[80,1606,401],{"class":86},[80,1608,474],{"class":430},[80,1610,434],{"class":86},[80,1612,506],{"class":430},[80,1614,401],{"class":86},[80,1616,474],{"class":430},[80,1618,1619],{"class":86},"*",[80,1621,1622],{"class":121}," 2",[80,1624,454],{"class":86},[80,1626,1627],{"class":82,"line":90},[80,1628,1629],{"class":420},"\u002F\u002F Missing return statement - flow stops here\n",[14,1631,1632],{},[179,1633,1339],{},[70,1635,1637],{"className":72,"code":1636,"language":74,"meta":75,"style":75},"msg.payload = msg.payload * 2;\nreturn msg;  \u002F\u002F Flow continues\n",[77,1638,1639,1661],{"__ignoreMap":75},[80,1640,1641,1643,1645,1647,1649,1651,1653,1655,1657,1659],{"class":82,"line":83},[80,1642,167],{"class":430},[80,1644,401],{"class":86},[80,1646,474],{"class":430},[80,1648,434],{"class":86},[80,1650,506],{"class":430},[80,1652,401],{"class":86},[80,1654,474],{"class":430},[80,1656,1619],{"class":86},[80,1658,1622],{"class":121},[80,1660,454],{"class":86},[80,1662,1663,1665,1667,1669],{"class":82,"line":90},[80,1664,503],{"class":502},[80,1666,506],{"class":430},[80,1668,590],{"class":86},[80,1670,1671],{"class":420},"  \u002F\u002F Flow continues\n",[14,1673,1674],{},"By mastering Node-RED message handling and avoiding common mistakes, you can build robust, efficient workflows. Understanding JSON conversion, message cloning, and proper property management ensures smooth data flow between nodes and maintainable, error-free applications.",[1676,1677,1678],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}",{"title":75,"searchDepth":127,"depth":127,"links":1680},[1681,1684,1685,1686,1690,1694,1704,1707],{"id":23,"depth":90,"text":24,"children":1682},[1683],{"id":53,"depth":113,"text":54},{"id":160,"depth":90,"text":161},{"id":224,"depth":90,"text":225},{"id":300,"depth":90,"text":301,"children":1687},[1688,1689],{"id":307,"depth":113,"text":308},{"id":404,"depth":113,"text":405},{"id":676,"depth":90,"text":677,"children":1691},[1692,1693],{"id":683,"depth":113,"text":308},{"id":721,"depth":113,"text":405},{"id":831,"depth":90,"text":832,"children":1695},[1696,1700],{"id":838,"depth":113,"text":839,"children":1697},[1698,1699],{"id":843,"depth":127,"text":308},{"id":872,"depth":127,"text":405},{"id":964,"depth":113,"text":965,"children":1701},[1702,1703],{"id":968,"depth":127,"text":308},{"id":1004,"depth":127,"text":405},{"id":1190,"depth":90,"text":1191,"children":1705},[1706],{"id":1220,"depth":113,"text":1221},{"id":1257,"depth":90,"text":1258,"children":1708},[1709,1710,1711,1712],{"id":1264,"depth":113,"text":1265},{"id":1423,"depth":113,"text":1424},{"id":1520,"depth":113,"text":1521},{"id":1587,"depth":113,"text":1588},"https:\u002F\u002Fgithub.com\u002FFlowFuse\u002Fwebsite\u002Fedit\u002Fmain\u002Fnuxt\u002Fcontent-guides\u002Fnode-red\u002Fgetting-started\u002Fnode-red-messages.md","md",null,{},"Working with Messages","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Fnode-red-messages",{"title":5,"description":16},"docs\u002Fnode-red\u002Fgetting-started\u002Fnode-red-messages","2026-09-08 11:13:32 +0200","MnwWOoXnTyFRGGH1lq3H82DvXKUOmVKB7mh3ivE_Ygk",{"id":1724,"extension":1725,"meta":1726,"sections":1727,"stem":2126,"__hash__":2127},"featureCatalog\u002Ffeature-catalog.yml","yml",{},[1728,1789,1890,1952,2029,2108],{"id":1729,"title":1730,"features":1731},"ai-automation","AI & Automation",[1732,1742,1752,1762,1768,1778,1784],{"id":1733,"title":1734,"description":1735,"docsLink":1736,"changelog":1737,"tiers":1741},"flowfuse-expert-ai","FlowFuse Expert AI","Build industrial apps with agents, and query the state of the factory with an agent. Adapt your current hardware and machines so agentic work can be done against them, without ripping and replacing what's already on the plant floor.","\u002Fdocs\u002Fuser\u002Fexpert\u002F",[1738],{"url":1739,"release":1740},"\u002Fchangelog\u002F2026\u002F02\u002Fff-expert-update-banner\u002F","2.28",{"edge":33,"hub":33,"fleet":33},{"id":1743,"title":1744,"description":1745,"docsLink":1746,"changelog":1747,"subfeature":33,"showOnPricing":1750,"tiers":1751},"flowfuse-expert-support-mode","Support Mode","Chat-based assistance for FlowFuse and Node-RED, including Node-RED instance management through natural language.","\u002Fdocs\u002Fuser\u002Fexpert\u002Fchat\u002F#support-mode",[1748],{"url":1749,"release":1740},"\u002Fchangelog\u002F2026\u002F02\u002Fff-expert-debug-log-context\u002F",false,{"edge":33,"hub":33,"fleet":33},{"id":1753,"title":1754,"description":1755,"docsLink":1756,"changelog":1757,"subfeature":33,"showOnPricing":1750,"tiers":1761},"flowfuse-expert-application-building","Application Building","Describe what you want to build and FlowFuse Expert assembles it on your workspace, adding tabs, wiring nodes, and configuring properties.","\u002Fdocs\u002Fuser\u002Fexpert\u002Fchat\u002F",[1758],{"url":1759,"release":1760},"\u002Fchangelog\u002F2026\u002F05\u002Fexpert-application-building\u002F","2.30",{"edge":33,"hub":33,"fleet":33},{"id":1763,"title":1764,"description":1765,"docsLink":1766,"subfeature":33,"beta":33,"showOnPricing":1750,"tiers":1767},"flowfuse-expert-insights-mode","Insights Mode","Connects FlowFuse Expert to MCP servers in your Node-RED instances, enabling real-time data queries and actions through a single chat interface.","\u002Fdocs\u002Fuser\u002Fexpert\u002Fchat\u002F#insights-mode",{"edge":33,"hub":33,"fleet":33},{"id":1769,"title":1770,"description":1771,"docsLink":1772,"changelog":1773,"tiers":1777},"third-party-agents","Connect Your Own AI Agent","Point the AI agent your company already uses at FlowFuse, so it can query your teams and instances and build Node-RED applications, with you deciding which teams it reaches and whether it can make changes.","\u002Fdocs\u002Fuser\u002Fexpert\u002Fthird-party-agents\u002F",[1774],{"url":1775,"release":1776},"\u002Fchangelog\u002F2026\u002F08\u002Fconnect-your-own-ai-agent\u002F","3.0",{"edge":33,"hub":33,"fleet":33},{"id":1779,"title":1780,"description":1781,"docsLink":1782,"tiers":1783},"mcp-servers","Agentic Operations","Expose your Node-RED flows as tools an AI agent can call directly, so agents can query the state of the factory or trigger actions without custom integration work.","\u002Fdocs\u002Fflowfuse-nodes\u002Fmcp\u002F",{"edge":33,"hub":33,"fleet":33},{"id":1785,"title":1786,"description":1787,"tiers":1788},"onnx-integration","ONNX Integration","Run trained machine learning models directly in your flows, including on edge hardware, without sending data out to an external inference service.",{"edge":33,"hub":33,"fleet":33},{"id":1790,"title":1791,"features":1792},"build","Build",[1793,1799,1805,1815,1821,1827,1831,1837,1843,1851,1857,1861,1865,1874,1882],{"id":1794,"title":1795,"description":1796,"docsLink":1797,"tiers":1798},"edge-development","Edge Development","Develop and test Node-RED flows directly on edge devices with a remote editor proxy.","\u002Fdocs\u002Fdevice-agent\u002Fquickstart\u002F",{"edge":33,"hub":1750,"fleet":33},{"id":1800,"title":1801,"description":1802,"docsLink":1803,"tiers":1804},"private-npm-registry","Custom Node-RED Nodes","Create and manage your own private npm registry for Node-RED nodes, so you can share custom nodes across your team and devices without publishing them publicly.","\u002Fdocs\u002Fuser\u002Fcustom-npm-packages\u002F",{"edge":33,"hub":33,"fleet":33},{"id":1806,"title":1807,"description":1808,"docsLink":1809,"changelog":1810,"tiers":1814},"flowfuse-tables","FlowFuse Tables","A managed PostgreSQL database for every application, so you can store and query structured data without standing up and maintaining your own database.","\u002Fdocs\u002Fuser\u002Fff-tables\u002F",[1811],{"url":1812,"release":1813},"\u002Fchangelog\u002F2026\u002F07\u002Fexpert-tables-automation\u002F","2.33",{"edge":33,"hub":33,"fleet":33},{"id":1816,"title":1817,"description":1818,"docsLink":1819,"tiers":1820},"persistent-files","File Storage","Store and retrieve files from your Node-RED flows, with automatic replication and backup across your devices and hosted instances.","\u002Fdocs\u002Finstall\u002Ffile-storage\u002F",{"edge":33,"hub":33,"fleet":33},{"id":1822,"title":1823,"description":1824,"docsLink":1825,"showOnPricing":1750,"tiers":1826},"persistent-context","Persistent Context","In-memory values defined in a Node-RED flow persist across project restarts and upgrades.","\u002Fdocs\u002Fuser\u002Fpersistent-context\u002F",{"edge":33,"hub":33,"fleet":33},{"id":1828,"title":1829,"showOnPricing":1750,"tiers":1830},"static-assets","Static Assets",{"edge":33,"hub":33,"fleet":33},{"id":1832,"title":1833,"description":1834,"docsLink":1835,"tiers":1836},"team-library","Team Library","Set up standard nodes and flows that can be shared with all team members across your organisation.","\u002Fdocs\u002Fuser\u002Fshared-library\u002F",{"edge":33,"hub":33,"fleet":33},{"id":1838,"title":1839,"description":1840,"docsLink":1841,"tiers":1842},"personalised-multi-user-dashboards","Personalised Multi-User Dashboards","Build applications that provide unique data to each logged-in user using personalised multi-user dashboards.","https:\u002F\u002Fdashboard.flowfuse.com\u002Fuser\u002Fmulti-tenancy.html",{"edge":33,"hub":33,"fleet":33},{"id":1844,"title":1845,"description":1846,"changelog":1847,"subfeature":33,"showOnPricing":1750,"tiers":1850},"dashboards-view","Dashboards View","Browse and open every dashboard across your team from a dedicated Dashboards view, at both team and application level, without leaving FlowFuse.",[1848],{"url":1849,"release":1813},"\u002Fchangelog\u002F2026\u002F07\u002Fteam-and-application-dashboards\u002F",{"edge":33,"hub":33,"fleet":33},{"id":1852,"title":1853,"description":1854,"docsLink":1855,"tiers":1856},"blueprints-converge","Blueprints","Ready-made starting points for your apps, from cross-team Converge templates to OT and IT specific blueprints.","\u002Fdocs\u002Fuser\u002Fconcepts\u002F#blueprint",{"edge":33,"hub":33,"fleet":33},{"id":1858,"title":1859,"subfeature":33,"showOnPricing":1750,"tiers":1860},"blueprints-ot-apps","Blueprints - OT APPS",{"edge":33,"hub":1750,"fleet":33},{"id":1862,"title":1863,"subfeature":33,"showOnPricing":1750,"tiers":1864},"blueprints-it-apps","Blueprints - IT APPS",{"edge":1750,"hub":33,"fleet":1750},{"id":1866,"title":1867,"description":1868,"changelog":1869,"showOnPricing":1750,"tiers":1873},"immersive-editor-snapshots","Snapshot Details in Immersive Editor","View and manage snapshot details directly inside the immersive editor without leaving your editing session.",[1870],{"url":1871,"release":1872},"\u002Fchangelog\u002F2026\u002F03\u002Fsnapshot-detail-modal-immersive-editor\u002F","2.29",{"edge":33,"hub":33,"fleet":33},{"id":1875,"title":1876,"description":1877,"changelog":1878,"showOnPricing":1750,"tiers":1881},"immersive-editor-drawer","Customisable Immersive Editor Drawer","Pin, move, resize, or full-screen the immersive editor drawer. Your preferences are remembered between sessions.",[1879],{"url":1880,"release":1760},"\u002Fchangelog\u002F2026\u002F04\u002Fimmersive-editor-drawer\u002F",{"edge":33,"hub":33,"fleet":33},{"id":1883,"title":1884,"description":1885,"changelog":1886,"showOnPricing":1750,"tiers":1889},"embedded-editor-tab-title","Embedded Editor Browser Tab Title","The browser tab title updates to reflect the active Node-RED canvas tab when working in the embedded editor.",[1887],{"url":1888,"release":1872},"\u002Fchangelog\u002F2026\u002F03\u002Fembedded-editor-tab-title\u002F",{"edge":33,"hub":33,"fleet":33},{"id":1891,"title":1892,"features":1893},"deploy","Deploy",[1894,1900,1909,1915,1921,1927,1933,1939,1944],{"id":1895,"title":1896,"description":1897,"docsLink":1898,"tiers":1899},"hosted-instances","Cloud Instances","Run Node-RED instances managed and hosted by FlowFuse.","\u002Fdocs\u002Fuser\u002Fintroduction\u002F#creating-a-node-red-instance",{"edge":33,"hub":33,"fleet":33},{"id":1901,"title":1902,"description":1903,"docsLink":1904,"changelog":1905,"tiers":1908},"edge-devices","Edge Instances","Deploy and mange your Node-RED instances on edge PLCs and gateways, with full visibility and control from the cloud.","\u002Fdocs\u002Fdevice-agent\u002Fintroduction\u002F",[1906],{"url":1907,"release":1740},"\u002Fchangelog\u002F2026\u002F02\u002Fdevice-agent-nodejs-options\u002F",{"edge":33,"hub":1750,"fleet":33},{"id":1910,"title":1911,"description":1912,"docsLink":1913,"tiers":1914},"custom-hostnames","Custom Hostnames","Access your Node-RED application via your own domain name.","\u002Fdocs\u002Fuser\u002Fcustom-hostnames\u002F",{"edge":1750,"hub":33,"fleet":1750},{"id":1916,"title":1917,"description":1918,"docsLink":1919,"tiers":1920},"mqtt-broker","MQTT Broker","Manage and create MQTT clients to transport data for efficient messaging and communication within your applications.","\u002Fdocs\u002Fuser\u002Fteambroker\u002F",{"edge":33,"hub":1750,"fleet":33},{"id":1922,"title":1923,"description":1924,"docsLink":1925,"showOnPricing":1750,"tiers":1926},"project-nodes","Project Nodes aka seamless project comms","FlowFuse Project Nodes enable the passing of data and messages between your Node-RED projects.","\u002Fdocs\u002Fuser\u002Fprojectnodes\u002F",{"edge":33,"hub":33,"fleet":33},{"id":1928,"title":1929,"description":1930,"docsLink":1931,"tiers":1932},"devops-pipelines","DevOps Pipelines","Set up different environments for development, testing, and production Node-RED instances to support a full software delivery lifecycle.","\u002Fdocs\u002Fuser\u002Fdevops-pipelines\u002F",{"edge":33,"hub":33,"fleet":33},{"id":1934,"title":1935,"description":1936,"docsLink":1937,"tiers":1938},"git-integration","Git Integration","Back up your flows to a remote Git repository through a DevOps Pipeline. Supports GitHub and Azure DevOps repositories.","\u002Fdocs\u002Fuser\u002Fdevops-pipelines\u002F#git-repository-stage",{"edge":1750,"hub":33,"fleet":1750},{"id":1940,"title":1941,"description":1942,"docsLink":1937,"subfeature":33,"showOnPricing":1750,"tiers":1943},"git-integration-github","GitHub","Push and pull snapshots to GitHub repositories through DevOps Pipeline Git Stages.",{"edge":1750,"hub":33,"fleet":1750},{"id":1945,"title":1946,"description":1947,"docsLink":1937,"changelog":1948,"subfeature":33,"showOnPricing":1750,"tiers":1951},"git-integration-azure","Azure DevOps","Push and pull snapshots to Azure DevOps repositories through DevOps Pipeline Git Stages.",[1949],{"url":1950,"release":1872},"\u002Fchangelog\u002F2026\u002F03\u002Fazure-dev-ops-gitops\u002F",{"edge":1750,"hub":33,"fleet":1750},{"id":1953,"title":1954,"features":1955},"operate-maintain","Operate & Maintain",[1956,1962,1968,1973,1981,1985,1989,1994,2000,2006,2011,2017,2021,2025],{"id":1957,"title":1958,"description":1959,"docsLink":1960,"tiers":1961},"snapshots","Snapshots & Version History","Automatic snapshots on remote devices and hosted instances, plus a full version history timeline so you can roll back to any prior state.","\u002Fdocs\u002Fuser\u002Fsnapshots\u002F",{"edge":33,"hub":33,"fleet":33},{"id":1963,"title":1964,"description":1965,"docsLink":1966,"subfeature":33,"showOnPricing":1750,"tiers":1967},"auto-snapshot-remote","Auto Snapshot (Remote)","Automatically capture a snapshot every time a remote instance is deployed, so you always have a recoverable history of what was running on each device.","\u002Fdocs\u002Fuser\u002Fsnapshots\u002F#auto-snapshots",{"edge":33,"hub":33,"fleet":33},{"id":1969,"title":1970,"description":1971,"docsLink":1966,"subfeature":33,"showOnPricing":1750,"tiers":1972},"auto-snapshot-hosted","Auto Snapshot (Hosted)","Automatically capture a snapshot every time a hosted instance is deployed, so you always have a recoverable history of what was running.",{"edge":33,"hub":33,"fleet":33},{"id":1974,"title":1975,"description":1976,"changelog":1977,"subfeature":33,"showOnPricing":1750,"tiers":1980},"snapshot-comparison","Snapshot Comparison","Compare two snapshots side-by-side with a navigable diff view. Step through every changed, added, or deleted node and see property and code diffs.",[1978],{"url":1979,"release":1872},"\u002Fchangelog\u002F2026\u002F04\u002Fsnapshot-diff-viewer\u002F",{"edge":33,"hub":33,"fleet":33},{"id":1982,"title":1983,"subfeature":33,"showOnPricing":1750,"tiers":1984},"version-history-timeline","Version History Timeline",{"edge":33,"hub":33,"fleet":33},{"id":1986,"title":1987,"tiers":1988},"unlimited-workflow-executions","Unlimited Workflow Executions",{"edge":33,"hub":33,"fleet":33},{"id":1990,"title":1991,"description":1992,"tiers":1993},"device-fleet-updates","Device Fleet Updates","Connect to edge devices to quickly assess and update logic. Debug one device and roll out improvements to your fleet in minutes, securely without requiring full device access for your whole organisation.",{"edge":33,"hub":1750,"fleet":33},{"id":1995,"title":1996,"description":1997,"docsLink":1998,"tiers":1999},"device-group-management","Device Group Management","Logically group devices assigned to an application and integrate device groups into your DevOps Pipeline for coordinated fleet updates.","\u002Fdocs\u002Fuser\u002Fdevice-groups\u002F",{"edge":33,"hub":1750,"fleet":33},{"id":2001,"title":2002,"description":2003,"docsLink":2004,"tiers":2005},"high-availability","High Availability","Leverage horizontal scaling for reliable and scalable processing of your data through Node-RED.","\u002Fdocs\u002Fuser\u002Fhigh-availability\u002F",{"edge":1750,"hub":33,"fleet":1750},{"id":2007,"title":2008,"description":2009,"tiers":2010},"performance-monitoring","Performance Monitoring & Alerts","Track CPU, memory, and event loop performance across your instances and devices, with email alerts when something needs your attention.",{"edge":33,"hub":33,"fleet":33},{"id":2012,"title":2013,"description":2014,"docsLink":2015,"subfeature":33,"showOnPricing":1750,"tiers":2016},"instance-monitoring","Instance Monitoring","Enable alerts to be sent via email when your Node-RED instances encounter issues.","\u002Fdocs\u002Fuser\u002Finstance-settings\u002F#alerts",{"edge":33,"hub":33,"fleet":33},{"id":2018,"title":2019,"subfeature":33,"showOnPricing":1750,"tiers":2020},"email-alerts","Email Alerts",{"edge":33,"hub":33,"fleet":33},{"id":2022,"title":2023,"showOnPricing":1750,"tiers":2024},"api-debug-length-limit","API\u002FDebug Length Limit",{"edge":33,"hub":33,"fleet":33},{"id":2026,"title":2027,"tiers":2028},"protected-instances","Protected Instances",{"edge":1750,"hub":33,"fleet":1750},{"id":2030,"title":2031,"features":2032},"govern-secure","Govern and Secure",[2033,2042,2048,2054,2059,2065,2071,2077,2085,2091,2097,2103],{"id":2034,"title":2035,"description":2036,"docsLink":2037,"changelog":2038,"tiers":2041},"single-sign-on","Single Sign-On (SSO)","Configure FlowFuse to work with your own SSO provider, allowing users to access FlowFuse with a single set of login credentials.","\u002Fdocs\u002Fadmin\u002Fsso\u002F",[2039],{"url":2040,"release":1813},"\u002Fchangelog\u002F2026\u002F07\u002Fapplication-sso-groups\u002F",{"edge":33,"hub":33,"fleet":33},{"id":2043,"title":2044,"description":2045,"docsLink":2046,"tiers":2047},"two-factor-authentication","Two-Factor Authentication","Two-factor authentication adds an extra layer of security to your FlowFuse account.","\u002Fdocs\u002Fuser\u002Fuser-settings\u002F#two-factor-authentication",{"edge":33,"hub":33,"fleet":33},{"id":2049,"title":2050,"description":2051,"docsLink":2052,"tiers":2053},"certified-nodes-it","Certified Nodes - IT","IT certified node bundle includes: Redis, MQTT, HTTP Request, AI nodes (Gemini, Claude, ChatGPT, Ollama), MCP Server","\u002Fblog\u002F2025\u002F07\u002Fcertified-nodes-v2\u002F",{"edge":1750,"hub":33,"fleet":33},{"id":2055,"title":2056,"description":2057,"tiers":2058},"certified-nodes-ot","Certified OT Connections - OPC-UA, Modbus, etc.","OT certified node bundle includes: OPC-UA, Modbus TCP & RTU, RTSP, EtherNet\u002FIP, AI nodes (Gemini, Claude, ChatGPT, Ollama), MCP Server",{"edge":33,"hub":1750,"fleet":1750},{"id":2060,"title":2061,"description":2062,"docsLink":2063,"tiers":2064},"audit-log","Audit Log","Keep track of everything going on in your Node-RED instances and FlowFuse. Audit Logs provide details on what actions have taken place, when they happened, and who did them.","\u002Fdocs\u002Fuser\u002Flogs\u002F#audit-log",{"edge":33,"hub":33,"fleet":33},{"id":2066,"title":2067,"description":2068,"docsLink":2069,"tiers":2070},"role-based-access-control","Role-Based Access Control","Control who can do what at both the team and application level, from viewers to admins.","\u002Fdocs\u002Fuser\u002Frole-based-access-control\u002F",{"edge":33,"hub":33,"fleet":33},{"id":2072,"title":2073,"description":2074,"docsLink":2075,"subfeature":33,"showOnPricing":1750,"tiers":2076},"application-level-rbac","Application-Level RBAC","Fine-grained access control per application, allowing team members to have different permission levels across different applications without requiring separate teams.","\u002Fdocs\u002Fuser\u002Frole-based-access-control\u002F#application-level-rbac",{"edge":33,"hub":33,"fleet":33},{"id":2078,"title":2079,"description":2080,"changelog":2081,"subfeature":33,"showOnPricing":1750,"tiers":2084},"scoped-personal-access-tokens","Scoped Personal Access Tokens","Restrict a Personal Access Token to specific teams, limit it to read-only operations, or control whether it carries admin privileges.",[2082],{"url":2083,"release":1813},"\u002Fchangelog\u002F2026\u002F07\u002Fscoped-pats\u002F",{"edge":33,"hub":33,"fleet":33},{"id":2086,"title":2087,"description":2088,"docsLink":2089,"showOnPricing":1750,"tiers":2090},"team-members","Team Members","Invite multiple team members to collaborate on the same Node-RED flows.","\u002Fdocs\u002Fuser\u002Fteam\u002F#teams",{"edge":33,"hub":33,"fleet":33},{"id":2092,"title":2093,"description":2094,"docsLink":2095,"showOnPricing":1750,"tiers":2096},"endpoint-security","Endpoint Security","Secure HTTP endpoints for hosted Node-RED instances using FlowFuse credentials.","\u002Fdocs\u002Fuser\u002Finstance-settings\u002F#security",{"edge":33,"hub":33,"fleet":33},{"id":2098,"title":2099,"description":2100,"docsLink":2101,"tiers":2102},"baa-for-hipaa","BAA for HIPAA","FlowFuse can sign a Business Associate Agreement to ensure proper safeguarding of protected health information handled on your behalf.","\u002Fhandbook\u002Fsales\u002Fsubscription-agreement-1.6\u002F",{"edge":1750,"hub":33,"fleet":1750},{"id":2104,"title":2105,"description":2106,"tiers":2107},"sbom","Software Bill of Materials","A complete list of all software components used in your Node-RED instances and hosted applications, including version numbers and license information.",{"edge":1750,"hub":33,"fleet":1750},{"id":2109,"title":2110,"features":2111},"support","Support",[2112,2117,2121],{"id":2113,"title":2114,"docsLink":2115,"tiers":2116},"installation-support","Installation Support","\u002Fdocs\u002Finstall\u002Fintroduction\u002F#do-you-need-help-installation-service",{"edge":33,"hub":33,"fleet":33},{"id":2118,"title":2119,"showOnPricing":1750,"tiers":2120},"live-chat-support","Live Chat Support",{"edge":33,"hub":33,"fleet":33},{"id":2122,"title":2123,"docsLink":2124,"tiers":2125},"enterprise-support","Enterprise Support","\u002Fdocs\u002Fpremium-support\u002F",{"edge":33,"hub":33,"fleet":33},"feature-catalog","v5NjPsqOkQexQ0Fk82nqY6ZEXj128lclDvrIkmsKbpM",[2129,2215,2453,2523,2536,2676,2686,2767],{"name":2130,"order":2131,"children":2132},"Application Guide",0,[2133,2181],{"title":2134,"path":2135,"group":2130,"groupOrder":2131,"order":83,"children":2136},"Building FlowFuse applications","\u002Fdocs\u002Fapplication-guide",[2137,2141,2153,2157,2173],{"title":2138,"path":2139,"order":83,"children":2140},"Foundations","\u002Fdocs\u002Fapplication-guide\u002Ffoundations",[],{"title":2142,"path":2143,"order":90,"children":2144},"App delivery methods","\u002Fdocs\u002Fapplication-guide\u002Fapp-delivery-methods",[2145,2149],{"title":2146,"path":2147,"order":83,"children":2148},"Hardware apps","\u002Fdocs\u002Fapplication-guide\u002Fapp-delivery-methods\u002Fhardware-apps",[],{"title":2150,"path":2151,"order":90,"children":2152},"Software apps","\u002Fdocs\u002Fapplication-guide\u002Fapp-delivery-methods\u002Fsoftware-apps",[],{"title":2154,"path":2155,"order":113,"children":2156},"Data plane","\u002Fdocs\u002Fapplication-guide\u002Fdata-plane",[],{"title":2158,"path":2159,"order":127,"children":2160},"Architectures","\u002Fdocs\u002Fapplication-guide\u002Farchitectures",[2161,2165,2169],{"title":2162,"path":2163,"order":83,"children":2164},"IT architectures","\u002Fdocs\u002Fapplication-guide\u002Farchitectures\u002Fit",[],{"title":2166,"path":2167,"order":90,"children":2168},"OT architectures","\u002Fdocs\u002Fapplication-guide\u002Farchitectures\u002Fot",[],{"title":2170,"path":2171,"order":113,"children":2172},"IIoT architectures","\u002Fdocs\u002Fapplication-guide\u002Farchitectures\u002Fiiot",[],{"title":2174,"path":2175,"order":139,"children":2176},"Worked examples","\u002Fdocs\u002Fapplication-guide\u002Fworked-examples",[2177],{"title":2178,"path":2179,"order":83,"children":2180},"OEE, end to end","\u002Fdocs\u002Fapplication-guide\u002Fworked-examples\u002Foee",[],{"title":2182,"path":2183,"group":2130,"groupOrder":2131,"order":90,"children":2184},"Designing Node-RED flows","\u002Fdocs\u002Fnode-red-guide",[2185,2188,2204],{"title":2138,"path":2186,"order":83,"children":2187},"\u002Fdocs\u002Fnode-red-guide\u002Ffoundations",[],{"title":2189,"path":2190,"order":90,"children":2191},"Patterns","\u002Fdocs\u002Fnode-red-guide\u002Fpatterns",[2192,2196,2200],{"title":2193,"path":2194,"order":83,"children":2195},"Design patterns","\u002Fdocs\u002Fnode-red-guide\u002Fpatterns\u002Fdesign-patterns",[],{"title":2197,"path":2198,"order":90,"children":2199},"Handling data","\u002Fdocs\u002Fnode-red-guide\u002Fpatterns\u002Fhandling-data",[],{"title":2201,"path":2202,"order":113,"children":2203},"Good form","\u002Fdocs\u002Fnode-red-guide\u002Fpatterns\u002Fgood-form",[],{"title":2174,"path":2205,"order":113,"children":2206},"\u002Fdocs\u002Fnode-red-guide\u002Fworked-examples",[2207,2211],{"title":2208,"path":2209,"order":83,"children":2210},"OEE - Edge Aggregator","\u002Fdocs\u002Fnode-red-guide\u002Fworked-examples\u002Foee-edge-aggregator",[],{"title":2212,"path":2213,"order":90,"children":2214},"OEE - Central Dashboard","\u002Fdocs\u002Fnode-red-guide\u002Fworked-examples\u002Foee-central-dashboard",[],{"name":2216,"order":83,"children":2217},"FlowFuse User Manuals",[2218,2342,2346,2358],{"title":2219,"path":2220,"group":2216,"groupOrder":83,"order":83,"children":2221,"link":1750},"Using FlowFuse","\u002Fdocs\u002Fuser",[2222,2226,2230,2234,2238,2242,2246,2249,2253,2257,2260,2264,2280,2284,2288,2292,2296,2299,2303,2307,2311,2315,2319,2322,2326,2330,2334,2338],{"title":2223,"path":2224,"order":83,"children":2225},"Getting Started","\u002Fdocs\u002Fuser\u002Fintroduction",[],{"title":2227,"path":2228,"order":83,"children":2229},"Static asset service","\u002Fdocs\u002Fuser\u002Fstatic-asset-service",[],{"title":2231,"path":2232,"order":90,"children":2233},"Bill of Materials","\u002Fdocs\u002Fuser\u002Fbill-of-materials",[],{"title":2235,"path":2236,"order":90,"children":2237},"FlowFuse Concepts","\u002Fdocs\u002Fuser\u002Fconcepts",[],{"title":2239,"path":2240,"order":1103,"children":2241},"Instance States","\u002Fdocs\u002Fuser\u002Finstance-states",[],{"title":2243,"path":2244,"order":1715,"children":2245},"Changing the Stack","\u002Fdocs\u002Fuser\u002Fchangestack",[],{"title":1911,"path":2247,"order":1715,"children":2248},"\u002Fdocs\u002Fuser\u002Fcustom-hostnames",[],{"title":2250,"path":2251,"order":1715,"children":2252},"Custom Node Packages","\u002Fdocs\u002Fuser\u002Fcustom-npm-packages",[],{"title":2254,"path":2255,"order":1715,"children":2256},"Dashboards","\u002Fdocs\u002Fuser\u002Fdashboards",[],{"title":1929,"path":2258,"order":1715,"children":2259},"\u002Fdocs\u002Fuser\u002Fdevops-pipelines",[],{"title":2261,"path":2262,"order":1715,"children":2263},"Environment Variables","\u002Fdocs\u002Fuser\u002Fenvvar",[],{"title":2265,"path":2266,"order":1715,"children":2267},"FlowFuse Expert","\u002Fdocs\u002Fuser\u002Fexpert",[2268,2272,2276],{"title":2269,"path":2270,"order":1715,"children":2271},"AI in Node-RED","\u002Fdocs\u002Fuser\u002Fexpert\u002Fnode-red-embedded-ai",[],{"title":2273,"path":2274,"order":1715,"children":2275},"Chat Interface","\u002Fdocs\u002Fuser\u002Fexpert\u002Fchat",[],{"title":2277,"path":2278,"order":1715,"children":2279},"Connect Your Own Agent","\u002Fdocs\u002Fuser\u002Fexpert\u002Fthird-party-agents",[],{"title":2281,"path":2282,"order":1715,"children":2283},"FlowFuse File Nodes","\u002Fdocs\u002Fuser\u002Ffilenodes",[],{"title":2285,"path":2286,"order":1715,"children":2287},"FlowFuse MQTT Nodes","\u002Fdocs\u002Fuser\u002Fmqtt-nodes",[],{"title":2289,"path":2290,"order":1715,"children":2291},"FlowFuse Persistent Context","\u002Fdocs\u002Fuser\u002Fpersistent-context",[],{"title":2293,"path":2294,"order":1715,"children":2295},"FlowFuse Project Nodes","\u002Fdocs\u002Fuser\u002Fprojectnodes",[],{"title":1807,"path":2297,"order":1715,"children":2298},"\u002Fdocs\u002Fuser\u002Fff-tables",[],{"title":2300,"path":2301,"order":1715,"children":2302},"Groups","\u002Fdocs\u002Fuser\u002Fdevice-groups",[],{"title":2304,"path":2305,"order":1715,"children":2306},"High Availability mode","\u002Fdocs\u002Fuser\u002Fhigh-availability",[],{"title":2308,"path":2309,"order":1715,"children":2310},"HTTP Access Tokens","\u002Fdocs\u002Fuser\u002Fhttp-access-tokens",[],{"title":2312,"path":2313,"order":1715,"children":2314},"Instance Settings","\u002Fdocs\u002Fuser\u002Finstance-settings",[],{"title":2316,"path":2317,"order":1715,"children":2318},"Logging","\u002Fdocs\u002Fuser\u002Flogs",[],{"title":2067,"path":2320,"order":1715,"children":2321},"\u002Fdocs\u002Fuser\u002Frole-based-access-control",[],{"title":2323,"path":2324,"order":1715,"children":2325},"Shared Team Library","\u002Fdocs\u002Fuser\u002Fshared-library",[],{"title":2327,"path":2328,"order":1715,"children":2329},"Snapshots","\u002Fdocs\u002Fuser\u002Fsnapshots",[],{"title":2331,"path":2332,"order":1715,"children":2333},"Team Broker","\u002Fdocs\u002Fuser\u002Fteambroker",[],{"title":2335,"path":2336,"order":1715,"children":2337},"Teams","\u002Fdocs\u002Fuser\u002Fteam",[],{"title":2339,"path":2340,"order":1715,"children":2341},"User Settings","\u002Fdocs\u002Fuser\u002Fuser-settings",[],{"title":2343,"path":2344,"group":2216,"groupOrder":83,"order":90,"children":2345},"FlowFuse API","\u002Fdocs\u002Fapi",[],{"title":2347,"path":2348,"group":2216,"groupOrder":83,"order":113,"children":2349,"link":1750},"Migrating a Node-RED project to FlowFuse","\u002Fdocs\u002Fmigration",[2350,2354],{"title":2351,"path":2352,"order":83,"children":2353},"Introduction","\u002Fdocs\u002Fmigration\u002Fintroduction",[],{"title":2355,"path":2356,"order":1715,"children":2357},"Node-RED Tools plugin","\u002Fdocs\u002Fmigration\u002Fnode-red-tools",[],{"title":2359,"path":2360,"group":2216,"groupOrder":83,"order":127,"children":2361},"FlowFuse Node-RED nodes","\u002Fdocs\u002Fflowfuse-nodes",[2362,2387,2407,2414,2434,2445],{"title":2363,"path":2364,"order":83,"children":2365},"AI","\u002Fdocs\u002Fflowfuse-nodes\u002Fai",[2366,2370,2375,2379,2383],{"title":2367,"path":2368,"order":139,"children":2369},"LLM Nodes","\u002Fdocs\u002Fflowfuse-nodes\u002Fai\u002Fllm-nodes",[],{"title":2371,"path":2372,"order":2373,"children":2374},"Depth Estimation","\u002Fdocs\u002Fflowfuse-nodes\u002Fai\u002Fdepth-estimation",50,[],{"title":2376,"path":2377,"order":2373,"children":2378},"Image Classification","\u002Fdocs\u002Fflowfuse-nodes\u002Fai\u002Fimage-classification",[],{"title":2380,"path":2381,"order":2373,"children":2382},"Object Detection","\u002Fdocs\u002Fflowfuse-nodes\u002Fai\u002Fobject-detection",[],{"title":2384,"path":2385,"order":2373,"children":2386},"ONXX","\u002Fdocs\u002Fflowfuse-nodes\u002Fai\u002Fonxx",[],{"title":2388,"path":2389,"order":90,"children":2390},"MCP","\u002Fdocs\u002Fflowfuse-nodes\u002Fmcp",[2391,2395,2399,2403],{"title":2392,"path":2393,"order":2373,"children":2394},"MCP Prompt","\u002Fdocs\u002Fflowfuse-nodes\u002Fmcp\u002Fmcp-prompt",[],{"title":2396,"path":2397,"order":2373,"children":2398},"MCP Resource","\u002Fdocs\u002Fflowfuse-nodes\u002Fmcp\u002Fmcp-resource",[],{"title":2400,"path":2401,"order":2373,"children":2402},"MCP Responses","\u002Fdocs\u002Fflowfuse-nodes\u002Fmcp\u002Fmcp-response",[],{"title":2404,"path":2405,"order":2373,"children":2406},"MCP Tool","\u002Fdocs\u002Fflowfuse-nodes\u002Fmcp\u002Fmcp-tool",[],{"title":1807,"path":2408,"order":113,"children":2409},"\u002Fdocs\u002Fflowfuse-nodes\u002Fflowfuse-tables",[2410],{"title":2411,"path":2412,"order":2373,"children":2413},"Query","\u002Fdocs\u002Fflowfuse-nodes\u002Fflowfuse-tables\u002Fquery",[],{"title":2415,"path":2416,"order":127,"children":2417},"Edge","\u002Fdocs\u002Fflowfuse-nodes\u002Fedge",[2418,2422,2426,2430],{"title":2419,"path":2420,"order":83,"children":2421},"RTSP Video Feed","\u002Fdocs\u002Fflowfuse-nodes\u002Fedge\u002Frtsp",[],{"title":2423,"path":2424,"order":90,"children":2425},"CIP Suite, EtherNet\u002FIP Nodes","\u002Fdocs\u002Fflowfuse-nodes\u002Fedge\u002Fcip-suite",[],{"title":2427,"path":2428,"order":113,"children":2429},"Modbus","\u002Fdocs\u002Fflowfuse-nodes\u002Fedge\u002Fmodbus",[],{"title":2431,"path":2432,"order":2373,"children":2433},"OPC UA","\u002Fdocs\u002Fflowfuse-nodes\u002Fedge\u002Fopcua",[],{"title":2285,"path":2435,"order":139,"children":2436},"\u002Fdocs\u002Fflowfuse-nodes\u002Fmqtt",[2437,2441],{"title":2438,"path":2439,"order":2373,"children":2440},"MQTT In","\u002Fdocs\u002Fflowfuse-nodes\u002Fmqtt\u002Fmqtt-in",[],{"title":2442,"path":2443,"order":2373,"children":2444},"MQTT Out","\u002Fdocs\u002Fflowfuse-nodes\u002Fmqtt\u002Fmqtt-out",[],{"title":2446,"path":2447,"order":139,"children":2448},"Hub","\u002Fdocs\u002Fflowfuse-nodes\u002Fhub",[2449],{"title":2450,"path":2451,"order":83,"children":2452},"Redis","\u002Fdocs\u002Fflowfuse-nodes\u002Fhub\u002Fredis",[],{"name":2454,"order":90,"children":2455},"Device Agent",[2456,2504],{"title":2454,"path":2457,"group":2454,"groupOrder":90,"order":83,"children":2458,"link":1750},"\u002Fdocs\u002Fdevice-agent",[2459,2463,2467,2492,2496,2500],{"title":2460,"path":2461,"order":83,"children":2462},"FlowFuse Device Agent Introduction","\u002Fdocs\u002Fdevice-agent\u002Fintroduction",[],{"title":2464,"path":2465,"order":90,"children":2466},"Quick Start","\u002Fdocs\u002Fdevice-agent\u002Fquickstart",[],{"title":2468,"path":2469,"group":2470,"order":113,"children":2471,"link":1750},"Installation","\u002Fdocs\u002Fdevice-agent\u002Finstall","DeviceAgentInstallation",[2472,2476,2480,2484,2488],{"title":2473,"path":2474,"group":2470,"order":83,"children":2475},"Overview","\u002Fdocs\u002Fdevice-agent\u002Finstall\u002Foverview",[],{"title":2477,"path":2478,"group":2470,"order":90,"children":2479},"Device Agent Installer","\u002Fdocs\u002Fdevice-agent\u002Finstall\u002Fdevice-agent-installer",[],{"title":2481,"path":2482,"group":2470,"order":113,"children":2483},"Docker Install","\u002Fdocs\u002Fdevice-agent\u002Finstall\u002Fdocker",[],{"title":2485,"path":2486,"group":2470,"order":127,"children":2487},"Kubernetes Install","\u002Fdocs\u002Fdevice-agent\u002Finstall\u002Fkubernetes",[],{"title":2489,"path":2490,"group":2470,"order":139,"children":2491},"Manual Install with NPM","\u002Fdocs\u002Fdevice-agent\u002Finstall\u002Fmanual",[],{"title":2493,"path":2494,"order":127,"children":2495},"Register your Remote Instance","\u002Fdocs\u002Fdevice-agent\u002Fregister",[],{"title":2497,"path":2498,"order":139,"children":2499},"Running the Agent","\u002Fdocs\u002Fdevice-agent\u002Frunning",[],{"title":2501,"path":2502,"order":488,"children":2503},"Deploying your Flows","\u002Fdocs\u002Fdevice-agent\u002Fdeploy",[],{"title":2505,"path":2506,"group":2454,"groupOrder":90,"order":90,"children":2507,"link":1750},"Hardware Guides","\u002Fdocs\u002Fhardware",[2508,2511,2515,2519],{"title":2473,"path":2509,"order":83,"children":2510},"\u002Fdocs\u002Fhardware\u002Fintroduction",[],{"title":2512,"path":2513,"order":90,"children":2514},"ctrlX - Node-RED","\u002Fdocs\u002Fhardware\u002Fctrlx-node-red",[],{"title":2516,"path":2517,"order":113,"children":2518},"ctrlX - Device Agent","\u002Fdocs\u002Fhardware\u002Fctrlx-device-agent",[],{"title":2520,"path":2521,"order":113,"children":2522},"Raspberry Pi with Raspbian","\u002Fdocs\u002Fhardware\u002Fraspbian",[],{"name":2524,"order":113,"children":2525},"FlowFuse Cloud",[2526],{"title":2524,"path":2527,"group":2524,"groupOrder":113,"order":113,"children":2528,"link":1750},"\u002Fdocs\u002Fcloud",[2529,2532],{"title":2351,"path":2530,"order":83,"children":2531},"\u002Fdocs\u002Fcloud\u002Fintroduction",[],{"title":2533,"path":2534,"order":1715,"children":2535},"FlowFuse Cloud Billing","\u002Fdocs\u002Fcloud\u002Fbilling",[],{"name":2537,"order":127,"children":2538},"FlowFuse Self-Hosted",[2539,2542,2617,2629],{"title":2464,"path":2540,"group":2537,"groupOrder":127,"order":83,"children":2541},"\u002Fdocs\u002Fquick-start",[],{"title":2543,"path":2544,"group":2537,"groupOrder":127,"order":90,"children":2545,"link":1750},"Installing FlowFuse","\u002Fdocs\u002Finstall",[2546,2549,2553,2557,2577,2581,2585,2589],{"title":2473,"path":2547,"order":83,"children":2548},"\u002Fdocs\u002Finstall\u002Fintroduction",[],{"title":2550,"path":2551,"order":1715,"children":2552},"Configuring FlowFuse","\u002Fdocs\u002Finstall\u002Fconfiguration",[],{"title":2554,"path":2555,"order":1715,"children":2556},"DNS Setup","\u002Fdocs\u002Finstall\u002Fdns-setup",[],{"title":2558,"path":2559,"order":1715,"children":2560},"Docker install","\u002Fdocs\u002Finstall\u002Fdocker",[2561,2565,2569,2573],{"title":2562,"path":2563,"order":1715,"children":2564},"Add Project Stacks on Docker","\u002Fdocs\u002Finstall\u002Fdocker\u002Fstacks",[],{"title":2566,"path":2567,"order":1715,"children":2568},"Docker Engine on Windows","\u002Fdocs\u002Finstall\u002Fdocker\u002Fwindows-docker-ce",[],{"title":2570,"path":2571,"order":1715,"children":2572},"Docker from AWS Market Place","\u002Fdocs\u002Finstall\u002Fdocker\u002Faws-marketplace",[],{"title":2574,"path":2575,"order":1715,"children":2576},"Docker on Digital Ocean","\u002Fdocs\u002Finstall\u002Fdocker\u002Fdigital-ocean",[],{"title":2578,"path":2579,"order":1715,"children":2580},"Email configuration","\u002Fdocs\u002Finstall\u002Femail-providers",[],{"title":2582,"path":2583,"order":1715,"children":2584},"First Run Setup","\u002Fdocs\u002Finstall\u002Ffirst-run",[],{"title":2586,"path":2587,"order":1715,"children":2588},"FlowFuse File Storage","\u002Fdocs\u002Finstall\u002Ffile-storage",[],{"title":2590,"path":2591,"order":1715,"children":2592},"Install FlowFuse on Kubernetes","\u002Fdocs\u002Finstall\u002Fkubernetes",[2593,2597,2601,2605,2609,2613],{"title":2594,"path":2595,"order":1715,"children":2596},"AWS EKS Installation","\u002Fdocs\u002Finstall\u002Fkubernetes\u002Faws",[],{"title":2598,"path":2599,"order":1715,"children":2600},"AWS EKS Installation with Terraform and Helm","\u002Fdocs\u002Finstall\u002Fkubernetes\u002Faws-terraform",[],{"title":2602,"path":2603,"order":1715,"children":2604},"Digital Ocean Kubernetes Installation","\u002Fdocs\u002Finstall\u002Fkubernetes\u002Fdigital-ocean",[],{"title":2606,"path":2607,"order":1715,"children":2608},"Ingress Controller Migration","\u002Fdocs\u002Finstall\u002Fkubernetes\u002Fingress-controller-migration",[],{"title":2610,"path":2611,"order":1715,"children":2612},"Kubernetes Project Stacks","\u002Fdocs\u002Finstall\u002Fkubernetes\u002Fstacks",[],{"title":2614,"path":2615,"order":1715,"children":2616},"OpenShift Installation","\u002Fdocs\u002Finstall\u002Fkubernetes\u002Fopenshift",[],{"title":2618,"path":2619,"group":2537,"groupOrder":127,"order":113,"children":2620},"Upgrading FlowFuse","\u002Fdocs\u002Fupgrade",[2621,2625],{"title":2622,"path":2623,"order":1715,"children":2624},"Installing a license","\u002Fdocs\u002Fupgrade\u002Fopen-source-to-premium",[],{"title":2626,"path":2627,"order":1715,"children":2628},"Upgrading the Node-RED version","\u002Fdocs\u002Fupgrade\u002Fnodered-version",[],{"title":2630,"path":2631,"group":2537,"groupOrder":127,"order":127,"children":2632,"link":1750},"Administering FlowFuse","\u002Fdocs\u002Fadmin",[2633,2636,2648,2656,2660,2664,2668,2672],{"title":2630,"path":2634,"order":83,"children":2635},"\u002Fdocs\u002Fadmin\u002Fintroduction",[],{"title":2637,"path":2638,"order":1715,"children":2639},"Configuring Single Sign-On (SSO)","\u002Fdocs\u002Fadmin\u002Fsso",[2640,2644],{"title":2641,"path":2642,"order":1715,"children":2643},"LDAP SSO","\u002Fdocs\u002Fadmin\u002Fsso\u002Fldap",[],{"title":2645,"path":2646,"order":1715,"children":2647},"SAML SSO","\u002Fdocs\u002Fadmin\u002Fsso\u002Fsaml",[],{"title":2649,"path":2650,"order":1715,"children":2651,"link":1750},"Hardening","\u002Fdocs\u002Fadmin\u002Fhardening",[2652],{"title":2653,"path":2654,"order":1715,"children":2655},"Kubernetes Hardening","\u002Fdocs\u002Fadmin\u002Fhardening\u002Fkubernetes",[],{"title":2657,"path":2658,"order":1715,"children":2659},"Monitoring","\u002Fdocs\u002Fadmin\u002Fmonitoring",[],{"title":2661,"path":2662,"order":1715,"children":2663},"Observability","\u002Fdocs\u002Fadmin\u002Fobservability",[],{"title":2665,"path":2666,"order":1715,"children":2667},"Soft Launch Enablement","\u002Fdocs\u002Fadmin\u002Ffeature-flags",[],{"title":2669,"path":2670,"order":1715,"children":2671},"Telemetry","\u002Fdocs\u002Fadmin\u002Ftelemetry",[],{"title":2673,"path":2674,"order":1715,"children":2675},"User Management","\u002Fdocs\u002Fadmin\u002Fuser-management",[],{"name":2110,"order":139,"children":2677},[2678,2682],{"title":2679,"path":2680,"group":2110,"groupOrder":139,"order":113,"children":2681},"Premium Support","\u002Fdocs\u002Fpremium-support",[],{"title":2683,"path":2684,"group":2110,"groupOrder":139,"order":1715,"children":2685},"Debugging Node-RED issues","\u002Fdocs\u002Fdebugging",[],{"name":2687,"order":488,"children":2688},"Contributing",[2689],{"title":2690,"path":2691,"group":2687,"groupOrder":488,"order":1715,"children":2692,"link":1750},"Contributing to FlowFuse","\u002Fdocs\u002Fcontribute",[2693,2696,2700,2704,2708,2712,2716,2724,2760,2763],{"title":2351,"path":2694,"order":83,"children":2695},"\u002Fdocs\u002Fcontribute\u002Fintroduction",[],{"title":2697,"path":2698,"order":1715,"children":2699},"Adding Template Settings","\u002Fdocs\u002Fcontribute\u002Fadding-template-settings",[],{"title":2701,"path":2702,"order":1715,"children":2703},"API Design","\u002Fdocs\u002Fcontribute\u002Fapi-design",[],{"title":2705,"path":2706,"order":1715,"children":2707},"Creating debug stack containers","\u002Fdocs\u002Fcontribute\u002Fcreating-debug-stack-containers",[],{"title":2709,"path":2710,"order":1715,"children":2711},"Database migrations","\u002Fdocs\u002Fcontribute\u002Fdb-migrations",[],{"title":2713,"path":2714,"order":1715,"children":2715},"FlowFuse Architecture","\u002Fdocs\u002Fcontribute\u002Farchitecture",[],{"title":2717,"path":2718,"order":1715,"children":2719},"Local Install","\u002Fdocs\u002Fcontribute\u002Flocal",[2720],{"title":2721,"path":2722,"order":1715,"children":2723},"Local Stacks","\u002Fdocs\u002Fcontribute\u002Flocal\u002Fstacks",[],{"title":2725,"path":2726,"order":1715,"children":2727},"State Flows","\u002Fdocs\u002Fcontribute\u002Fworkflows",[2728,2732,2736,2740,2744,2748,2752,2756],{"title":2729,"path":2730,"order":1715,"children":2731},"Device Editor","\u002Fdocs\u002Fcontribute\u002Fworkflows\u002Fdevice-editor",[],{"title":2733,"path":2734,"order":1715,"children":2735},"Instance states","\u002Fdocs\u002Fcontribute\u002Fworkflows\u002Fproject-states",[],{"title":2737,"path":2738,"order":1715,"children":2739},"Invite External Users","\u002Fdocs\u002Fcontribute\u002Fworkflows\u002Finvite-external-user",[],{"title":2741,"path":2742,"order":1715,"children":2743},"Project Creation","\u002Fdocs\u002Fcontribute\u002Fworkflows\u002Fproject-create",[],{"title":2745,"path":2746,"order":1715,"children":2747},"Reset Password Flow","\u002Fdocs\u002Fcontribute\u002Fworkflows\u002Fpassword-reset",[],{"title":2749,"path":2750,"order":1715,"children":2751},"Team creation Flow","\u002Fdocs\u002Fcontribute\u002Fworkflows\u002Fteam-create",[],{"title":2753,"path":2754,"order":1715,"children":2755},"User Login Flows","\u002Fdocs\u002Fcontribute\u002Fworkflows\u002Flogin",[],{"title":2757,"path":2758,"order":1715,"children":2759},"User Sign up Flow","\u002Fdocs\u002Fcontribute\u002Fworkflows\u002Fsignup",[],{"title":2331,"path":2761,"order":1715,"children":2762},"\u002Fdocs\u002Fcontribute\u002Fteam-broker",[],{"title":2764,"path":2765,"order":1715,"children":2766},"Working with Feature Flags","\u002Fdocs\u002Fcontribute\u002Ffeature-flags",[],{"name":2768,"order":493,"children":2769},"Node-RED",[2770],{"title":2771,"path":2772,"group":2768,"groupOrder":493,"order":83,"children":2773},"Using Node-RED","\u002Fdocs\u002Fnode-red",[2774,2843,3019,3046,3085,3101,3117,3145,3165,3169],{"title":2775,"path":2776,"order":90,"children":2777},"Getting started","\u002Fdocs\u002Fnode-red\u002Fgetting-started",[2778,2798,2802,2806,2810,2814,2816,2819,2823],{"title":2779,"path":2780,"order":83,"children":2781},"Editor","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Feditor",[2782,2786,2790,2794],{"title":2783,"path":2784,"order":2373,"children":2785},"Header","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Feditor\u002Fheader",[],{"title":2787,"path":2788,"order":2373,"children":2789},"Palette","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Feditor\u002Fpalette",[],{"title":2791,"path":2792,"order":2373,"children":2793},"Sidebar","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Feditor\u002Fsidebar",[],{"title":2795,"path":2796,"order":2373,"children":2797},"Workspace","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Feditor\u002Fworkspace",[],{"title":2799,"path":2800,"order":90,"children":2801},"Port Configuration","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Fnode-red-port",[],{"title":2803,"path":2804,"order":113,"children":2805},"Node-RED Library","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Flibrary",[],{"title":2807,"path":2808,"order":113,"children":2809},"Update Node-RED","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Fupdate-node-red",[],{"title":2811,"path":2812,"order":127,"children":2813},"Node-RED On Android","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Fnode-red-android",[],{"title":1717,"path":1718,"order":139,"children":2815},[],{"title":247,"path":2817,"order":488,"children":2818},"\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Fstring",[],{"title":2820,"path":2821,"order":493,"children":2822},"Date & Time","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Fdate-and-time",[],{"title":2824,"path":2825,"order":499,"children":2826},"Programming","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Fprogramming",[2827,2831,2835,2839],{"title":2828,"path":2829,"order":2373,"children":2830},"Data Tranformation","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Fprogramming\u002Fdata-tranformation",[],{"title":2832,"path":2833,"order":2373,"children":2834},"Debugging","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Fprogramming\u002Fdebugging-flows",[],{"title":2836,"path":2837,"order":2373,"children":2838},"If-Else","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Fprogramming\u002Fif-else",[],{"title":2840,"path":2841,"order":2373,"children":2842},"Loop","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Fprogramming\u002Floop",[],{"title":2844,"path":2845,"order":113,"children":2846},"Core nodes","\u002Fdocs\u002Fnode-red\u002Fcore-nodes",[2847,2883,2922,2964,2984,3007],{"title":2848,"path":2849,"order":83,"children":2850},"Common nodes","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fcommon",[2851,2855,2859,2863,2867,2871,2875,2879],{"title":2852,"path":2853,"order":83,"children":2854},"Inject","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fcommon\u002Finject",[],{"title":2856,"path":2857,"order":90,"children":2858},"Debug","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fcommon\u002Fdebug",[],{"title":2860,"path":2861,"order":113,"children":2862},"Complete","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fcommon\u002Fcomplete",[],{"title":2864,"path":2865,"order":127,"children":2866},"Catch","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fcommon\u002Fcatch",[],{"title":2868,"path":2869,"order":139,"children":2870},"Status","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fcommon\u002Fstatus",[],{"title":2872,"path":2873,"order":488,"children":2874},"Link","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fcommon\u002Flink",[],{"title":2876,"path":2877,"order":493,"children":2878},"Comment","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fcommon\u002Fcomment",[],{"title":2880,"path":2881,"order":499,"children":2882},"Unknown","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fcommon\u002Funknown",[],{"title":2884,"path":2885,"order":90,"children":2886},"Function nodes","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Ffunction",[2887,2891,2895,2898,2902,2906,2910,2914,2918],{"title":2888,"path":2889,"order":83,"children":2890},"Function","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Ffunction\u002Ffunction",[],{"title":2892,"path":2893,"order":90,"children":2894},"Switch","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Ffunction\u002Fswitch",[],{"title":313,"path":2896,"order":113,"children":2897},"\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Ffunction\u002Fchange",[],{"title":2899,"path":2900,"order":127,"children":2901},"Range","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Ffunction\u002Frange",[],{"title":2903,"path":2904,"order":139,"children":2905},"Template","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Ffunction\u002Ftemplate",[],{"title":2907,"path":2908,"order":488,"children":2909},"Delay","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Ffunction\u002Fdelay",[],{"title":2911,"path":2912,"order":493,"children":2913},"Trigger","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Ffunction\u002Ftrigger",[],{"title":2915,"path":2916,"order":499,"children":2917},"Exec","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Ffunction\u002Fexec",[],{"title":2919,"path":2920,"order":822,"children":2921},"Filter","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Ffunction\u002Ffilter",[],{"title":2923,"path":2924,"order":113,"children":2925},"Network nodes","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fnetwork",[2926,2930,2934,2937,2940,2944,2948,2952,2956,2960],{"title":2927,"path":2928,"order":83,"children":2929},"TLS","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fnetwork\u002Ftls",[],{"title":2931,"path":2932,"order":90,"children":2933},"HTTP Proxy","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fnetwork\u002Fhttp-proxy",[],{"title":2438,"path":2935,"order":113,"children":2936},"\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fnetwork\u002Fmqtt-in",[],{"title":2442,"path":2938,"order":127,"children":2939},"\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fnetwork\u002Fmqtt-out",[],{"title":2941,"path":2942,"order":139,"children":2943},"HTTP in","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fnetwork\u002Fhttp-in",[],{"title":2945,"path":2946,"order":488,"children":2947},"HTTP request","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fnetwork\u002Fhttp-request",[],{"title":2949,"path":2950,"order":493,"children":2951},"WebSocket","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fnetwork\u002Fwebsocket",[],{"title":2953,"path":2954,"order":499,"children":2955},"TCP in","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fnetwork\u002Ftcp-in",[],{"title":2957,"path":2958,"order":822,"children":2959},"UDP In","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fnetwork\u002Fudp-in",[],{"title":2961,"path":2962,"order":1103,"children":2963},"UDP Out","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fnetwork\u002Fudp-out",[],{"title":2965,"path":2966,"order":127,"children":2967},"Sequence nodes","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fsequence",[2968,2972,2976,2980],{"title":2969,"path":2970,"order":83,"children":2971},"Split","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fsequence\u002Fsplit",[],{"title":2973,"path":2974,"order":90,"children":2975},"Sort","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fsequence\u002Fsort",[],{"title":2977,"path":2978,"order":113,"children":2979},"Batch","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fsequence\u002Fbatch",[],{"title":2981,"path":2982,"order":127,"children":2983},"Join","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fsequence\u002Fjoin",[],{"title":2985,"path":2986,"order":139,"children":2987},"Parser nodes","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fparsers",[2988,2992,2996,2999,3003],{"title":2989,"path":2990,"order":83,"children":2991},"CSV","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fparsers\u002Fcsv",[],{"title":2993,"path":2994,"order":90,"children":2995},"HTML","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fparsers\u002Fhtml",[],{"title":1199,"path":2997,"order":113,"children":2998},"\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fparsers\u002Fjson",[],{"title":3000,"path":3001,"order":127,"children":3002},"XML","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fparsers\u002Fxml",[],{"title":3004,"path":3005,"order":139,"children":3006},"YAML","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fparsers\u002Fyaml",[],{"title":3008,"path":3009,"order":488,"children":3010},"Storage nodes","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fstorage",[3011,3015],{"title":3012,"path":3013,"order":83,"children":3014},"Write File","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fstorage\u002Fwrite-file",[],{"title":3016,"path":3017,"order":90,"children":3018},"Read File","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fstorage\u002Fread-file",[],{"title":3020,"path":3021,"order":127,"children":3022},"Communication protocols","\u002Fdocs\u002Fnode-red\u002Fprotocol",[3023,3027,3031,3034,3038,3042],{"title":3024,"path":3025,"order":2373,"children":3026},"AMQP","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Famqp",[],{"title":3028,"path":3029,"order":2373,"children":3030},"LwM2M","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Flwm2m",[],{"title":2427,"path":3032,"order":2373,"children":3033},"\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fmodbus",[],{"title":3035,"path":3036,"order":2373,"children":3037},"MQTT","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fmqtt",[],{"title":3039,"path":3040,"order":2373,"children":3041},"OPC-UA","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fopc-ua",[],{"title":3043,"path":3044,"order":2373,"children":3045},"Websocket","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fwebsocket",[],{"title":3047,"path":3048,"order":139,"children":3049},"Databases","\u002Fdocs\u002Fnode-red\u002Fdatabase",[3050,3054,3058,3062,3066,3070,3074,3077,3081],{"title":3051,"path":3052,"order":2373,"children":3053},"DynamoDB","\u002Fdocs\u002Fnode-red\u002Fdatabase\u002Fdynamodb",[],{"title":3055,"path":3056,"order":2373,"children":3057},"Firebase","\u002Fdocs\u002Fnode-red\u002Fdatabase\u002Ffirebase",[],{"title":3059,"path":3060,"order":2373,"children":3061},"InfluxDB","\u002Fdocs\u002Fnode-red\u002Fdatabase\u002Finfluxdb",[],{"title":3063,"path":3064,"order":2373,"children":3065},"MongoDB","\u002Fdocs\u002Fnode-red\u002Fdatabase\u002Fmongodb",[],{"title":3067,"path":3068,"order":2373,"children":3069},"MySQL","\u002Fdocs\u002Fnode-red\u002Fdatabase\u002Fmysql",[],{"title":3071,"path":3072,"order":2373,"children":3073},"PostgreSQL","\u002Fdocs\u002Fnode-red\u002Fdatabase\u002Fpostgresql",[],{"title":2450,"path":3075,"order":2373,"children":3076},"\u002Fdocs\u002Fnode-red\u002Fdatabase\u002Fredis",[],{"title":3078,"path":3079,"order":2373,"children":3080},"SQLite","\u002Fdocs\u002Fnode-red\u002Fdatabase\u002Fsqlite",[],{"title":3082,"path":3083,"order":2373,"children":3084},"TimescaleDB","\u002Fdocs\u002Fnode-red\u002Fdatabase\u002Ftimescaledb",[],{"title":3086,"path":3087,"order":488,"children":3088},"Integration technologies","\u002Fdocs\u002Fnode-red\u002Fintegration-technologies",[3089,3093,3097],{"title":3090,"path":3091,"order":2373,"children":3092},"GraphQL API","\u002Fdocs\u002Fnode-red\u002Fintegration-technologies\u002Fgraphql",[],{"title":3094,"path":3095,"order":2373,"children":3096},"REST API","\u002Fdocs\u002Fnode-red\u002Fintegration-technologies\u002Frest",[],{"title":3098,"path":3099,"order":2373,"children":3100},"Webhook","\u002Fdocs\u002Fnode-red\u002Fintegration-technologies\u002Fwebhook",[],{"title":3102,"path":3103,"order":493,"children":3104},"Notification services","\u002Fdocs\u002Fnode-red\u002Fnotification",[3105,3109,3113],{"title":3106,"path":3107,"order":2373,"children":3108},"Discord","\u002Fdocs\u002Fnode-red\u002Fnotification\u002Fdiscord",[],{"title":3110,"path":3111,"order":2373,"children":3112},"Email","\u002Fdocs\u002Fnode-red\u002Fnotification\u002Femail",[],{"title":3114,"path":3115,"order":2373,"children":3116},"Telegram","\u002Fdocs\u002Fnode-red\u002Fnotification\u002Ftelegram",[],{"title":3118,"path":3119,"order":499,"children":3120},"Hardware","\u002Fdocs\u002Fnode-red\u002Fhardware",[3121,3125,3129,3133,3137,3141],{"title":3122,"path":3123,"order":2373,"children":3124},"BLIIOT ARMxy BL340","\u002Fdocs\u002Fnode-red\u002Fhardware\u002Farmxy-bl340",[],{"title":3126,"path":3127,"order":2373,"children":3128},"Opto-22 Groov Epic","\u002Fdocs\u002Fnode-red\u002Fhardware\u002Fopto-22-groove-rio-7-mm2001-10",[],{"title":3130,"path":3131,"order":2373,"children":3132},"Raspberry Pi 4","\u002Fdocs\u002Fnode-red\u002Fhardware\u002Fraspberry-pi-4",[],{"title":3134,"path":3135,"order":2373,"children":3136},"Raspberry Pi 5","\u002Fdocs\u002Fnode-red\u002Fhardware\u002Fraspberry-pi-5",[],{"title":3138,"path":3139,"order":2373,"children":3140},"Robustel EG5120","\u002Fdocs\u002Fnode-red\u002Fhardware\u002Frobustel-eg5120",[],{"title":3142,"path":3143,"order":2373,"children":3144},"Siemens IoT2050","\u002Fdocs\u002Fnode-red\u002Fhardware\u002Fsiemens-iot-2050",[],{"title":3146,"path":3147,"order":822,"children":3148},"Peripheral devices","\u002Fdocs\u002Fnode-red\u002Fperipheral",[3149,3153,3157,3161],{"title":3150,"path":3151,"order":2373,"children":3152},"Arduino","\u002Fdocs\u002Fnode-red\u002Fperipheral\u002Fardiuno",[],{"title":3154,"path":3155,"order":2373,"children":3156},"Barcode Scanner","\u002Fdocs\u002Fnode-red\u002Fperipheral\u002Fbarcodescanner",[],{"title":3158,"path":3159,"order":2373,"children":3160},"ESP32","\u002Fdocs\u002Fnode-red\u002Fperipheral\u002Fesp32",[],{"title":3162,"path":3163,"order":2373,"children":3164},"Webcam","\u002Fdocs\u002Fnode-red\u002Fperipheral\u002Fwebcam",[],{"title":3166,"path":3167,"order":1103,"children":3168},"Terminology","\u002Fdocs\u002Fnode-red\u002Fterminology",[],{"title":3170,"path":3171,"order":1108,"children":3172},"Keyboard shortcuts","\u002Fdocs\u002Fnode-red\u002Fkeyboard",[],1788888668145]