[{"data":1,"prerenderedAt":288},["ShallowReactive",2],{"agmd-node-red-foundations":3,"application-guide-nav":180},{"id":4,"title":5,"blurb":6,"body":7,"description":17,"extension":171,"guide":172,"meta":173,"navOrder":168,"navTitle":5,"navigation":174,"parent":175,"path":176,"seo":177,"slug":13,"stem":178,"__hash__":179},"applicationGuideDoc\u002Fapplication-guide\u002Fnode-red\u002Ffoundations.md","Foundations","The handful of concepts you need to build with Node-RED, and how they fit together.",{"type":8,"value":9,"toc":163},"minimark",[10,14,18,23,28,60,64,71,76,80,145],[11,12,5],"h1",{"id":13},"foundations",[15,16,17],"p",{},"The handful of concepts you need to build with Node-RED, and how they fit together. You wire pre-built nodes into flows and spend your effort on the logic — what the system should do — while the platform handles the syntax and the connectivity. Learn these and you can build real integrations in Node-RED with only a little JavaScript — the structure carries most of the weight.",[19,20,22],"h2",{"id":21},"how-it-fits-together","How it fits together",[24,25],"flow-diagram",{":edges":26,":nodes":27},"[\"msgin>transform\",\"transform>route\",\"route>sink\",{\"from\":\"route\",\"to\":\"context\",\"dir\":\"both\",\"accent\":\"green\",\"label\":\"read \u002F write state\"}]","[{\"id\":\"msgin\",\"label\":\"Message in\",\"sub\":\"http in \u002F inject\"},{\"id\":\"transform\",\"label\":\"Node\",\"sub\":\"transform\"},{\"id\":\"route\",\"label\":\"Node\",\"sub\":\"route\"},{\"id\":\"sink\",\"label\":\"Sink\",\"sub\":\"no routing\"},{\"id\":\"context\",\"label\":\"Context\",\"sub\":\"shared state\",\"accent\":\"green\",\"col\":3,\"row\":2}]",[15,29,30,31,35,36,39,40,43,44,47,48,51,52,55,56,59],{},"A ",[32,33,34],"strong",{},"message"," enters a ",[32,37,38],{},"flow"," and passes from ",[32,41,42],{},"node"," to node, transformed along the way, until it reaches a sink that sends and routes nothing. Reuse comes from ",[32,45,46],{},"subflows"," and ",[32,49,50],{},"link nodes","; shared state lives in ",[32,53,54],{},"context","; new capabilities come from installing nodes off the ",[32,57,58],{},"palette",".",[19,61,63],{"id":62},"what-it-connects-to","What it connects to",[15,65,66,67,70],{},"Node-RED's reach comes from its nodes: install one for a protocol or service and the instance can talk to it. The same runtime — a Hosted Instance in the cloud or a Remote Instance on your own hardware — reaches field hardware, databases, message buses, cloud services and other systems. And ",[32,68,69],{},"any instance can serve its own Dashboard"," for the people who use it.",[72,73],"arch-diagram",{":edges":74,":nodes":75},"[{\"from\":\"inst\",\"to\":\"dash\",\"label\":\"serves\"},{\"from\":\"inst\",\"to\":\"db\",\"dir\":\"both\"},{\"from\":\"inst\",\"to\":\"mqtt\",\"dir\":\"both\"},{\"from\":\"inst\",\"to\":\"cloud\",\"dir\":\"both\"},{\"from\":\"inst\",\"to\":\"plc\",\"dir\":\"both\"},{\"from\":\"inst\",\"to\":\"io\",\"dir\":\"both\"},{\"from\":\"inst\",\"to\":\"gw\",\"dir\":\"both\"},{\"from\":\"inst\",\"to\":\"api\",\"dir\":\"both\"}]","[{\"id\":\"dash\",\"label\":\"Dashboard\",\"sub\":\"its own operator UI\",\"accent\":\"blue\",\"col\":1,\"row\":1},{\"id\":\"db\",\"label\":\"Databases\",\"sub\":\"SQL · time-series\",\"accent\":\"green\",\"col\":2,\"row\":1},{\"id\":\"mqtt\",\"label\":\"Brokers\",\"sub\":\"MQTT · UNS\",\"accent\":\"teal\",\"col\":3,\"row\":1},{\"id\":\"cloud\",\"label\":\"Cloud services\",\"sub\":\"AWS · Azure · GCP\",\"accent\":\"blue\",\"col\":4,\"row\":1},{\"id\":\"inst\",\"label\":\"Instance\",\"sub\":\"hosted or remote — same runtime\",\"accent\":\"indigo\",\"span\":2,\"col\":2,\"row\":2},{\"id\":\"plc\",\"label\":\"PLCs\",\"sub\":\"controllers\",\"col\":1,\"row\":3},{\"id\":\"io\",\"label\":\"Sensors & IO\",\"sub\":\"signals\",\"col\":2,\"row\":3},{\"id\":\"gw\",\"label\":\"Gateways\",\"sub\":\"protocol bridges\",\"col\":3,\"row\":3},{\"id\":\"api\",\"label\":\"HTTP \u002F APIs\",\"sub\":\"REST · services\",\"accent\":\"blue\",\"col\":4,\"row\":3}]",[19,77,79],{"id":78},"the-core-pieces","The core pieces",[81,82,83,90,96,106,112,127,133,139],"ul",{},[84,85,86,89],"li",{},[32,87,88],{},"Node"," — A single processing block: it receives a message, does one thing — read, transform, call, route — and passes it on.",[84,91,92,95],{},[32,93,94],{},"Flow"," — Nodes wired left-to-right on a tab; a message enters, is transformed, and exits. One working unit of automation.",[84,97,98,101,102,105],{},[32,99,100],{},"Message (msg)"," — The object that travels the wires, carrying ",[32,103,104],{},"msg.payload"," plus metadata between nodes.",[84,107,108,111],{},[32,109,110],{},"Subflow"," — A block you define once and drop in many places, with its own inputs, outputs and per-instance config.",[84,113,114,117,118,121,122,126],{},[32,115,116],{},"Link nodes"," — link in \u002F link out route messages across tabs with no visible wires; ",[32,119,120],{},"link call"," is the one that ",[123,124,125],"em",{},"returns"," — your in-process service call.",[84,128,129,132],{},[32,130,131],{},"Context"," — Storage that keeps state between messages — flow and global scope, in memory or persisted.",[84,134,135,138],{},[32,136,137],{},"Palette"," — The library of installable nodes (npm) you add new capabilities from.",[84,140,141,144],{},[32,142,143],{},"Editor & runtime"," — The browser editor where you wire flows, and the runtime that executes them continuously.",[146,147,149],"callout",{"icon":148},"i-lucide-book-open",[15,150,151,154,155,162],{},[32,152,153],{},"In the Node-RED docs"," — that's the working model. For the full glossary — every core term and node type, straight from the Node-RED project — see the ",[156,157,161],"a",{"href":158,"rel":159},"https:\u002F\u002Fnodered.org\u002Fdocs\u002Fuser-guide\u002Fconcepts",[160],"nofollow","official Node-RED documentation"," instead of a glossary here.",{"title":164,"searchDepth":165,"depth":165,"links":166},"",4,[167,169,170],{"id":21,"depth":168,"text":22},2,{"id":62,"depth":168,"text":63},{"id":78,"depth":168,"text":79},"md","node-red",{},true,null,"\u002Fapplication-guide\u002Fnode-red\u002Ffoundations",{"title":5,"description":17},"application-guide\u002Fnode-red\u002Ffoundations","c0ucTA_IKGNULG1MV3kPb_6TNcYGJBCZwmxX_OcCeG8",[181,188,191,194,196,202,207,213,218,224,229,235,240,245,251,257,263,268,273,278,282],{"guide":182,"slug":183,"title":184,"navOrder":185,"parent":175,"blurb":186,"path":187},"flowfuse","overview","Overview",1,"The map of the FlowFuse guide — apps, architectures, and a worked example.","\u002Fapplication-guide\u002Fflowfuse\u002Foverview\u002F",{"guide":172,"slug":183,"title":184,"navOrder":185,"parent":175,"blurb":189,"path":190},"The map of the Node-RED guide — the pattern families that turn an app into a clean flow.","\u002Fapplication-guide\u002Fnode-red\u002Foverview\u002F",{"guide":182,"slug":13,"title":5,"navOrder":168,"parent":175,"blurb":192,"path":193},"The foundation to build on: what FlowFuse is, its core pieces, and how code is shared across teams.","\u002Fapplication-guide\u002Fflowfuse\u002Ffoundations\u002F",{"guide":172,"slug":13,"title":5,"navOrder":168,"parent":175,"blurb":6,"path":195},"\u002Fapplication-guide\u002Fnode-red\u002Ffoundations\u002F",{"guide":182,"slug":197,"title":198,"navOrder":199,"parent":175,"blurb":200,"path":201},"app-delivery-methods","App delivery methods",3,"Two different units of code, delivered two ways. Ship the whole app — a complete, versioned project promoted through environments — or publish one reusable piece — a package the whole team installs and upgrades in one place. Pick by what you're shipping: the app, or a part of it.","\u002Fapplication-guide\u002Fflowfuse\u002Fapp-delivery-methods\u002F",{"guide":172,"slug":203,"title":204,"navOrder":199,"parent":175,"blurb":205,"path":206},"patterns","Patterns","The moves that turn an architecture into a clean, reusable flow — find the seams and reuse well, then handle data on the right paths.","\u002Fapplication-guide\u002Fnode-red\u002Fpatterns\u002F",{"guide":182,"slug":208,"title":209,"navOrder":210,"parent":197,"blurb":211,"path":212},"hardware-apps","Hardware apps",3.1,"The three shapes a FlowFuse app takes when it runs on a device. Pick by how much varies per site: nothing (Packaged App), a few settings (Configurable App), or you assemble it yourself (Edge Building Block).","\u002Fapplication-guide\u002Fflowfuse\u002Fhardware-apps\u002F",{"guide":172,"slug":214,"title":215,"navOrder":210,"parent":203,"blurb":216,"path":217},"design-patterns","Design patterns","The structural choices you select for a flow: find the seams it breaks into, then reuse each piece at the lightest level that solves it — link in\u002Fout, link call, subflow, or packaged node.","\u002Fapplication-guide\u002Fnode-red\u002Fdesign-patterns\u002F",{"guide":182,"slug":219,"title":220,"navOrder":221,"parent":197,"blurb":222,"path":223},"software-apps","Software apps",3.2,"The three shapes a FlowFuse app takes when it runs on the platform. Pick by what it needs: a headless job (Packaged App), a user-facing app driven by data (Data-Driven App), or a reusable piece other apps embed (Shared Building Block).","\u002Fapplication-guide\u002Fflowfuse\u002Fsoftware-apps\u002F",{"guide":172,"slug":225,"title":226,"navOrder":221,"parent":203,"blurb":227,"path":228},"handling-data","Handling data","Classify each signal by shape, purpose and direction, then pick the methods it needs — separate the paths, pace the flow, hold state in context, and manage config. The methods you select to move a flow's data.","\u002Fapplication-guide\u002Fnode-red\u002Fhandling-data\u002F",{"guide":172,"slug":230,"title":231,"navOrder":232,"parent":203,"blurb":233,"path":234},"good-form","Good form",3.3,"A clean flow isn't luck — it's a handful of habits. Wire for reading, lay it out on a grid, decouple UI from logic, catch errors where you can see them, and keep data on a stable contract. Follow these and a flow stays readable, reusable, and out of spaghetti.","\u002Fapplication-guide\u002Fnode-red\u002Fgood-form\u002F",{"guide":182,"slug":236,"title":237,"navOrder":165,"parent":175,"blurb":238,"path":239},"data-plane","Data plane","Before you pick where things run, decide how data is handled. Two stores come built into every FlowFuse server install — the Team Broker and relational Tables — exposed to every instance with nothing extra to stand up. Everything else you bring your own: run it (a time-series DB, an existing database, a model) and expose it to the fleet over Project Link, no inbound ports. This is the data plane the architectures on the next pages all sit on.","\u002Fapplication-guide\u002Fflowfuse\u002Fdata-plane\u002F",{"guide":172,"slug":241,"title":242,"navOrder":165,"parent":175,"blurb":243,"path":244},"worked-examples","Worked examples","Turn an app concept into a Node-RED flow — or a few — leaning on the design patterns and data handling. The method, then the OEE apps end to end.","\u002Fapplication-guide\u002Fnode-red\u002Fworked-examples\u002F",{"guide":172,"slug":246,"title":247,"navOrder":248,"parent":241,"blurb":249,"path":250},"oee-edge-aggregator","OEE - Edge Aggregator",4.1,"The edge app from the OEE use case as a Node-RED flow — a straight-line flow packaged as a subflow and configured per line (its PLC tags, via a config UI and a get-config node), with the data treated as a stream and its counts held in context.","\u002Fapplication-guide\u002Fnode-red\u002Foee-edge-aggregator\u002F",{"guide":172,"slug":252,"title":253,"navOrder":254,"parent":241,"blurb":255,"path":256},"oee-central-dashboard","OEE - Central Dashboard",4.2,"The cloud app from the OEE use case as a Node-RED flow — one link out fanning to two link ins on separate tabs (dashboard and batched history), so the live and history paths stay separate and easy to read.","\u002Fapplication-guide\u002Fnode-red\u002Foee-central-dashboard\u002F",{"guide":182,"slug":258,"title":259,"navOrder":260,"parent":175,"blurb":261,"path":262},"architectures","Architectures",5,"Every FlowFuse deployment is the same building blocks arranged for where it runs — pick the world you're designing for.","\u002Fapplication-guide\u002Fflowfuse\u002Farchitectures\u002F",{"guide":182,"slug":264,"title":265,"navOrder":266,"parent":258,"blurb":175,"path":267},"it-architectures","IT architectures",5.1,"\u002Fapplication-guide\u002Fflowfuse\u002Fit-architectures\u002F",{"guide":182,"slug":269,"title":270,"navOrder":271,"parent":258,"blurb":175,"path":272},"ot-architectures","OT architectures",5.2,"\u002Fapplication-guide\u002Fflowfuse\u002Fot-architectures\u002F",{"guide":182,"slug":274,"title":275,"navOrder":276,"parent":258,"blurb":175,"path":277},"iiot-architectures","IIoT architectures",5.3,"\u002Fapplication-guide\u002Fflowfuse\u002Fiiot-architectures\u002F",{"guide":182,"slug":241,"title":242,"navOrder":279,"parent":175,"blurb":280,"path":281},6,"Start from a use case, break it into apps, and draw the architecture that ties them together — the same method a FlowFuse Proof of Value runs.","\u002Fapplication-guide\u002Fflowfuse\u002Fworked-examples\u002F",{"guide":182,"slug":283,"title":284,"navOrder":285,"parent":241,"blurb":286,"path":287},"worked-example","OEE, end to end",6.1,"One use case — OEE across three lines — broken into two apps and two shared services, then drawn out end to end.","\u002Fapplication-guide\u002Fflowfuse\u002Fworked-example\u002F",1787843652713]