[{"data":1,"prerenderedAt":288},["ShallowReactive",2],{"application-guide-nav":3,"agmd-node-red-foundations":118},[4,12,16,22,25,31,36,42,47,53,58,64,70,75,81,87,93,98,103,108,112],{"guide":5,"slug":6,"title":7,"navOrder":8,"parent":9,"blurb":10,"path":11},"flowfuse","overview","Overview",1,null,"The map of the FlowFuse guide — apps, architectures, and a worked example.","\u002Fapplication-guide\u002Fflowfuse\u002Foverview\u002F",{"guide":13,"slug":6,"title":7,"navOrder":8,"parent":9,"blurb":14,"path":15},"node-red","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":5,"slug":17,"title":18,"navOrder":19,"parent":9,"blurb":20,"path":21},"foundations","Foundations",2,"The foundation to build on: what FlowFuse is, its core pieces, and how code is shared across teams.","\u002Fapplication-guide\u002Fflowfuse\u002Ffoundations\u002F",{"guide":13,"slug":17,"title":18,"navOrder":19,"parent":9,"blurb":23,"path":24},"The handful of concepts you need to build with Node-RED, and how they fit together.","\u002Fapplication-guide\u002Fnode-red\u002Ffoundations\u002F",{"guide":5,"slug":26,"title":27,"navOrder":28,"parent":9,"blurb":29,"path":30},"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":13,"slug":32,"title":33,"navOrder":28,"parent":9,"blurb":34,"path":35},"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":5,"slug":37,"title":38,"navOrder":39,"parent":26,"blurb":40,"path":41},"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":13,"slug":43,"title":44,"navOrder":39,"parent":32,"blurb":45,"path":46},"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":5,"slug":48,"title":49,"navOrder":50,"parent":26,"blurb":51,"path":52},"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":13,"slug":54,"title":55,"navOrder":50,"parent":32,"blurb":56,"path":57},"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":13,"slug":59,"title":60,"navOrder":61,"parent":32,"blurb":62,"path":63},"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":5,"slug":65,"title":66,"navOrder":67,"parent":9,"blurb":68,"path":69},"data-plane","Data plane",4,"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":13,"slug":71,"title":72,"navOrder":67,"parent":9,"blurb":73,"path":74},"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":13,"slug":76,"title":77,"navOrder":78,"parent":71,"blurb":79,"path":80},"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":13,"slug":82,"title":83,"navOrder":84,"parent":71,"blurb":85,"path":86},"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":5,"slug":88,"title":89,"navOrder":90,"parent":9,"blurb":91,"path":92},"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":5,"slug":94,"title":95,"navOrder":96,"parent":88,"blurb":9,"path":97},"it-architectures","IT architectures",5.1,"\u002Fapplication-guide\u002Fflowfuse\u002Fit-architectures\u002F",{"guide":5,"slug":99,"title":100,"navOrder":101,"parent":88,"blurb":9,"path":102},"ot-architectures","OT architectures",5.2,"\u002Fapplication-guide\u002Fflowfuse\u002Fot-architectures\u002F",{"guide":5,"slug":104,"title":105,"navOrder":106,"parent":88,"blurb":9,"path":107},"iiot-architectures","IIoT architectures",5.3,"\u002Fapplication-guide\u002Fflowfuse\u002Fiiot-architectures\u002F",{"guide":5,"slug":71,"title":72,"navOrder":109,"parent":9,"blurb":110,"path":111},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":5,"slug":113,"title":114,"navOrder":115,"parent":71,"blurb":116,"path":117},"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",{"id":119,"title":18,"blurb":23,"body":120,"description":129,"extension":281,"guide":13,"meta":282,"navOrder":19,"navTitle":18,"navigation":283,"parent":9,"path":284,"seo":285,"slug":17,"stem":286,"__hash__":287},"applicationGuideDoc\u002Fapplication-guide\u002Fnode-red\u002Ffoundations.md",{"type":121,"value":122,"toc":275},"minimark",[123,126,130,135,140,172,176,183,188,192,257],[124,125,18],"h1",{"id":17},[127,128,129],"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.",[131,132,134],"h2",{"id":133},"how-it-fits-together","How it fits together",[136,137],"flow-diagram",{":edges":138,":nodes":139},"[\"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}]",[127,141,142,143,147,148,151,152,155,156,159,160,163,164,167,168,171],{},"A ",[144,145,146],"strong",{},"message"," enters a ",[144,149,150],{},"flow"," and passes from ",[144,153,154],{},"node"," to node, transformed along the way, until it reaches a sink that sends and routes nothing. Reuse comes from ",[144,157,158],{},"subflows"," and ",[144,161,162],{},"link nodes","; shared state lives in ",[144,165,166],{},"context","; new capabilities come from installing nodes off the ",[144,169,170],{},"palette",".",[131,173,175],{"id":174},"what-it-connects-to","What it connects to",[127,177,178,179,182],{},"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 ",[144,180,181],{},"any instance can serve its own Dashboard"," for the people who use it.",[184,185],"arch-diagram",{":edges":186,":nodes":187},"[{\"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}]",[131,189,191],{"id":190},"the-core-pieces","The core pieces",[193,194,195,202,208,218,224,239,245,251],"ul",{},[196,197,198,201],"li",{},[144,199,200],{},"Node"," — A single processing block: it receives a message, does one thing — read, transform, call, route — and passes it on.",[196,203,204,207],{},[144,205,206],{},"Flow"," — Nodes wired left-to-right on a tab; a message enters, is transformed, and exits. One working unit of automation.",[196,209,210,213,214,217],{},[144,211,212],{},"Message (msg)"," — The object that travels the wires, carrying ",[144,215,216],{},"msg.payload"," plus metadata between nodes.",[196,219,220,223],{},[144,221,222],{},"Subflow"," — A block you define once and drop in many places, with its own inputs, outputs and per-instance config.",[196,225,226,229,230,233,234,238],{},[144,227,228],{},"Link nodes"," — link in \u002F link out route messages across tabs with no visible wires; ",[144,231,232],{},"link call"," is the one that ",[235,236,237],"em",{},"returns"," — your in-process service call.",[196,240,241,244],{},[144,242,243],{},"Context"," — Storage that keeps state between messages — flow and global scope, in memory or persisted.",[196,246,247,250],{},[144,248,249],{},"Palette"," — The library of installable nodes (npm) you add new capabilities from.",[196,252,253,256],{},[144,254,255],{},"Editor & runtime"," — The browser editor where you wire flows, and the runtime that executes them continuously.",[258,259,261],"callout",{"icon":260},"i-lucide-book-open",[127,262,263,266,267,274],{},[144,264,265],{},"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 ",[268,269,273],"a",{"href":270,"rel":271},"https:\u002F\u002Fnodered.org\u002Fdocs\u002Fuser-guide\u002Fconcepts",[272],"nofollow","official Node-RED documentation"," instead of a glossary here.",{"title":276,"searchDepth":67,"depth":67,"links":277},"",[278,279,280],{"id":133,"depth":19,"text":134},{"id":174,"depth":19,"text":175},{"id":190,"depth":19,"text":191},"md",{},true,"\u002Fapplication-guide\u002Fnode-red\u002Ffoundations",{"title":18,"description":129},"application-guide\u002Fnode-red\u002Ffoundations","c0ucTA_IKGNULG1MV3kPb_6TNcYGJBCZwmxX_OcCeG8",1787068106163]