[{"data":1,"prerenderedAt":2382},["ShallowReactive",2],{"docs-\u002Fdocs\u002Fnode-red\u002Fdatabase\u002Fpostgresql\u002F":3,"featureCatalog":931,"docs-nav":1336},{"id":4,"title":5,"body":6,"description":16,"editUrl":919,"extension":920,"layout":921,"meta":922,"metaTitle":5,"navGroup":921,"navGroupOrder":921,"navOrder":924,"navTitle":925,"navigation":606,"originalPath":921,"path":926,"redirect":921,"seo":927,"stem":928,"updated":929,"version":921,"__hash__":930},"docs\u002Fdocs\u002Fnode-red\u002Fdatabase\u002Fpostgresql.md","Using PostgreSQL with Node-RED (2026 Updated)",{"type":7,"value":8,"toc":905},"minimark",[9,13,17,22,25,50,68,74,82,89,93,101,120,126,130,133,141,233,240,245,249,257,261,264,271,289,396,401,431,438,443,447,450,464,479,486,490,497,500,511,587,592,661,668,672,676,683,686,695,770,775,800,805,809,813,816,823,847,854,858,865,871,878,883,901],[10,11,5],"h1",{"id":12},"using-postgresql-with-node-red-2026-updated",[14,15,16],"p",{},"PostgreSQL is a highly reliable open-source relational database known for its extensive features. It supports diverse data types, robust SQL, and ACID compliance, allowing high-performance systems. Over the years, it has demonstrated reliability, security, and compatibility, which makes it a popular choice for businesses worldwide.",[18,19,21],"h2",{"id":20},"getting-started","Getting Started",[14,23,24],{},"The first thing we need to do to get things started is to install the PostgreSQL custom node and gain an understanding of PostgreSQL configuration details.",[26,27,28,43],"ol",{},[29,30,31,32,36,37,42],"li",{},"Install ",[33,34,35],"code",{},"node-red-contrib-postgresql"," by the pallet manager. You can choose other nodes too, but we chose this node because it is part of the ",[38,39,41],"a",{"href":40},"\u002Fcertified-nodes\u002F","certified node catalog by FlowFuse"," which assures that the node is robust, secure, and developed with high quality.",[29,44,45,46,49],{},"Before connecting to your PostgreSQL database, ensure you have the following information ready and environment variables set up as discussed below in the ",[33,47,48],{},"Adding environment variable"," section:",[51,52,53,56,59,62,65],"ul",{},[29,54,55],{},"Host: IP address or hostname of your PostgreSQL server.",[29,57,58],{},"Port: By default, PostgreSQL uses port 5432. Ensure this matches your PostgreSQL server configuration.",[29,60,61],{},"Database: The name of the PostgreSQL database you want to connect to.",[29,63,64],{},"User: Username with the necessary privileges to access the specified database.",[29,66,67],{},"Password: Corresponding password for the username.",[26,69,71],{"start":70},3,[29,72,73],{},"Drag the PostgreSQL node onto the canvas, click on that node, and click on the edit icon next to the server input field to configure it.",[14,75,76],{},[77,78],"img",{"alt":79,"src":80,"title":81},"\"Configuring PostgreSQL Connection\"","\u002Fdocs\u002Fnode-red\u002Fdatabase\u002Fimages\u002Fpostgresql_with_node-red_pgconfig1.png","Configuring PostgreSQL Connection",[14,83,84],{},[77,85],{"alt":86,"src":87,"title":88},"\"Configuring PostgreSQL Security\"","\u002Fdocs\u002Fnode-red\u002Fdatabase\u002Fimages\u002Fpostgresql_with_node-red_pgconfig2.png","Configuring PostgreSQL Security",[18,90,92],{"id":91},"adding-environment-variables","Adding environment variables",[14,94,95,96,100],{},"Environment variables are used to securely manage sensitive configuration details, such as API keys, passwords, and secret keys, within your applications. This prevents exposing such information directly in the code or configuration files, for more details refer to ",[38,97,99],{"href":98},"\u002Fblog\u002F2023\u002F01\u002Fenvironment-variables-in-node-red\u002F","Using Environment Variables in Node-RED",".",[26,102,103,106,113],{},[29,104,105],{},"Navigate to the instance's setting and then go to the environment section.",[29,107,108,109,112],{},"Click on the ",[33,110,111],{},"add variable"," button and add variables for each of the configuration data that we discussed in the above section.",[29,114,115,116,119],{},"Click on the save button and restart the instance by clicking on the top right ",[33,117,118],{},"Action"," button and selecting the restart option.",[14,121,122],{},[77,123],{"alt":124,"src":125,"title":92},"\"Adding environment variables\"","\u002Fdocs\u002Fnode-red\u002Fdatabase\u002Fimages\u002Fpostgresql_with_nodred_environment_variable.png",[18,127,129],{"id":128},"creating-table","Creating Table",[14,131,132],{},"In this section, we will create a table in our database to store product data.",[26,134,135,138],{},[29,136,137],{},"Drag an Inject node onto canvas, and keep it unchanged.",[29,139,140],{},"Click on the PostgreSQL node we added previously and paste the following SQL command into the query input field. (I have added comments for your understanding of SQL commands)",[142,143,148],"pre",{"className":144,"code":145,"language":146,"meta":147,"style":147},"language-sql shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","-- Create a table named product_data if it does not already exist\nCREATE TABLE IF NOT EXISTS product_data (\n  -- Define a column named id as a SERIAL type, which serves as the primary key\n id SERIAL PRIMARY KEY, -- SERIAL data type automatically generates unique integer values for each row inserted into the table\n  \n  -- Define a column named name to store product names as variable-length character strings with a maximum length of 100 characters, ensuring it's not null\n  name varchar(100) NOT NULL,\n  \n  -- Define a column named price to store product prices, ensuring it's not null\n price int NOT NULL,\n  \n  -- Define a column named stock to store product stock levels, ensuring it's not null\n stock int NOT NULL\n);\n","sql","",[33,149,150,158,164,169,175,181,187,193,198,204,210,215,221,227],{"__ignoreMap":147},[151,152,155],"span",{"class":153,"line":154},"line",1,[151,156,157],{},"-- Create a table named product_data if it does not already exist\n",[151,159,161],{"class":153,"line":160},2,[151,162,163],{},"CREATE TABLE IF NOT EXISTS product_data (\n",[151,165,166],{"class":153,"line":70},[151,167,168],{},"  -- Define a column named id as a SERIAL type, which serves as the primary key\n",[151,170,172],{"class":153,"line":171},4,[151,173,174],{}," id SERIAL PRIMARY KEY, -- SERIAL data type automatically generates unique integer values for each row inserted into the table\n",[151,176,178],{"class":153,"line":177},5,[151,179,180],{},"  \n",[151,182,184],{"class":153,"line":183},6,[151,185,186],{},"  -- Define a column named name to store product names as variable-length character strings with a maximum length of 100 characters, ensuring it's not null\n",[151,188,190],{"class":153,"line":189},7,[151,191,192],{},"  name varchar(100) NOT NULL,\n",[151,194,196],{"class":153,"line":195},8,[151,197,180],{},[151,199,201],{"class":153,"line":200},9,[151,202,203],{},"  -- Define a column named price to store product prices, ensuring it's not null\n",[151,205,207],{"class":153,"line":206},10,[151,208,209],{}," price int NOT NULL,\n",[151,211,213],{"class":153,"line":212},11,[151,214,180],{},[151,216,218],{"class":153,"line":217},12,[151,219,220],{},"  -- Define a column named stock to store product stock levels, ensuring it's not null\n",[151,222,224],{"class":153,"line":223},13,[151,225,226],{}," stock int NOT NULL\n",[151,228,230],{"class":153,"line":229},14,[151,231,232],{},");\n",[14,234,235],{},[77,236],{"alt":237,"src":238,"title":239},"\"Creating table for product data\"","\u002Fdocs\u002Fnode-red\u002Fdatabase\u002Fimages\u002Fpostgresql_with_nodered_create_table.png","Creating table for product data",[26,241,242],{"start":70},[29,243,244],{},"Connect the inject node’s output to the PostgreSQL node’s input.",[18,246,248],{"id":247},"installing-dashboard-20","Installing Dashboard 2.0",[14,250,251,252,256],{},"Install Dashboard 2.0. Follow these ",[38,253,255],{"href":254},"\u002Fblog\u002F2024\u002F03\u002Fdashboard-getting-started\u002F","instructions"," to get up and running.",[18,258,260],{"id":259},"inserting-product-data-into-the-database","Inserting Product Data into the Database",[14,262,263],{},"In this section, we will add a Form interface that will enable us to obtain product data that we need to insert into the database. Moreover, we will use the PostgreSQL node to interact with the database.",[14,265,266],{},[77,267],{"alt":268,"src":269,"title":270},"\"Adding form to insert data\"","\u002Fdocs\u002Fnode-red\u002Fdatabase\u002Fimages\u002Fpostgresql_with_node-red_form1.png","Adding form to insert data",[26,272,273,283,286],{},[29,274,275,276,279,280,100],{},"Drag a ",[33,277,278],{},"ui-form"," widget onto the canvas and select the created ",[33,281,282],{},"ui-group",[29,284,285],{},"Add an element for all required input data in the form widget and give it a name, label, and select type, I have selected 'number' as a type for 'price' and 'stock', and 'text' for 'name', but feel free to adjust according to your preference and data requirements.",[29,287,288],{},"Drag the function node onto Canvas and paste the following script.",[142,290,294],{"className":291,"code":292,"language":293,"meta":147,"style":147},"language-javascript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F Destructure the properties from msg.payload (obtained data by using form)\nconst {name, price, stock } = msg.payload;\n\u002F\u002F Create an array containing name, price, and stock\n\u002F\u002F The order of the array items in msg.params will correspond to the placeholders in the SQL query\n\u002F\u002F For example, $1 will be replaced by the value of name, $2 will be replaced by the value of the price, and so on\nmsg.params = [name, price, stock];\nreturn msg;\n","javascript",[33,295,296,302,344,349,354,359,386],{"__ignoreMap":147},[151,297,298],{"class":153,"line":154},[151,299,301],{"class":300},"sHwdD","\u002F\u002F Destructure the properties from msg.payload (obtained data by using form)\n",[151,303,304,308,312,316,319,322,324,327,330,333,336,338,341],{"class":153,"line":160},[151,305,307],{"class":306},"spNyl","const",[151,309,311],{"class":310},"sMK4o"," {",[151,313,315],{"class":314},"sTEyZ","name",[151,317,318],{"class":310},",",[151,320,321],{"class":314}," price",[151,323,318],{"class":310},[151,325,326],{"class":314}," stock ",[151,328,329],{"class":310},"}",[151,331,332],{"class":310}," =",[151,334,335],{"class":314}," msg",[151,337,100],{"class":310},[151,339,340],{"class":314},"payload",[151,342,343],{"class":310},";\n",[151,345,346],{"class":153,"line":70},[151,347,348],{"class":300},"\u002F\u002F Create an array containing name, price, and stock\n",[151,350,351],{"class":153,"line":171},[151,352,353],{"class":300},"\u002F\u002F The order of the array items in msg.params will correspond to the placeholders in the SQL query\n",[151,355,356],{"class":153,"line":177},[151,357,358],{"class":300},"\u002F\u002F For example, $1 will be replaced by the value of name, $2 will be replaced by the value of the price, and so on\n",[151,360,361,364,366,369,372,375,377,379,381,384],{"class":153,"line":183},[151,362,363],{"class":314},"msg",[151,365,100],{"class":310},[151,367,368],{"class":314},"params ",[151,370,371],{"class":310},"=",[151,373,374],{"class":314}," [name",[151,376,318],{"class":310},[151,378,321],{"class":314},[151,380,318],{"class":310},[151,382,383],{"class":314}," stock]",[151,385,343],{"class":310},[151,387,388,392,394],{"class":153,"line":189},[151,389,391],{"class":390},"s7zQu","return",[151,393,335],{"class":314},[151,395,343],{"class":310},[26,397,398],{"start":171},[29,399,400],{},"Drag a PostgreSQL node onto the Canvas and click on that node and paste the following SQL command into the query input field",[142,402,404],{"className":144,"code":403,"language":146,"meta":147,"style":147},"-- This is an SQL INSERT statement used to add data into the product_data table.\nINSERT INTO product_data ( name, price, stock)\n-- This line specifies the columns into which data will be inserted. The columns are name, price, and stock.\n-- It's important to match the columns in the same order as the values in the next line.\nVALUES ($1, $2, $3);\n",[33,405,406,411,416,421,426],{"__ignoreMap":147},[151,407,408],{"class":153,"line":154},[151,409,410],{},"-- This is an SQL INSERT statement used to add data into the product_data table.\n",[151,412,413],{"class":153,"line":160},[151,414,415],{},"INSERT INTO product_data ( name, price, stock)\n",[151,417,418],{"class":153,"line":70},[151,419,420],{},"-- This line specifies the columns into which data will be inserted. The columns are name, price, and stock.\n",[151,422,423],{"class":153,"line":171},[151,424,425],{},"-- It's important to match the columns in the same order as the values in the next line.\n",[151,427,428],{"class":153,"line":177},[151,429,430],{},"VALUES ($1, $2, $3);\n",[14,432,433],{},[77,434],{"alt":435,"src":436,"title":437},"\"Inserting data into database\"","\u002Fdocs\u002Fnode-red\u002Fdatabase\u002Fimages\u002Fpostgresql_with_node-red_insert_data.png","Inserting data into database",[26,439,440],{"start":177},[29,441,442],{},"Connect ui-form’s output to the function node’s input and the function node's output to the PostgreSQL node’s input.",[18,444,446],{"id":445},"displaying-product-data-on-dashboard-20","Displaying product data on Dashboard 2.0",[14,448,449],{},"In this section, we will retrieve all data from our database table and display it on Dashboard 2.0 using the ui-table widget.",[26,451,452,455,458,461],{},[29,453,454],{},"Drag an Inject node onto the canvas.",[29,456,457],{},"Drag a PostgreSQL node onto the Canvas and click on that node and paste the following SQL command into the query input field.",[29,459,460],{},"Drag a ui-table widget onto the canvas and create a new ui-group for it.",[29,462,463],{},"Connect the inject node's output to the PostgreSQL node’s input and the PostgreSQL node's output to the ui-table's input.",[142,465,467],{"className":144,"code":466,"language":146,"meta":147,"style":147},"-- Retrieve all data from the product_data table\nSELECT * FROM product_data;\n",[33,468,469,474],{"__ignoreMap":147},[151,470,471],{"class":153,"line":154},[151,472,473],{},"-- Retrieve all data from the product_data table\n",[151,475,476],{"class":153,"line":160},[151,477,478],{},"SELECT * FROM product_data;\n",[14,480,481],{},[77,482],{"alt":483,"src":484,"title":485},"\"Retriving all product data from database\"","\u002Fdocs\u002Fnode-red\u002Fdatabase\u002Fimages\u002Fpostgresql_with_node-red_retrive_data.png","Retriving all product data from database",[18,487,489],{"id":488},"updating-product-data-to-the-database","Updating product data to the Database",[14,491,492],{},[77,493],{"alt":494,"src":495,"title":496},"\"Adding form to update product data\"","\u002Fdocs\u002Fnode-red\u002Fdatabase\u002Fimages\u002Fpostgresql_with_node-red_form2.png","adding form to update product data",[14,498,499],{},"In this section, we will add a form interface to collect the product ID and the new stock value for the update process. Feel free to select other data fields that you need to update. To achieve this, we will add a form interface using Dashboard 2.0. Additionally, we will interact with the database using the same PostgreSQL node that we have used so far in this guide.",[26,501,502,505,508],{},[29,503,504],{},"Drag a ui-form widget onto the canvas and create a new ui-group for it.",[29,506,507],{},"Add elements for product id and stock in the form widget and give it a name, label, and select type.",[29,509,510],{},"Drag a function node onto Canvas and paste the following script.",[142,512,514],{"className":291,"code":513,"language":293,"meta":147,"style":147},"\u002F\u002F Destructure the properties from msg.payload\nconst { id, stock } = msg.payload;\n\u002F\u002F Create an array containing id and stock\n\u002F\u002F The order of the array items in msg.params will correspond to the placeholders in the SQL query\n\u002F\u002F For example, $1 will be replaced by the value of id, $2 will be replaced by the value of stock\nmsg.params = [id, stock];\nreturn msg;\n",[33,515,516,521,546,551,555,560,579],{"__ignoreMap":147},[151,517,518],{"class":153,"line":154},[151,519,520],{"class":300},"\u002F\u002F Destructure the properties from msg.payload\n",[151,522,523,525,527,530,532,534,536,538,540,542,544],{"class":153,"line":160},[151,524,307],{"class":306},[151,526,311],{"class":310},[151,528,529],{"class":314}," id",[151,531,318],{"class":310},[151,533,326],{"class":314},[151,535,329],{"class":310},[151,537,332],{"class":310},[151,539,335],{"class":314},[151,541,100],{"class":310},[151,543,340],{"class":314},[151,545,343],{"class":310},[151,547,548],{"class":153,"line":70},[151,549,550],{"class":300},"\u002F\u002F Create an array containing id and stock\n",[151,552,553],{"class":153,"line":171},[151,554,353],{"class":300},[151,556,557],{"class":153,"line":177},[151,558,559],{"class":300},"\u002F\u002F For example, $1 will be replaced by the value of id, $2 will be replaced by the value of stock\n",[151,561,562,564,566,568,570,573,575,577],{"class":153,"line":183},[151,563,363],{"class":314},[151,565,100],{"class":310},[151,567,368],{"class":314},[151,569,371],{"class":310},[151,571,572],{"class":314}," [id",[151,574,318],{"class":310},[151,576,383],{"class":314},[151,578,343],{"class":310},[151,580,581,583,585],{"class":153,"line":189},[151,582,391],{"class":390},[151,584,335],{"class":314},[151,586,343],{"class":310},[26,588,589],{"start":171},[29,590,591],{},"Drag a PostgreSQL node on canvas, click on that node and paste the following SQL command into the query input field.",[142,593,595],{"className":144,"code":594,"language":146,"meta":147,"style":147},"-- UPDATE statement to modify data in the product_data table\n\nUPDATE product_data \n-- Specifies the table to be updated (product_data)\n\nSET \n stock = $2\n-- Sets the value of the \"stock\" column to the value represented by the parameter $2.\n-- The value to be set is typically provided externally, In our context, we get this parameter by \"msg.params\"\n\nWHERE id = $1;\n-- Specifies the condition that must be met for the update to occur.\n-- In this case, it updates rows where the \"id\" column matches the value represented by the parameter $1.\n",[33,596,597,602,608,613,618,622,627,632,637,642,646,651,656],{"__ignoreMap":147},[151,598,599],{"class":153,"line":154},[151,600,601],{},"-- UPDATE statement to modify data in the product_data table\n",[151,603,604],{"class":153,"line":160},[151,605,607],{"emptyLinePlaceholder":606},true,"\n",[151,609,610],{"class":153,"line":70},[151,611,612],{},"UPDATE product_data \n",[151,614,615],{"class":153,"line":171},[151,616,617],{},"-- Specifies the table to be updated (product_data)\n",[151,619,620],{"class":153,"line":177},[151,621,607],{"emptyLinePlaceholder":606},[151,623,624],{"class":153,"line":183},[151,625,626],{},"SET \n",[151,628,629],{"class":153,"line":189},[151,630,631],{}," stock = $2\n",[151,633,634],{"class":153,"line":195},[151,635,636],{},"-- Sets the value of the \"stock\" column to the value represented by the parameter $2.\n",[151,638,639],{"class":153,"line":200},[151,640,641],{},"-- The value to be set is typically provided externally, In our context, we get this parameter by \"msg.params\"\n",[151,643,644],{"class":153,"line":206},[151,645,607],{"emptyLinePlaceholder":606},[151,647,648],{"class":153,"line":212},[151,649,650],{},"WHERE id = $1;\n",[151,652,653],{"class":153,"line":217},[151,654,655],{},"-- Specifies the condition that must be met for the update to occur.\n",[151,657,658],{"class":153,"line":223},[151,659,660],{},"-- In this case, it updates rows where the \"id\" column matches the value represented by the parameter $1.\n",[14,662,663],{},[77,664],{"alt":665,"src":666,"title":667},"\"Updating product data to the database\"","\u002Fdocs\u002Fnode-red\u002Fdatabase\u002Fimages\u002Fpostgresql_with_node-red_update_data.png","Updating product data to the database",[26,669,670],{"start":177},[29,671,442],{},[18,673,675],{"id":674},"deleting-product-data-from-the-database","Deleting product data from the database",[14,677,678],{},[77,679],{"alt":680,"src":681,"title":682},"\"Deleting product data to the database\"","\u002Fdocs\u002Fnode-red\u002Fdatabase\u002Fimages\u002Fpostgresql_with_node-red_form3.png","Deleting product data to the database",[14,684,685],{},"In this section, we'll cover how to delete product data from the database. We will use Dashboard 2.0's form interface to collect essential information like the product id and name. While the product id alone is sufficient to delete a product from the database, we include the product name as an additional precaution to prevent accidental deletion of product data.",[26,687,688,690,693],{},[29,689,504],{},[29,691,692],{},"Add elements for product id and name in the form widget and give it a name, label, and select type.",[29,694,510],{},[142,696,698],{"className":291,"code":697,"language":293,"meta":147,"style":147},"\u002F\u002F Destructure the properties from msg.payload\nconst { id, name } = msg.payload;\n\u002F\u002F Create an array containing id and name\n\u002F\u002F The order of the array items in msg.params will correspond to the placeholders in the SQL query\n\u002F\u002F For example, $1 will be replaced by the value of id, $2 will be replaced by the value of name\nmsg.params = [id, name ];\nreturn msg;\n",[33,699,700,704,729,734,738,743,762],{"__ignoreMap":147},[151,701,702],{"class":153,"line":154},[151,703,520],{"class":300},[151,705,706,708,710,712,714,717,719,721,723,725,727],{"class":153,"line":160},[151,707,307],{"class":306},[151,709,311],{"class":310},[151,711,529],{"class":314},[151,713,318],{"class":310},[151,715,716],{"class":314}," name ",[151,718,329],{"class":310},[151,720,332],{"class":310},[151,722,335],{"class":314},[151,724,100],{"class":310},[151,726,340],{"class":314},[151,728,343],{"class":310},[151,730,731],{"class":153,"line":70},[151,732,733],{"class":300},"\u002F\u002F Create an array containing id and name\n",[151,735,736],{"class":153,"line":171},[151,737,353],{"class":300},[151,739,740],{"class":153,"line":177},[151,741,742],{"class":300},"\u002F\u002F For example, $1 will be replaced by the value of id, $2 will be replaced by the value of name\n",[151,744,745,747,749,751,753,755,757,760],{"class":153,"line":183},[151,746,363],{"class":314},[151,748,100],{"class":310},[151,750,368],{"class":314},[151,752,371],{"class":310},[151,754,572],{"class":314},[151,756,318],{"class":310},[151,758,759],{"class":314}," name ]",[151,761,343],{"class":310},[151,763,764,766,768],{"class":153,"line":189},[151,765,391],{"class":390},[151,767,335],{"class":314},[151,769,343],{"class":310},[26,771,772],{"start":171},[29,773,774],{},"Drag a PostgreSQL node on canvas, click on that node, and paste the following SQL command into the query input field.",[142,776,778],{"className":144,"code":777,"language":146,"meta":147,"style":147},"-- Deletes rows from the \"product_data\" table where both \"id\" and \"name\" match the given parameters\nDELETE FROM product_data \n-- Specifies the conditions for deletion\nWHERE id = $1 AND name = $2;\n",[33,779,780,785,790,795],{"__ignoreMap":147},[151,781,782],{"class":153,"line":154},[151,783,784],{},"-- Deletes rows from the \"product_data\" table where both \"id\" and \"name\" match the given parameters\n",[151,786,787],{"class":153,"line":160},[151,788,789],{},"DELETE FROM product_data \n",[151,791,792],{"class":153,"line":70},[151,793,794],{},"-- Specifies the conditions for deletion\n",[151,796,797],{"class":153,"line":171},[151,798,799],{},"WHERE id = $1 AND name = $2;\n",[14,801,802],{},[77,803],{"alt":680,"src":804,"title":682},"\u002Fdocs\u002Fnode-red\u002Fdatabase\u002Fimages\u002Fpostgresql_with_node-red_delete_data.png",[26,806,807],{"start":177},[29,808,442],{},[18,810,812],{"id":811},"dropping-table","Dropping Table",[14,814,815],{},"This section will explain how to drop ( delete ) tables from the database.",[26,817,818,820],{},[29,819,454],{},[29,821,822],{},"Drag a PostgreSQL node onto canvas and paste the following SQL command into the query input field.",[142,824,826],{"className":144,"code":825,"language":146,"meta":147,"style":147},"-- Drop the table 'product_data' if it exists to avoid conflicts.\nDROP TABLE IF EXISTS product_data;\n\n-- Note: 'IF EXISTS' is used to check if the table exists in the database before attempting to drop it.\n",[33,827,828,833,838,842],{"__ignoreMap":147},[151,829,830],{"class":153,"line":154},[151,831,832],{},"-- Drop the table 'product_data' if it exists to avoid conflicts.\n",[151,834,835],{"class":153,"line":160},[151,836,837],{},"DROP TABLE IF EXISTS product_data;\n",[151,839,840],{"class":153,"line":70},[151,841,607],{"emptyLinePlaceholder":606},[151,843,844],{"class":153,"line":171},[151,845,846],{},"-- Note: 'IF EXISTS' is used to check if the table exists in the database before attempting to drop it.\n",[14,848,849],{},[77,850],{"alt":851,"src":852,"title":853},"\"Droping product_data from the database\"","\u002Fdocs\u002Fnode-red\u002Fdatabase\u002Fimages\u002Fpostgresql_with_node-red_drop_tables.png","Droping product_data from the database",[18,855,857],{"id":856},"deploying-flow","Deploying Flow",[14,859,860],{},[77,861],{"alt":862,"src":863,"title":864},"\"Deploying Inventory management system's flow\"","\u002Fdocs\u002Fnode-red\u002Fdatabase\u002Fimages\u002Fpostgresql_with_nodred_environment_variable_ff_editor.png","Deploying Inventory management system's flow",[14,866,867,868,100],{},"Our Inventory Management System is now complete and ready for deployment. To initiate the deployment process, locate the red 'Deploy' button positioned in the top right corner. To create, drop tables, and retrieve table data, click on the 'Inject Node' button. For product data insertion, updates, and deletions, navigate to ",[33,869,870],{},"https:\u002F\u002F\u003Cyour-instance-name>.flowfuse.cloud\u002Fdashboard",[14,872,873],{},[77,874],{"alt":875,"src":876,"title":877},"\"Inventory management system\"","\u002Fdocs\u002Fnode-red\u002Fdatabase\u002Fimages\u002Fpostgresql_with_node-red_Inventory_management_system.png","Inventory management system",[879,880,882],"h3",{"id":881},"best-practices-to-follow","Best practices to follow",[26,884,885,888,898],{},[29,886,887],{},"Connection Pooling: Implementing connection pooling can significantly enhance the performance of PostgreSQL. It allows multiple clients to reuse database connections, reducing the overhead of establishing new connections for each query. By configuring PostgreSQL to use connection pooling, you can optimize resource usage and improve overall system performance. In this guide, we have configured our PostgreSQL to use connection pooling via the Postgres Config node\u002Ftab.",[29,889,890,891,897],{},"Environment Variables: The ",[38,892,896],{"href":893,"rel":894},"https:\u002F\u002F12factor.net\u002F",[895],"nofollow","Twelve Factors"," emphasize the importance of separating configuration details from the code (flow) to ensure better security. Storing database credentials within the codebase can pose a security risk. Instead, expose the configuration details, as environment variables. This ensures that sensitive information remains secure and can be managed separately from the codebase.",[29,899,900],{},"Credential Rotation: Regularly rotating database credentials is essential for maintaining robust security practices. This includes changing login information for managed databases and other database access points. Implementing a scheduled credential rotation process, such as quarterly 'rotation days,' streamlines the task and reduces the risk of unauthorized access.",[902,903,904],"style",{},"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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}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}",{"title":147,"searchDepth":171,"depth":171,"links":906},[907,908,909,910,911,912,913,914,915,916],{"id":20,"depth":160,"text":21},{"id":91,"depth":160,"text":92},{"id":128,"depth":160,"text":129},{"id":247,"depth":160,"text":248},{"id":259,"depth":160,"text":260},{"id":445,"depth":160,"text":446},{"id":488,"depth":160,"text":489},{"id":674,"depth":160,"text":675},{"id":811,"depth":160,"text":812},{"id":856,"depth":160,"text":857,"children":917},[918],{"id":881,"depth":70,"text":882},"https:\u002F\u002Fgithub.com\u002FFlowFuse\u002Fwebsite\u002Fedit\u002Fmain\u002Fnuxt\u002Fcontent-guides\u002Fnode-red\u002Fdatabase\u002Fpostgresql.md","md",null,{"image":923},"\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fimages\u002Fpostgresql_with_node-red.png",50,"PostgreSQL","\u002Fdocs\u002Fnode-red\u002Fdatabase\u002Fpostgresql",{"title":5,"description":16},"docs\u002Fnode-red\u002Fdatabase\u002Fpostgresql","2026-09-08 11:02:51 +0200","FLUxneyX5C9oRX2N8WxQ36d-mPuySZYgEZH6Ciz2U3Q",{"id":932,"extension":933,"meta":934,"sections":935,"stem":1334,"__hash__":1335},"featureCatalog\u002Ffeature-catalog.yml","yml",{},[936,997,1098,1160,1237,1316],{"id":937,"title":938,"features":939},"ai-automation","AI & Automation",[940,950,960,970,976,986,992],{"id":941,"title":942,"description":943,"docsLink":944,"changelog":945,"tiers":949},"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",[946],{"url":947,"release":948},"\u002Fchangelog\u002F2026\u002F02\u002Fff-expert-update-banner\u002F","2.28",{"edge":606,"hub":606,"fleet":606},{"id":951,"title":952,"description":953,"docsLink":954,"changelog":955,"subfeature":606,"showOnPricing":958,"tiers":959},"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",[956],{"url":957,"release":948},"\u002Fchangelog\u002F2026\u002F02\u002Fff-expert-debug-log-context\u002F",false,{"edge":606,"hub":606,"fleet":606},{"id":961,"title":962,"description":963,"docsLink":964,"changelog":965,"subfeature":606,"showOnPricing":958,"tiers":969},"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",[966],{"url":967,"release":968},"\u002Fchangelog\u002F2026\u002F05\u002Fexpert-application-building\u002F","2.30",{"edge":606,"hub":606,"fleet":606},{"id":971,"title":972,"description":973,"docsLink":974,"subfeature":606,"beta":606,"showOnPricing":958,"tiers":975},"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":606,"hub":606,"fleet":606},{"id":977,"title":978,"description":979,"docsLink":980,"changelog":981,"tiers":985},"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",[982],{"url":983,"release":984},"\u002Fchangelog\u002F2026\u002F08\u002Fconnect-your-own-ai-agent\u002F","3.0",{"edge":606,"hub":606,"fleet":606},{"id":987,"title":988,"description":989,"docsLink":990,"tiers":991},"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":606,"hub":606,"fleet":606},{"id":993,"title":994,"description":995,"tiers":996},"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":606,"hub":606,"fleet":606},{"id":998,"title":999,"features":1000},"build","Build",[1001,1007,1013,1023,1029,1035,1039,1045,1051,1059,1065,1069,1073,1082,1090],{"id":1002,"title":1003,"description":1004,"docsLink":1005,"tiers":1006},"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":606,"hub":958,"fleet":606},{"id":1008,"title":1009,"description":1010,"docsLink":1011,"tiers":1012},"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":606,"hub":606,"fleet":606},{"id":1014,"title":1015,"description":1016,"docsLink":1017,"changelog":1018,"tiers":1022},"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",[1019],{"url":1020,"release":1021},"\u002Fchangelog\u002F2026\u002F07\u002Fexpert-tables-automation\u002F","2.33",{"edge":606,"hub":606,"fleet":606},{"id":1024,"title":1025,"description":1026,"docsLink":1027,"tiers":1028},"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":606,"hub":606,"fleet":606},{"id":1030,"title":1031,"description":1032,"docsLink":1033,"showOnPricing":958,"tiers":1034},"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":606,"hub":606,"fleet":606},{"id":1036,"title":1037,"showOnPricing":958,"tiers":1038},"static-assets","Static Assets",{"edge":606,"hub":606,"fleet":606},{"id":1040,"title":1041,"description":1042,"docsLink":1043,"tiers":1044},"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":606,"hub":606,"fleet":606},{"id":1046,"title":1047,"description":1048,"docsLink":1049,"tiers":1050},"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":606,"hub":606,"fleet":606},{"id":1052,"title":1053,"description":1054,"changelog":1055,"subfeature":606,"showOnPricing":958,"tiers":1058},"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.",[1056],{"url":1057,"release":1021},"\u002Fchangelog\u002F2026\u002F07\u002Fteam-and-application-dashboards\u002F",{"edge":606,"hub":606,"fleet":606},{"id":1060,"title":1061,"description":1062,"docsLink":1063,"tiers":1064},"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":606,"hub":606,"fleet":606},{"id":1066,"title":1067,"subfeature":606,"showOnPricing":958,"tiers":1068},"blueprints-ot-apps","Blueprints - OT APPS",{"edge":606,"hub":958,"fleet":606},{"id":1070,"title":1071,"subfeature":606,"showOnPricing":958,"tiers":1072},"blueprints-it-apps","Blueprints - IT APPS",{"edge":958,"hub":606,"fleet":958},{"id":1074,"title":1075,"description":1076,"changelog":1077,"showOnPricing":958,"tiers":1081},"immersive-editor-snapshots","Snapshot Details in Immersive Editor","View and manage snapshot details directly inside the immersive editor without leaving your editing session.",[1078],{"url":1079,"release":1080},"\u002Fchangelog\u002F2026\u002F03\u002Fsnapshot-detail-modal-immersive-editor\u002F","2.29",{"edge":606,"hub":606,"fleet":606},{"id":1083,"title":1084,"description":1085,"changelog":1086,"showOnPricing":958,"tiers":1089},"immersive-editor-drawer","Customisable Immersive Editor Drawer","Pin, move, resize, or full-screen the immersive editor drawer. Your preferences are remembered between sessions.",[1087],{"url":1088,"release":968},"\u002Fchangelog\u002F2026\u002F04\u002Fimmersive-editor-drawer\u002F",{"edge":606,"hub":606,"fleet":606},{"id":1091,"title":1092,"description":1093,"changelog":1094,"showOnPricing":958,"tiers":1097},"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.",[1095],{"url":1096,"release":1080},"\u002Fchangelog\u002F2026\u002F03\u002Fembedded-editor-tab-title\u002F",{"edge":606,"hub":606,"fleet":606},{"id":1099,"title":1100,"features":1101},"deploy","Deploy",[1102,1108,1117,1123,1129,1135,1141,1147,1152],{"id":1103,"title":1104,"description":1105,"docsLink":1106,"tiers":1107},"hosted-instances","Cloud Instances","Run Node-RED instances managed and hosted by FlowFuse.","\u002Fdocs\u002Fuser\u002Fintroduction\u002F#creating-a-node-red-instance",{"edge":606,"hub":606,"fleet":606},{"id":1109,"title":1110,"description":1111,"docsLink":1112,"changelog":1113,"tiers":1116},"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",[1114],{"url":1115,"release":948},"\u002Fchangelog\u002F2026\u002F02\u002Fdevice-agent-nodejs-options\u002F",{"edge":606,"hub":958,"fleet":606},{"id":1118,"title":1119,"description":1120,"docsLink":1121,"tiers":1122},"custom-hostnames","Custom Hostnames","Access your Node-RED application via your own domain name.","\u002Fdocs\u002Fuser\u002Fcustom-hostnames\u002F",{"edge":958,"hub":606,"fleet":958},{"id":1124,"title":1125,"description":1126,"docsLink":1127,"tiers":1128},"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":606,"hub":958,"fleet":606},{"id":1130,"title":1131,"description":1132,"docsLink":1133,"showOnPricing":958,"tiers":1134},"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":606,"hub":606,"fleet":606},{"id":1136,"title":1137,"description":1138,"docsLink":1139,"tiers":1140},"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":606,"hub":606,"fleet":606},{"id":1142,"title":1143,"description":1144,"docsLink":1145,"tiers":1146},"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":958,"hub":606,"fleet":958},{"id":1148,"title":1149,"description":1150,"docsLink":1145,"subfeature":606,"showOnPricing":958,"tiers":1151},"git-integration-github","GitHub","Push and pull snapshots to GitHub repositories through DevOps Pipeline Git Stages.",{"edge":958,"hub":606,"fleet":958},{"id":1153,"title":1154,"description":1155,"docsLink":1145,"changelog":1156,"subfeature":606,"showOnPricing":958,"tiers":1159},"git-integration-azure","Azure DevOps","Push and pull snapshots to Azure DevOps repositories through DevOps Pipeline Git Stages.",[1157],{"url":1158,"release":1080},"\u002Fchangelog\u002F2026\u002F03\u002Fazure-dev-ops-gitops\u002F",{"edge":958,"hub":606,"fleet":958},{"id":1161,"title":1162,"features":1163},"operate-maintain","Operate & Maintain",[1164,1170,1176,1181,1189,1193,1197,1202,1208,1214,1219,1225,1229,1233],{"id":1165,"title":1166,"description":1167,"docsLink":1168,"tiers":1169},"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":606,"hub":606,"fleet":606},{"id":1171,"title":1172,"description":1173,"docsLink":1174,"subfeature":606,"showOnPricing":958,"tiers":1175},"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":606,"hub":606,"fleet":606},{"id":1177,"title":1178,"description":1179,"docsLink":1174,"subfeature":606,"showOnPricing":958,"tiers":1180},"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":606,"hub":606,"fleet":606},{"id":1182,"title":1183,"description":1184,"changelog":1185,"subfeature":606,"showOnPricing":958,"tiers":1188},"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.",[1186],{"url":1187,"release":1080},"\u002Fchangelog\u002F2026\u002F04\u002Fsnapshot-diff-viewer\u002F",{"edge":606,"hub":606,"fleet":606},{"id":1190,"title":1191,"subfeature":606,"showOnPricing":958,"tiers":1192},"version-history-timeline","Version History Timeline",{"edge":606,"hub":606,"fleet":606},{"id":1194,"title":1195,"tiers":1196},"unlimited-workflow-executions","Unlimited Workflow Executions",{"edge":606,"hub":606,"fleet":606},{"id":1198,"title":1199,"description":1200,"tiers":1201},"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":606,"hub":958,"fleet":606},{"id":1203,"title":1204,"description":1205,"docsLink":1206,"tiers":1207},"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":606,"hub":958,"fleet":606},{"id":1209,"title":1210,"description":1211,"docsLink":1212,"tiers":1213},"high-availability","High Availability","Leverage horizontal scaling for reliable and scalable processing of your data through Node-RED.","\u002Fdocs\u002Fuser\u002Fhigh-availability\u002F",{"edge":958,"hub":606,"fleet":958},{"id":1215,"title":1216,"description":1217,"tiers":1218},"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":606,"hub":606,"fleet":606},{"id":1220,"title":1221,"description":1222,"docsLink":1223,"subfeature":606,"showOnPricing":958,"tiers":1224},"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":606,"hub":606,"fleet":606},{"id":1226,"title":1227,"subfeature":606,"showOnPricing":958,"tiers":1228},"email-alerts","Email Alerts",{"edge":606,"hub":606,"fleet":606},{"id":1230,"title":1231,"showOnPricing":958,"tiers":1232},"api-debug-length-limit","API\u002FDebug Length Limit",{"edge":606,"hub":606,"fleet":606},{"id":1234,"title":1235,"tiers":1236},"protected-instances","Protected Instances",{"edge":958,"hub":606,"fleet":958},{"id":1238,"title":1239,"features":1240},"govern-secure","Govern and Secure",[1241,1250,1256,1262,1267,1273,1279,1285,1293,1299,1305,1311],{"id":1242,"title":1243,"description":1244,"docsLink":1245,"changelog":1246,"tiers":1249},"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",[1247],{"url":1248,"release":1021},"\u002Fchangelog\u002F2026\u002F07\u002Fapplication-sso-groups\u002F",{"edge":606,"hub":606,"fleet":606},{"id":1251,"title":1252,"description":1253,"docsLink":1254,"tiers":1255},"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":606,"hub":606,"fleet":606},{"id":1257,"title":1258,"description":1259,"docsLink":1260,"tiers":1261},"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":958,"hub":606,"fleet":606},{"id":1263,"title":1264,"description":1265,"tiers":1266},"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":606,"hub":958,"fleet":958},{"id":1268,"title":1269,"description":1270,"docsLink":1271,"tiers":1272},"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":606,"hub":606,"fleet":606},{"id":1274,"title":1275,"description":1276,"docsLink":1277,"tiers":1278},"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":606,"hub":606,"fleet":606},{"id":1280,"title":1281,"description":1282,"docsLink":1283,"subfeature":606,"showOnPricing":958,"tiers":1284},"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":606,"hub":606,"fleet":606},{"id":1286,"title":1287,"description":1288,"changelog":1289,"subfeature":606,"showOnPricing":958,"tiers":1292},"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.",[1290],{"url":1291,"release":1021},"\u002Fchangelog\u002F2026\u002F07\u002Fscoped-pats\u002F",{"edge":606,"hub":606,"fleet":606},{"id":1294,"title":1295,"description":1296,"docsLink":1297,"showOnPricing":958,"tiers":1298},"team-members","Team Members","Invite multiple team members to collaborate on the same Node-RED flows.","\u002Fdocs\u002Fuser\u002Fteam\u002F#teams",{"edge":606,"hub":606,"fleet":606},{"id":1300,"title":1301,"description":1302,"docsLink":1303,"showOnPricing":958,"tiers":1304},"endpoint-security","Endpoint Security","Secure HTTP endpoints for hosted Node-RED instances using FlowFuse credentials.","\u002Fdocs\u002Fuser\u002Finstance-settings\u002F#security",{"edge":606,"hub":606,"fleet":606},{"id":1306,"title":1307,"description":1308,"docsLink":1309,"tiers":1310},"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":958,"hub":606,"fleet":958},{"id":1312,"title":1313,"description":1314,"tiers":1315},"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":958,"hub":606,"fleet":958},{"id":1317,"title":1318,"features":1319},"support","Support",[1320,1325,1329],{"id":1321,"title":1322,"docsLink":1323,"tiers":1324},"installation-support","Installation Support","\u002Fdocs\u002Finstall\u002Fintroduction\u002F#do-you-need-help-installation-service",{"edge":606,"hub":606,"fleet":606},{"id":1326,"title":1327,"showOnPricing":958,"tiers":1328},"live-chat-support","Live Chat Support",{"edge":606,"hub":606,"fleet":606},{"id":1330,"title":1331,"docsLink":1332,"tiers":1333},"enterprise-support","Enterprise Support","\u002Fdocs\u002Fpremium-support\u002F",{"edge":606,"hub":606,"fleet":606},"feature-catalog","v5NjPsqOkQexQ0Fk82nqY6ZEXj128lclDvrIkmsKbpM",[1337,1423,1659,1729,1742,1882,1892,1973],{"name":1338,"order":1339,"children":1340},"Application Guide",0,[1341,1389],{"title":1342,"path":1343,"group":1338,"groupOrder":1339,"order":154,"children":1344},"Building FlowFuse applications","\u002Fdocs\u002Fapplication-guide",[1345,1349,1361,1365,1381],{"title":1346,"path":1347,"order":154,"children":1348},"Foundations","\u002Fdocs\u002Fapplication-guide\u002Ffoundations",[],{"title":1350,"path":1351,"order":160,"children":1352},"App delivery methods","\u002Fdocs\u002Fapplication-guide\u002Fapp-delivery-methods",[1353,1357],{"title":1354,"path":1355,"order":154,"children":1356},"Hardware apps","\u002Fdocs\u002Fapplication-guide\u002Fapp-delivery-methods\u002Fhardware-apps",[],{"title":1358,"path":1359,"order":160,"children":1360},"Software apps","\u002Fdocs\u002Fapplication-guide\u002Fapp-delivery-methods\u002Fsoftware-apps",[],{"title":1362,"path":1363,"order":70,"children":1364},"Data plane","\u002Fdocs\u002Fapplication-guide\u002Fdata-plane",[],{"title":1366,"path":1367,"order":171,"children":1368},"Architectures","\u002Fdocs\u002Fapplication-guide\u002Farchitectures",[1369,1373,1377],{"title":1370,"path":1371,"order":154,"children":1372},"IT architectures","\u002Fdocs\u002Fapplication-guide\u002Farchitectures\u002Fit",[],{"title":1374,"path":1375,"order":160,"children":1376},"OT architectures","\u002Fdocs\u002Fapplication-guide\u002Farchitectures\u002Fot",[],{"title":1378,"path":1379,"order":70,"children":1380},"IIoT architectures","\u002Fdocs\u002Fapplication-guide\u002Farchitectures\u002Fiiot",[],{"title":1382,"path":1383,"order":177,"children":1384},"Worked examples","\u002Fdocs\u002Fapplication-guide\u002Fworked-examples",[1385],{"title":1386,"path":1387,"order":154,"children":1388},"OEE, end to end","\u002Fdocs\u002Fapplication-guide\u002Fworked-examples\u002Foee",[],{"title":1390,"path":1391,"group":1338,"groupOrder":1339,"order":160,"children":1392},"Designing Node-RED flows","\u002Fdocs\u002Fnode-red-guide",[1393,1396,1412],{"title":1346,"path":1394,"order":154,"children":1395},"\u002Fdocs\u002Fnode-red-guide\u002Ffoundations",[],{"title":1397,"path":1398,"order":160,"children":1399},"Patterns","\u002Fdocs\u002Fnode-red-guide\u002Fpatterns",[1400,1404,1408],{"title":1401,"path":1402,"order":154,"children":1403},"Design patterns","\u002Fdocs\u002Fnode-red-guide\u002Fpatterns\u002Fdesign-patterns",[],{"title":1405,"path":1406,"order":160,"children":1407},"Handling data","\u002Fdocs\u002Fnode-red-guide\u002Fpatterns\u002Fhandling-data",[],{"title":1409,"path":1410,"order":70,"children":1411},"Good form","\u002Fdocs\u002Fnode-red-guide\u002Fpatterns\u002Fgood-form",[],{"title":1382,"path":1413,"order":70,"children":1414},"\u002Fdocs\u002Fnode-red-guide\u002Fworked-examples",[1415,1419],{"title":1416,"path":1417,"order":154,"children":1418},"OEE - Edge Aggregator","\u002Fdocs\u002Fnode-red-guide\u002Fworked-examples\u002Foee-edge-aggregator",[],{"title":1420,"path":1421,"order":160,"children":1422},"OEE - Central Dashboard","\u002Fdocs\u002Fnode-red-guide\u002Fworked-examples\u002Foee-central-dashboard",[],{"name":1424,"order":154,"children":1425},"FlowFuse User Manuals",[1426,1549,1553,1565],{"title":1427,"path":1428,"group":1424,"groupOrder":154,"order":154,"children":1429,"link":958},"Using FlowFuse","\u002Fdocs\u002Fuser",[1430,1433,1437,1441,1445,1449,1453,1456,1460,1464,1467,1471,1487,1491,1495,1499,1503,1506,1510,1514,1518,1522,1526,1529,1533,1537,1541,1545],{"title":21,"path":1431,"order":154,"children":1432},"\u002Fdocs\u002Fuser\u002Fintroduction",[],{"title":1434,"path":1435,"order":154,"children":1436},"Static asset service","\u002Fdocs\u002Fuser\u002Fstatic-asset-service",[],{"title":1438,"path":1439,"order":160,"children":1440},"Bill of Materials","\u002Fdocs\u002Fuser\u002Fbill-of-materials",[],{"title":1442,"path":1443,"order":160,"children":1444},"FlowFuse Concepts","\u002Fdocs\u002Fuser\u002Fconcepts",[],{"title":1446,"path":1447,"order":206,"children":1448},"Instance States","\u002Fdocs\u002Fuser\u002Finstance-states",[],{"title":1450,"path":1451,"order":921,"children":1452},"Changing the Stack","\u002Fdocs\u002Fuser\u002Fchangestack",[],{"title":1119,"path":1454,"order":921,"children":1455},"\u002Fdocs\u002Fuser\u002Fcustom-hostnames",[],{"title":1457,"path":1458,"order":921,"children":1459},"Custom Node Packages","\u002Fdocs\u002Fuser\u002Fcustom-npm-packages",[],{"title":1461,"path":1462,"order":921,"children":1463},"Dashboards","\u002Fdocs\u002Fuser\u002Fdashboards",[],{"title":1137,"path":1465,"order":921,"children":1466},"\u002Fdocs\u002Fuser\u002Fdevops-pipelines",[],{"title":1468,"path":1469,"order":921,"children":1470},"Environment Variables","\u002Fdocs\u002Fuser\u002Fenvvar",[],{"title":1472,"path":1473,"order":921,"children":1474},"FlowFuse Expert","\u002Fdocs\u002Fuser\u002Fexpert",[1475,1479,1483],{"title":1476,"path":1477,"order":921,"children":1478},"AI in Node-RED","\u002Fdocs\u002Fuser\u002Fexpert\u002Fnode-red-embedded-ai",[],{"title":1480,"path":1481,"order":921,"children":1482},"Chat Interface","\u002Fdocs\u002Fuser\u002Fexpert\u002Fchat",[],{"title":1484,"path":1485,"order":921,"children":1486},"Connect Your Own Agent","\u002Fdocs\u002Fuser\u002Fexpert\u002Fthird-party-agents",[],{"title":1488,"path":1489,"order":921,"children":1490},"FlowFuse File Nodes","\u002Fdocs\u002Fuser\u002Ffilenodes",[],{"title":1492,"path":1493,"order":921,"children":1494},"FlowFuse MQTT Nodes","\u002Fdocs\u002Fuser\u002Fmqtt-nodes",[],{"title":1496,"path":1497,"order":921,"children":1498},"FlowFuse Persistent Context","\u002Fdocs\u002Fuser\u002Fpersistent-context",[],{"title":1500,"path":1501,"order":921,"children":1502},"FlowFuse Project Nodes","\u002Fdocs\u002Fuser\u002Fprojectnodes",[],{"title":1015,"path":1504,"order":921,"children":1505},"\u002Fdocs\u002Fuser\u002Fff-tables",[],{"title":1507,"path":1508,"order":921,"children":1509},"Groups","\u002Fdocs\u002Fuser\u002Fdevice-groups",[],{"title":1511,"path":1512,"order":921,"children":1513},"High Availability mode","\u002Fdocs\u002Fuser\u002Fhigh-availability",[],{"title":1515,"path":1516,"order":921,"children":1517},"HTTP Access Tokens","\u002Fdocs\u002Fuser\u002Fhttp-access-tokens",[],{"title":1519,"path":1520,"order":921,"children":1521},"Instance Settings","\u002Fdocs\u002Fuser\u002Finstance-settings",[],{"title":1523,"path":1524,"order":921,"children":1525},"Logging","\u002Fdocs\u002Fuser\u002Flogs",[],{"title":1275,"path":1527,"order":921,"children":1528},"\u002Fdocs\u002Fuser\u002Frole-based-access-control",[],{"title":1530,"path":1531,"order":921,"children":1532},"Shared Team Library","\u002Fdocs\u002Fuser\u002Fshared-library",[],{"title":1534,"path":1535,"order":921,"children":1536},"Snapshots","\u002Fdocs\u002Fuser\u002Fsnapshots",[],{"title":1538,"path":1539,"order":921,"children":1540},"Team Broker","\u002Fdocs\u002Fuser\u002Fteambroker",[],{"title":1542,"path":1543,"order":921,"children":1544},"Teams","\u002Fdocs\u002Fuser\u002Fteam",[],{"title":1546,"path":1547,"order":921,"children":1548},"User Settings","\u002Fdocs\u002Fuser\u002Fuser-settings",[],{"title":1550,"path":1551,"group":1424,"groupOrder":154,"order":160,"children":1552},"FlowFuse API","\u002Fdocs\u002Fapi",[],{"title":1554,"path":1555,"group":1424,"groupOrder":154,"order":70,"children":1556,"link":958},"Migrating a Node-RED project to FlowFuse","\u002Fdocs\u002Fmigration",[1557,1561],{"title":1558,"path":1559,"order":154,"children":1560},"Introduction","\u002Fdocs\u002Fmigration\u002Fintroduction",[],{"title":1562,"path":1563,"order":921,"children":1564},"Node-RED Tools plugin","\u002Fdocs\u002Fmigration\u002Fnode-red-tools",[],{"title":1566,"path":1567,"group":1424,"groupOrder":154,"order":171,"children":1568},"FlowFuse Node-RED nodes","\u002Fdocs\u002Fflowfuse-nodes",[1569,1593,1613,1620,1640,1651],{"title":1570,"path":1571,"order":154,"children":1572},"AI","\u002Fdocs\u002Fflowfuse-nodes\u002Fai",[1573,1577,1581,1585,1589],{"title":1574,"path":1575,"order":177,"children":1576},"LLM Nodes","\u002Fdocs\u002Fflowfuse-nodes\u002Fai\u002Fllm-nodes",[],{"title":1578,"path":1579,"order":924,"children":1580},"Depth Estimation","\u002Fdocs\u002Fflowfuse-nodes\u002Fai\u002Fdepth-estimation",[],{"title":1582,"path":1583,"order":924,"children":1584},"Image Classification","\u002Fdocs\u002Fflowfuse-nodes\u002Fai\u002Fimage-classification",[],{"title":1586,"path":1587,"order":924,"children":1588},"Object Detection","\u002Fdocs\u002Fflowfuse-nodes\u002Fai\u002Fobject-detection",[],{"title":1590,"path":1591,"order":924,"children":1592},"ONXX","\u002Fdocs\u002Fflowfuse-nodes\u002Fai\u002Fonxx",[],{"title":1594,"path":1595,"order":160,"children":1596},"MCP","\u002Fdocs\u002Fflowfuse-nodes\u002Fmcp",[1597,1601,1605,1609],{"title":1598,"path":1599,"order":924,"children":1600},"MCP Prompt","\u002Fdocs\u002Fflowfuse-nodes\u002Fmcp\u002Fmcp-prompt",[],{"title":1602,"path":1603,"order":924,"children":1604},"MCP Resource","\u002Fdocs\u002Fflowfuse-nodes\u002Fmcp\u002Fmcp-resource",[],{"title":1606,"path":1607,"order":924,"children":1608},"MCP Responses","\u002Fdocs\u002Fflowfuse-nodes\u002Fmcp\u002Fmcp-response",[],{"title":1610,"path":1611,"order":924,"children":1612},"MCP Tool","\u002Fdocs\u002Fflowfuse-nodes\u002Fmcp\u002Fmcp-tool",[],{"title":1015,"path":1614,"order":70,"children":1615},"\u002Fdocs\u002Fflowfuse-nodes\u002Fflowfuse-tables",[1616],{"title":1617,"path":1618,"order":924,"children":1619},"Query","\u002Fdocs\u002Fflowfuse-nodes\u002Fflowfuse-tables\u002Fquery",[],{"title":1621,"path":1622,"order":171,"children":1623},"Edge","\u002Fdocs\u002Fflowfuse-nodes\u002Fedge",[1624,1628,1632,1636],{"title":1625,"path":1626,"order":154,"children":1627},"RTSP Video Feed","\u002Fdocs\u002Fflowfuse-nodes\u002Fedge\u002Frtsp",[],{"title":1629,"path":1630,"order":160,"children":1631},"CIP Suite, EtherNet\u002FIP Nodes","\u002Fdocs\u002Fflowfuse-nodes\u002Fedge\u002Fcip-suite",[],{"title":1633,"path":1634,"order":70,"children":1635},"Modbus","\u002Fdocs\u002Fflowfuse-nodes\u002Fedge\u002Fmodbus",[],{"title":1637,"path":1638,"order":924,"children":1639},"OPC UA","\u002Fdocs\u002Fflowfuse-nodes\u002Fedge\u002Fopcua",[],{"title":1492,"path":1641,"order":177,"children":1642},"\u002Fdocs\u002Fflowfuse-nodes\u002Fmqtt",[1643,1647],{"title":1644,"path":1645,"order":924,"children":1646},"MQTT In","\u002Fdocs\u002Fflowfuse-nodes\u002Fmqtt\u002Fmqtt-in",[],{"title":1648,"path":1649,"order":924,"children":1650},"MQTT Out","\u002Fdocs\u002Fflowfuse-nodes\u002Fmqtt\u002Fmqtt-out",[],{"title":1652,"path":1653,"order":177,"children":1654},"Hub","\u002Fdocs\u002Fflowfuse-nodes\u002Fhub",[1655],{"title":1656,"path":1657,"order":154,"children":1658},"Redis","\u002Fdocs\u002Fflowfuse-nodes\u002Fhub\u002Fredis",[],{"name":1660,"order":160,"children":1661},"Device Agent",[1662,1710],{"title":1660,"path":1663,"group":1660,"groupOrder":160,"order":154,"children":1664,"link":958},"\u002Fdocs\u002Fdevice-agent",[1665,1669,1673,1698,1702,1706],{"title":1666,"path":1667,"order":154,"children":1668},"FlowFuse Device Agent Introduction","\u002Fdocs\u002Fdevice-agent\u002Fintroduction",[],{"title":1670,"path":1671,"order":160,"children":1672},"Quick Start","\u002Fdocs\u002Fdevice-agent\u002Fquickstart",[],{"title":1674,"path":1675,"group":1676,"order":70,"children":1677,"link":958},"Installation","\u002Fdocs\u002Fdevice-agent\u002Finstall","DeviceAgentInstallation",[1678,1682,1686,1690,1694],{"title":1679,"path":1680,"group":1676,"order":154,"children":1681},"Overview","\u002Fdocs\u002Fdevice-agent\u002Finstall\u002Foverview",[],{"title":1683,"path":1684,"group":1676,"order":160,"children":1685},"Device Agent Installer","\u002Fdocs\u002Fdevice-agent\u002Finstall\u002Fdevice-agent-installer",[],{"title":1687,"path":1688,"group":1676,"order":70,"children":1689},"Docker Install","\u002Fdocs\u002Fdevice-agent\u002Finstall\u002Fdocker",[],{"title":1691,"path":1692,"group":1676,"order":171,"children":1693},"Kubernetes Install","\u002Fdocs\u002Fdevice-agent\u002Finstall\u002Fkubernetes",[],{"title":1695,"path":1696,"group":1676,"order":177,"children":1697},"Manual Install with NPM","\u002Fdocs\u002Fdevice-agent\u002Finstall\u002Fmanual",[],{"title":1699,"path":1700,"order":171,"children":1701},"Register your Remote Instance","\u002Fdocs\u002Fdevice-agent\u002Fregister",[],{"title":1703,"path":1704,"order":177,"children":1705},"Running the Agent","\u002Fdocs\u002Fdevice-agent\u002Frunning",[],{"title":1707,"path":1708,"order":183,"children":1709},"Deploying your Flows","\u002Fdocs\u002Fdevice-agent\u002Fdeploy",[],{"title":1711,"path":1712,"group":1660,"groupOrder":160,"order":160,"children":1713,"link":958},"Hardware Guides","\u002Fdocs\u002Fhardware",[1714,1717,1721,1725],{"title":1679,"path":1715,"order":154,"children":1716},"\u002Fdocs\u002Fhardware\u002Fintroduction",[],{"title":1718,"path":1719,"order":160,"children":1720},"ctrlX - Node-RED","\u002Fdocs\u002Fhardware\u002Fctrlx-node-red",[],{"title":1722,"path":1723,"order":70,"children":1724},"ctrlX - Device Agent","\u002Fdocs\u002Fhardware\u002Fctrlx-device-agent",[],{"title":1726,"path":1727,"order":70,"children":1728},"Raspberry Pi with Raspbian","\u002Fdocs\u002Fhardware\u002Fraspbian",[],{"name":1730,"order":70,"children":1731},"FlowFuse Cloud",[1732],{"title":1730,"path":1733,"group":1730,"groupOrder":70,"order":70,"children":1734,"link":958},"\u002Fdocs\u002Fcloud",[1735,1738],{"title":1558,"path":1736,"order":154,"children":1737},"\u002Fdocs\u002Fcloud\u002Fintroduction",[],{"title":1739,"path":1740,"order":921,"children":1741},"FlowFuse Cloud Billing","\u002Fdocs\u002Fcloud\u002Fbilling",[],{"name":1743,"order":171,"children":1744},"FlowFuse Self-Hosted",[1745,1748,1823,1835],{"title":1670,"path":1746,"group":1743,"groupOrder":171,"order":154,"children":1747},"\u002Fdocs\u002Fquick-start",[],{"title":1749,"path":1750,"group":1743,"groupOrder":171,"order":160,"children":1751,"link":958},"Installing FlowFuse","\u002Fdocs\u002Finstall",[1752,1755,1759,1763,1783,1787,1791,1795],{"title":1679,"path":1753,"order":154,"children":1754},"\u002Fdocs\u002Finstall\u002Fintroduction",[],{"title":1756,"path":1757,"order":921,"children":1758},"Configuring FlowFuse","\u002Fdocs\u002Finstall\u002Fconfiguration",[],{"title":1760,"path":1761,"order":921,"children":1762},"DNS Setup","\u002Fdocs\u002Finstall\u002Fdns-setup",[],{"title":1764,"path":1765,"order":921,"children":1766},"Docker install","\u002Fdocs\u002Finstall\u002Fdocker",[1767,1771,1775,1779],{"title":1768,"path":1769,"order":921,"children":1770},"Add Project Stacks on Docker","\u002Fdocs\u002Finstall\u002Fdocker\u002Fstacks",[],{"title":1772,"path":1773,"order":921,"children":1774},"Docker Engine on Windows","\u002Fdocs\u002Finstall\u002Fdocker\u002Fwindows-docker-ce",[],{"title":1776,"path":1777,"order":921,"children":1778},"Docker from AWS Market Place","\u002Fdocs\u002Finstall\u002Fdocker\u002Faws-marketplace",[],{"title":1780,"path":1781,"order":921,"children":1782},"Docker on Digital Ocean","\u002Fdocs\u002Finstall\u002Fdocker\u002Fdigital-ocean",[],{"title":1784,"path":1785,"order":921,"children":1786},"Email configuration","\u002Fdocs\u002Finstall\u002Femail-providers",[],{"title":1788,"path":1789,"order":921,"children":1790},"First Run Setup","\u002Fdocs\u002Finstall\u002Ffirst-run",[],{"title":1792,"path":1793,"order":921,"children":1794},"FlowFuse File Storage","\u002Fdocs\u002Finstall\u002Ffile-storage",[],{"title":1796,"path":1797,"order":921,"children":1798},"Install FlowFuse on Kubernetes","\u002Fdocs\u002Finstall\u002Fkubernetes",[1799,1803,1807,1811,1815,1819],{"title":1800,"path":1801,"order":921,"children":1802},"AWS EKS Installation","\u002Fdocs\u002Finstall\u002Fkubernetes\u002Faws",[],{"title":1804,"path":1805,"order":921,"children":1806},"AWS EKS Installation with Terraform and Helm","\u002Fdocs\u002Finstall\u002Fkubernetes\u002Faws-terraform",[],{"title":1808,"path":1809,"order":921,"children":1810},"Digital Ocean Kubernetes Installation","\u002Fdocs\u002Finstall\u002Fkubernetes\u002Fdigital-ocean",[],{"title":1812,"path":1813,"order":921,"children":1814},"Ingress Controller Migration","\u002Fdocs\u002Finstall\u002Fkubernetes\u002Fingress-controller-migration",[],{"title":1816,"path":1817,"order":921,"children":1818},"Kubernetes Project Stacks","\u002Fdocs\u002Finstall\u002Fkubernetes\u002Fstacks",[],{"title":1820,"path":1821,"order":921,"children":1822},"OpenShift Installation","\u002Fdocs\u002Finstall\u002Fkubernetes\u002Fopenshift",[],{"title":1824,"path":1825,"group":1743,"groupOrder":171,"order":70,"children":1826},"Upgrading FlowFuse","\u002Fdocs\u002Fupgrade",[1827,1831],{"title":1828,"path":1829,"order":921,"children":1830},"Installing a license","\u002Fdocs\u002Fupgrade\u002Fopen-source-to-premium",[],{"title":1832,"path":1833,"order":921,"children":1834},"Upgrading the Node-RED version","\u002Fdocs\u002Fupgrade\u002Fnodered-version",[],{"title":1836,"path":1837,"group":1743,"groupOrder":171,"order":171,"children":1838,"link":958},"Administering FlowFuse","\u002Fdocs\u002Fadmin",[1839,1842,1854,1862,1866,1870,1874,1878],{"title":1836,"path":1840,"order":154,"children":1841},"\u002Fdocs\u002Fadmin\u002Fintroduction",[],{"title":1843,"path":1844,"order":921,"children":1845},"Configuring Single Sign-On (SSO)","\u002Fdocs\u002Fadmin\u002Fsso",[1846,1850],{"title":1847,"path":1848,"order":921,"children":1849},"LDAP SSO","\u002Fdocs\u002Fadmin\u002Fsso\u002Fldap",[],{"title":1851,"path":1852,"order":921,"children":1853},"SAML SSO","\u002Fdocs\u002Fadmin\u002Fsso\u002Fsaml",[],{"title":1855,"path":1856,"order":921,"children":1857,"link":958},"Hardening","\u002Fdocs\u002Fadmin\u002Fhardening",[1858],{"title":1859,"path":1860,"order":921,"children":1861},"Kubernetes Hardening","\u002Fdocs\u002Fadmin\u002Fhardening\u002Fkubernetes",[],{"title":1863,"path":1864,"order":921,"children":1865},"Monitoring","\u002Fdocs\u002Fadmin\u002Fmonitoring",[],{"title":1867,"path":1868,"order":921,"children":1869},"Observability","\u002Fdocs\u002Fadmin\u002Fobservability",[],{"title":1871,"path":1872,"order":921,"children":1873},"Soft Launch Enablement","\u002Fdocs\u002Fadmin\u002Ffeature-flags",[],{"title":1875,"path":1876,"order":921,"children":1877},"Telemetry","\u002Fdocs\u002Fadmin\u002Ftelemetry",[],{"title":1879,"path":1880,"order":921,"children":1881},"User Management","\u002Fdocs\u002Fadmin\u002Fuser-management",[],{"name":1318,"order":177,"children":1883},[1884,1888],{"title":1885,"path":1886,"group":1318,"groupOrder":177,"order":70,"children":1887},"Premium Support","\u002Fdocs\u002Fpremium-support",[],{"title":1889,"path":1890,"group":1318,"groupOrder":177,"order":921,"children":1891},"Debugging Node-RED issues","\u002Fdocs\u002Fdebugging",[],{"name":1893,"order":183,"children":1894},"Contributing",[1895],{"title":1896,"path":1897,"group":1893,"groupOrder":183,"order":921,"children":1898,"link":958},"Contributing to FlowFuse","\u002Fdocs\u002Fcontribute",[1899,1902,1906,1910,1914,1918,1922,1930,1966,1969],{"title":1558,"path":1900,"order":154,"children":1901},"\u002Fdocs\u002Fcontribute\u002Fintroduction",[],{"title":1903,"path":1904,"order":921,"children":1905},"Adding Template Settings","\u002Fdocs\u002Fcontribute\u002Fadding-template-settings",[],{"title":1907,"path":1908,"order":921,"children":1909},"API Design","\u002Fdocs\u002Fcontribute\u002Fapi-design",[],{"title":1911,"path":1912,"order":921,"children":1913},"Creating debug stack containers","\u002Fdocs\u002Fcontribute\u002Fcreating-debug-stack-containers",[],{"title":1915,"path":1916,"order":921,"children":1917},"Database migrations","\u002Fdocs\u002Fcontribute\u002Fdb-migrations",[],{"title":1919,"path":1920,"order":921,"children":1921},"FlowFuse Architecture","\u002Fdocs\u002Fcontribute\u002Farchitecture",[],{"title":1923,"path":1924,"order":921,"children":1925},"Local Install","\u002Fdocs\u002Fcontribute\u002Flocal",[1926],{"title":1927,"path":1928,"order":921,"children":1929},"Local Stacks","\u002Fdocs\u002Fcontribute\u002Flocal\u002Fstacks",[],{"title":1931,"path":1932,"order":921,"children":1933},"State Flows","\u002Fdocs\u002Fcontribute\u002Fworkflows",[1934,1938,1942,1946,1950,1954,1958,1962],{"title":1935,"path":1936,"order":921,"children":1937},"Device Editor","\u002Fdocs\u002Fcontribute\u002Fworkflows\u002Fdevice-editor",[],{"title":1939,"path":1940,"order":921,"children":1941},"Instance states","\u002Fdocs\u002Fcontribute\u002Fworkflows\u002Fproject-states",[],{"title":1943,"path":1944,"order":921,"children":1945},"Invite External Users","\u002Fdocs\u002Fcontribute\u002Fworkflows\u002Finvite-external-user",[],{"title":1947,"path":1948,"order":921,"children":1949},"Project Creation","\u002Fdocs\u002Fcontribute\u002Fworkflows\u002Fproject-create",[],{"title":1951,"path":1952,"order":921,"children":1953},"Reset Password Flow","\u002Fdocs\u002Fcontribute\u002Fworkflows\u002Fpassword-reset",[],{"title":1955,"path":1956,"order":921,"children":1957},"Team creation Flow","\u002Fdocs\u002Fcontribute\u002Fworkflows\u002Fteam-create",[],{"title":1959,"path":1960,"order":921,"children":1961},"User Login Flows","\u002Fdocs\u002Fcontribute\u002Fworkflows\u002Flogin",[],{"title":1963,"path":1964,"order":921,"children":1965},"User Sign up Flow","\u002Fdocs\u002Fcontribute\u002Fworkflows\u002Fsignup",[],{"title":1538,"path":1967,"order":921,"children":1968},"\u002Fdocs\u002Fcontribute\u002Fteam-broker",[],{"title":1970,"path":1971,"order":921,"children":1972},"Working with Feature Flags","\u002Fdocs\u002Fcontribute\u002Ffeature-flags",[],{"name":1974,"order":189,"children":1975},"Node-RED",[1976],{"title":1977,"path":1978,"group":1974,"groupOrder":189,"order":154,"children":1979},"Using Node-RED","\u002Fdocs\u002Fnode-red",[1980,2052,2230,2257,2294,2310,2326,2354,2374,2378],{"title":1981,"path":1982,"order":160,"children":1983},"Getting started","\u002Fdocs\u002Fnode-red\u002Fgetting-started",[1984,2004,2008,2012,2016,2020,2024,2028,2032],{"title":1985,"path":1986,"order":154,"children":1987},"Editor","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Feditor",[1988,1992,1996,2000],{"title":1989,"path":1990,"order":924,"children":1991},"Header","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Feditor\u002Fheader",[],{"title":1993,"path":1994,"order":924,"children":1995},"Palette","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Feditor\u002Fpalette",[],{"title":1997,"path":1998,"order":924,"children":1999},"Sidebar","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Feditor\u002Fsidebar",[],{"title":2001,"path":2002,"order":924,"children":2003},"Workspace","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Feditor\u002Fworkspace",[],{"title":2005,"path":2006,"order":160,"children":2007},"Port Configuration","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Fnode-red-port",[],{"title":2009,"path":2010,"order":70,"children":2011},"Node-RED Library","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Flibrary",[],{"title":2013,"path":2014,"order":70,"children":2015},"Update Node-RED","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Fupdate-node-red",[],{"title":2017,"path":2018,"order":171,"children":2019},"Node-RED On Android","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Fnode-red-android",[],{"title":2021,"path":2022,"order":177,"children":2023},"Working with Messages","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Fnode-red-messages",[],{"title":2025,"path":2026,"order":183,"children":2027},"String","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Fstring",[],{"title":2029,"path":2030,"order":189,"children":2031},"Date & Time","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Fdate-and-time",[],{"title":2033,"path":2034,"order":195,"children":2035},"Programming","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Fprogramming",[2036,2040,2044,2048],{"title":2037,"path":2038,"order":924,"children":2039},"Data Tranformation","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Fprogramming\u002Fdata-tranformation",[],{"title":2041,"path":2042,"order":924,"children":2043},"Debugging","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Fprogramming\u002Fdebugging-flows",[],{"title":2045,"path":2046,"order":924,"children":2047},"If-Else","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Fprogramming\u002Fif-else",[],{"title":2049,"path":2050,"order":924,"children":2051},"Loop","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Fprogramming\u002Floop",[],{"title":2053,"path":2054,"order":70,"children":2055},"Core nodes","\u002Fdocs\u002Fnode-red\u002Fcore-nodes",[2056,2092,2132,2174,2194,2218],{"title":2057,"path":2058,"order":154,"children":2059},"Common nodes","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fcommon",[2060,2064,2068,2072,2076,2080,2084,2088],{"title":2061,"path":2062,"order":154,"children":2063},"Inject","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fcommon\u002Finject",[],{"title":2065,"path":2066,"order":160,"children":2067},"Debug","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fcommon\u002Fdebug",[],{"title":2069,"path":2070,"order":70,"children":2071},"Complete","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fcommon\u002Fcomplete",[],{"title":2073,"path":2074,"order":171,"children":2075},"Catch","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fcommon\u002Fcatch",[],{"title":2077,"path":2078,"order":177,"children":2079},"Status","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fcommon\u002Fstatus",[],{"title":2081,"path":2082,"order":183,"children":2083},"Link","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fcommon\u002Flink",[],{"title":2085,"path":2086,"order":189,"children":2087},"Comment","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fcommon\u002Fcomment",[],{"title":2089,"path":2090,"order":195,"children":2091},"Unknown","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fcommon\u002Funknown",[],{"title":2093,"path":2094,"order":160,"children":2095},"Function nodes","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Ffunction",[2096,2100,2104,2108,2112,2116,2120,2124,2128],{"title":2097,"path":2098,"order":154,"children":2099},"Function","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Ffunction\u002Ffunction",[],{"title":2101,"path":2102,"order":160,"children":2103},"Switch","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Ffunction\u002Fswitch",[],{"title":2105,"path":2106,"order":70,"children":2107},"Change","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Ffunction\u002Fchange",[],{"title":2109,"path":2110,"order":171,"children":2111},"Range","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Ffunction\u002Frange",[],{"title":2113,"path":2114,"order":177,"children":2115},"Template","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Ffunction\u002Ftemplate",[],{"title":2117,"path":2118,"order":183,"children":2119},"Delay","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Ffunction\u002Fdelay",[],{"title":2121,"path":2122,"order":189,"children":2123},"Trigger","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Ffunction\u002Ftrigger",[],{"title":2125,"path":2126,"order":195,"children":2127},"Exec","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Ffunction\u002Fexec",[],{"title":2129,"path":2130,"order":200,"children":2131},"Filter","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Ffunction\u002Ffilter",[],{"title":2133,"path":2134,"order":70,"children":2135},"Network nodes","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fnetwork",[2136,2140,2144,2147,2150,2154,2158,2162,2166,2170],{"title":2137,"path":2138,"order":154,"children":2139},"TLS","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fnetwork\u002Ftls",[],{"title":2141,"path":2142,"order":160,"children":2143},"HTTP Proxy","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fnetwork\u002Fhttp-proxy",[],{"title":1644,"path":2145,"order":70,"children":2146},"\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fnetwork\u002Fmqtt-in",[],{"title":1648,"path":2148,"order":171,"children":2149},"\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fnetwork\u002Fmqtt-out",[],{"title":2151,"path":2152,"order":177,"children":2153},"HTTP in","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fnetwork\u002Fhttp-in",[],{"title":2155,"path":2156,"order":183,"children":2157},"HTTP request","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fnetwork\u002Fhttp-request",[],{"title":2159,"path":2160,"order":189,"children":2161},"WebSocket","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fnetwork\u002Fwebsocket",[],{"title":2163,"path":2164,"order":195,"children":2165},"TCP in","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fnetwork\u002Ftcp-in",[],{"title":2167,"path":2168,"order":200,"children":2169},"UDP In","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fnetwork\u002Fudp-in",[],{"title":2171,"path":2172,"order":206,"children":2173},"UDP Out","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fnetwork\u002Fudp-out",[],{"title":2175,"path":2176,"order":171,"children":2177},"Sequence nodes","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fsequence",[2178,2182,2186,2190],{"title":2179,"path":2180,"order":154,"children":2181},"Split","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fsequence\u002Fsplit",[],{"title":2183,"path":2184,"order":160,"children":2185},"Sort","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fsequence\u002Fsort",[],{"title":2187,"path":2188,"order":70,"children":2189},"Batch","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fsequence\u002Fbatch",[],{"title":2191,"path":2192,"order":171,"children":2193},"Join","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fsequence\u002Fjoin",[],{"title":2195,"path":2196,"order":177,"children":2197},"Parser nodes","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fparsers",[2198,2202,2206,2210,2214],{"title":2199,"path":2200,"order":154,"children":2201},"CSV","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fparsers\u002Fcsv",[],{"title":2203,"path":2204,"order":160,"children":2205},"HTML","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fparsers\u002Fhtml",[],{"title":2207,"path":2208,"order":70,"children":2209},"JSON","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fparsers\u002Fjson",[],{"title":2211,"path":2212,"order":171,"children":2213},"XML","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fparsers\u002Fxml",[],{"title":2215,"path":2216,"order":177,"children":2217},"YAML","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fparsers\u002Fyaml",[],{"title":2219,"path":2220,"order":183,"children":2221},"Storage nodes","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fstorage",[2222,2226],{"title":2223,"path":2224,"order":154,"children":2225},"Write File","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fstorage\u002Fwrite-file",[],{"title":2227,"path":2228,"order":160,"children":2229},"Read File","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fstorage\u002Fread-file",[],{"title":2231,"path":2232,"order":171,"children":2233},"Communication protocols","\u002Fdocs\u002Fnode-red\u002Fprotocol",[2234,2238,2242,2245,2249,2253],{"title":2235,"path":2236,"order":924,"children":2237},"AMQP","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Famqp",[],{"title":2239,"path":2240,"order":924,"children":2241},"LwM2M","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Flwm2m",[],{"title":1633,"path":2243,"order":924,"children":2244},"\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fmodbus",[],{"title":2246,"path":2247,"order":924,"children":2248},"MQTT","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fmqtt",[],{"title":2250,"path":2251,"order":924,"children":2252},"OPC-UA","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fopc-ua",[],{"title":2254,"path":2255,"order":924,"children":2256},"Websocket","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fwebsocket",[],{"title":2258,"path":2259,"order":177,"children":2260},"Databases","\u002Fdocs\u002Fnode-red\u002Fdatabase",[2261,2265,2269,2273,2277,2281,2283,2286,2290],{"title":2262,"path":2263,"order":924,"children":2264},"DynamoDB","\u002Fdocs\u002Fnode-red\u002Fdatabase\u002Fdynamodb",[],{"title":2266,"path":2267,"order":924,"children":2268},"Firebase","\u002Fdocs\u002Fnode-red\u002Fdatabase\u002Ffirebase",[],{"title":2270,"path":2271,"order":924,"children":2272},"InfluxDB","\u002Fdocs\u002Fnode-red\u002Fdatabase\u002Finfluxdb",[],{"title":2274,"path":2275,"order":924,"children":2276},"MongoDB","\u002Fdocs\u002Fnode-red\u002Fdatabase\u002Fmongodb",[],{"title":2278,"path":2279,"order":924,"children":2280},"MySQL","\u002Fdocs\u002Fnode-red\u002Fdatabase\u002Fmysql",[],{"title":925,"path":926,"order":924,"children":2282},[],{"title":1656,"path":2284,"order":924,"children":2285},"\u002Fdocs\u002Fnode-red\u002Fdatabase\u002Fredis",[],{"title":2287,"path":2288,"order":924,"children":2289},"SQLite","\u002Fdocs\u002Fnode-red\u002Fdatabase\u002Fsqlite",[],{"title":2291,"path":2292,"order":924,"children":2293},"TimescaleDB","\u002Fdocs\u002Fnode-red\u002Fdatabase\u002Ftimescaledb",[],{"title":2295,"path":2296,"order":183,"children":2297},"Integration technologies","\u002Fdocs\u002Fnode-red\u002Fintegration-technologies",[2298,2302,2306],{"title":2299,"path":2300,"order":924,"children":2301},"GraphQL API","\u002Fdocs\u002Fnode-red\u002Fintegration-technologies\u002Fgraphql",[],{"title":2303,"path":2304,"order":924,"children":2305},"REST API","\u002Fdocs\u002Fnode-red\u002Fintegration-technologies\u002Frest",[],{"title":2307,"path":2308,"order":924,"children":2309},"Webhook","\u002Fdocs\u002Fnode-red\u002Fintegration-technologies\u002Fwebhook",[],{"title":2311,"path":2312,"order":189,"children":2313},"Notification services","\u002Fdocs\u002Fnode-red\u002Fnotification",[2314,2318,2322],{"title":2315,"path":2316,"order":924,"children":2317},"Discord","\u002Fdocs\u002Fnode-red\u002Fnotification\u002Fdiscord",[],{"title":2319,"path":2320,"order":924,"children":2321},"Email","\u002Fdocs\u002Fnode-red\u002Fnotification\u002Femail",[],{"title":2323,"path":2324,"order":924,"children":2325},"Telegram","\u002Fdocs\u002Fnode-red\u002Fnotification\u002Ftelegram",[],{"title":2327,"path":2328,"order":195,"children":2329},"Hardware","\u002Fdocs\u002Fnode-red\u002Fhardware",[2330,2334,2338,2342,2346,2350],{"title":2331,"path":2332,"order":924,"children":2333},"BLIIOT ARMxy BL340","\u002Fdocs\u002Fnode-red\u002Fhardware\u002Farmxy-bl340",[],{"title":2335,"path":2336,"order":924,"children":2337},"Opto-22 Groov Epic","\u002Fdocs\u002Fnode-red\u002Fhardware\u002Fopto-22-groove-rio-7-mm2001-10",[],{"title":2339,"path":2340,"order":924,"children":2341},"Raspberry Pi 4","\u002Fdocs\u002Fnode-red\u002Fhardware\u002Fraspberry-pi-4",[],{"title":2343,"path":2344,"order":924,"children":2345},"Raspberry Pi 5","\u002Fdocs\u002Fnode-red\u002Fhardware\u002Fraspberry-pi-5",[],{"title":2347,"path":2348,"order":924,"children":2349},"Robustel EG5120","\u002Fdocs\u002Fnode-red\u002Fhardware\u002Frobustel-eg5120",[],{"title":2351,"path":2352,"order":924,"children":2353},"Siemens IoT2050","\u002Fdocs\u002Fnode-red\u002Fhardware\u002Fsiemens-iot-2050",[],{"title":2355,"path":2356,"order":200,"children":2357},"Peripheral devices","\u002Fdocs\u002Fnode-red\u002Fperipheral",[2358,2362,2366,2370],{"title":2359,"path":2360,"order":924,"children":2361},"Arduino","\u002Fdocs\u002Fnode-red\u002Fperipheral\u002Fardiuno",[],{"title":2363,"path":2364,"order":924,"children":2365},"Barcode Scanner","\u002Fdocs\u002Fnode-red\u002Fperipheral\u002Fbarcodescanner",[],{"title":2367,"path":2368,"order":924,"children":2369},"ESP32","\u002Fdocs\u002Fnode-red\u002Fperipheral\u002Fesp32",[],{"title":2371,"path":2372,"order":924,"children":2373},"Webcam","\u002Fdocs\u002Fnode-red\u002Fperipheral\u002Fwebcam",[],{"title":2375,"path":2376,"order":206,"children":2377},"Terminology","\u002Fdocs\u002Fnode-red\u002Fterminology",[],{"title":2379,"path":2380,"order":212,"children":2381},"Keyboard shortcuts","\u002Fdocs\u002Fnode-red\u002Fkeyboard",[],1788888666067]