[{"data":1,"prerenderedAt":212},["ShallowReactive",2],{"application-guide-nav":3,"agmd-flowfuse-ot-architectures":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":100,"blurb":9,"body":120,"description":203,"extension":205,"guide":5,"meta":206,"navOrder":101,"navTitle":100,"navigation":207,"parent":88,"path":208,"seo":209,"slug":99,"stem":210,"__hash__":211},"applicationGuideDoc\u002Fapplication-guide\u002Fflowfuse\u002Fot-architectures.md",{"type":121,"value":122,"toc":202},"minimark",[123,126],[124,125,100],"h1",{"id":99},[127,128,129,151,168,185],"guide-tabs",{},[130,131,133,140,144],"guide-tab",{"label":132},"Edge · server in IT",[134,135],"arch-diagram",{":edges":136,":groups":137,":legend":138,":nodes":139},"[{\"from\":\"r1\",\"to\":\"server\",\"accent\":\"slate\"},{\"from\":\"r2\",\"to\":\"server\",\"label\":\"manages across the boundary\",\"accent\":\"slate\"},{\"from\":\"r3\",\"to\":\"server\",\"accent\":\"slate\"},{\"from\":\"r1\",\"to\":\"p1\"},{\"from\":\"r2\",\"to\":\"p2\",\"label\":\"reads\"},{\"from\":\"r3\",\"to\":\"p3\"}]","[{\"id\":\"it\",\"label\":\"IT infrastructure\",\"accent\":\"green\",\"nodes\":[\"server\"]},{\"id\":\"ot\",\"label\":\"OT environment\",\"accent\":\"red\",\"nodes\":[\"r1\",\"r2\",\"r3\",\"p1\",\"p2\",\"p3\"]}]","[{\"swatch\":\"green\",\"label\":\"IT zone\"},{\"swatch\":\"red\",\"label\":\"OT zone\"},{\"line\":\"slate\",\"label\":\"Authenticated\"},{\"line\":\"neutral\",\"label\":\"Local wire\"}]","[{\"id\":\"server\",\"label\":\"FlowFuse server\",\"sub\":\"in IT infrastructure\",\"accent\":\"indigo\",\"col\":2,\"row\":1},{\"id\":\"r1\",\"label\":\"Remote Instance\",\"sub\":\"on OT equipment\",\"accent\":\"slate\",\"col\":1,\"row\":2},{\"id\":\"r2\",\"label\":\"Remote Instance\",\"sub\":\"on OT equipment\",\"accent\":\"slate\",\"col\":2,\"row\":2},{\"id\":\"r3\",\"label\":\"Remote Instance\",\"sub\":\"on OT equipment\",\"accent\":\"slate\",\"col\":3,\"row\":2},{\"id\":\"p1\",\"label\":\"PLCs\",\"sub\":\"Line A\",\"col\":1,\"row\":3},{\"id\":\"p2\",\"label\":\"PLCs\",\"sub\":\"Line B\",\"col\":2,\"row\":3},{\"id\":\"p3\",\"label\":\"PLCs\",\"sub\":\"Line C\",\"col\":3,\"row\":3}]",[141,142,143],"p",{},"The FlowFuse server lives up in the IT infrastructure; the Remote Instances live down in the OT environment on the equipment. The server deploys to and manages them across the IT\u002FOT boundary, while each Remote Instance keeps running locally if the link drops.",[141,145,146,150],{},[147,148,149],"strong",{},"Use it when"," — IT owns and hosts the platform, but execution must sit next to the machines in OT.",[130,152,154,160,163],{"label":153},"Edge · server in OT \u002F DMZ",[134,155],{":edges":156,":groups":157,":legend":158,":nodes":159},"[{\"from\":\"itri\",\"to\":\"corp\",\"accent\":\"slate\"},{\"from\":\"itri\",\"to\":\"server\",\"label\":\"controlled uplink\",\"accent\":\"slate\"},{\"from\":\"r1\",\"to\":\"server\",\"accent\":\"slate\"},{\"from\":\"r2\",\"to\":\"server\",\"accent\":\"slate\"},{\"from\":\"r3\",\"to\":\"server\",\"accent\":\"slate\"},{\"from\":\"r1\",\"to\":\"p1\"},{\"from\":\"r2\",\"to\":\"p2\"},{\"from\":\"r3\",\"to\":\"p3\"}]","[{\"id\":\"it\",\"label\":\"IT · corporate network\",\"accent\":\"green\",\"nodes\":[\"corp\",\"itri\"]},{\"id\":\"dmz\",\"label\":\"DMZ · firewall-segregated\",\"accent\":\"neutral\",\"nodes\":[\"server\"]},{\"id\":\"ot\",\"label\":\"OT network\",\"accent\":\"red\",\"nodes\":[\"r1\",\"r2\",\"r3\",\"p1\",\"p2\",\"p3\"]}]","[{\"swatch\":\"green\",\"label\":\"IT zone\"},{\"swatch\":\"neutral\",\"label\":\"DMZ\"},{\"swatch\":\"red\",\"label\":\"OT zone\"},{\"line\":\"slate\",\"label\":\"Authenticated\"},{\"line\":\"neutral\",\"label\":\"Local wire\"}]","[{\"id\":\"corp\",\"label\":\"Corporate systems\",\"sub\":\"MES \u002F ERP \u002F dashboards\",\"accent\":\"neutral\",\"col\":2,\"row\":1},{\"id\":\"itri\",\"label\":\"Remote Instance\",\"sub\":\"in IT\",\"accent\":\"slate\",\"col\":2,\"row\":2},{\"id\":\"server\",\"label\":\"FlowFuse server\",\"sub\":\"in the DMZ\",\"accent\":\"indigo\",\"col\":2,\"row\":3},{\"id\":\"r1\",\"label\":\"Remote Instance\",\"sub\":\"IPC · Area 1\",\"accent\":\"slate\",\"col\":1,\"row\":4},{\"id\":\"r2\",\"label\":\"Remote Instance\",\"sub\":\"IPC · Area 2\",\"accent\":\"slate\",\"col\":2,\"row\":4},{\"id\":\"r3\",\"label\":\"Remote Instance\",\"sub\":\"embedded · Area 3\",\"accent\":\"slate\",\"col\":3,\"row\":4},{\"id\":\"p1\",\"label\":\"PLCs\",\"col\":1,\"row\":5},{\"id\":\"p2\",\"label\":\"PLCs\",\"col\":2,\"row\":5},{\"id\":\"p3\",\"label\":\"PLCs\",\"col\":3,\"row\":5}]",[141,161,162],{},"The FlowFuse server sits inside the plant, firewall-segregated in a DMZ. It reaches corporate systems through a controlled uplink to a Remote Instance up in the IT network, and manages Remote Instances on IPCs and embedded hardware in the OT network below. Nothing reaches OT except through the firewalls.",[141,164,165,167],{},[147,166,149],{}," — Security policy keeps the platform inside the plant boundary, exposed only through a DMZ.",[130,169,171,177,180],{"label":170},"Air-gapped",[134,172],{":edges":173,":groups":174,":legend":175,":nodes":176},"[{\"from\":\"net\",\"to\":\"server\",\"label\":\"blocked\",\"dir\":\"none\",\"dashed\":true,\"accent\":\"red\"},{\"from\":\"server\",\"to\":\"inst\",\"label\":\"deploys\",\"accent\":\"slate\"},{\"from\":\"inst\",\"to\":\"plc\",\"label\":\"reads\"}]","[{\"id\":\"ot\",\"label\":\"OT network · no internet\",\"accent\":\"red\",\"nodes\":[\"server\",\"inst\",\"plc\"]}]","[{\"swatch\":\"red\",\"label\":\"OT zone\"},{\"line\":\"slate\",\"label\":\"Authenticated\"},{\"line\":\"neutral\",\"label\":\"Local wire\"},{\"line\":\"red\",\"dashed\":true,\"label\":\"Blocked\"}]","[{\"id\":\"net\",\"label\":\"Internet\",\"accent\":\"neutral\",\"col\":1,\"row\":1},{\"id\":\"server\",\"label\":\"FlowFuse\",\"sub\":\"self-managed · on-site\",\"accent\":\"indigo\",\"col\":1,\"row\":2},{\"id\":\"inst\",\"label\":\"Instances\",\"sub\":\"site apps\",\"accent\":\"indigo\",\"col\":1,\"row\":3},{\"id\":\"plc\",\"label\":\"PLCs\",\"sub\":\"equipment\",\"col\":1,\"row\":4}]",[141,178,179],{},"The DMZ pattern taken to its extreme: a self-managed FlowFuse runs on a server inside an isolated OT network with no internet at all. It manages that site's instances and devices entirely within the OT boundary — nothing goes in or out.",[141,181,182,184],{},[147,183,149],{}," — Site security policy forbids any internet traffic in or out of the OT network.",[130,186,188,194,197],{"label":187},"Edge · hardware-saving",[134,189],{":edges":190,":groups":191,":legend":192,":nodes":193},"[{\"from\":\"server\",\"to\":\"h1\",\"accent\":\"slate\"},{\"from\":\"server\",\"to\":\"h2\",\"label\":\"runs\",\"accent\":\"slate\"},{\"from\":\"server\",\"to\":\"h3\",\"accent\":\"slate\"},{\"from\":\"h1\",\"to\":\"p1\"},{\"from\":\"h2\",\"to\":\"p2\",\"label\":\"talks to equipment\"},{\"from\":\"h3\",\"to\":\"p3\"}]","[{\"id\":\"ot\",\"label\":\"OT · on-site, close to the equipment\",\"accent\":\"red\",\"nodes\":[\"server\",\"h1\",\"h2\",\"h3\",\"p1\",\"p2\",\"p3\"]}]","[{\"swatch\":\"red\",\"label\":\"OT zone\"},{\"line\":\"slate\",\"label\":\"Authenticated\"},{\"line\":\"neutral\",\"label\":\"Local wire\"}]","[{\"id\":\"server\",\"label\":\"FlowFuse server\",\"sub\":\"on-site · near the line\",\"accent\":\"indigo\",\"col\":2,\"row\":1},{\"id\":\"h1\",\"label\":\"Hosted Instance\",\"sub\":\"does Line A's work\",\"accent\":\"indigo\",\"col\":1,\"row\":2},{\"id\":\"h2\",\"label\":\"Hosted Instance\",\"sub\":\"does Line B's work\",\"accent\":\"indigo\",\"col\":2,\"row\":2},{\"id\":\"h3\",\"label\":\"Hosted Instance\",\"sub\":\"does Line C's work\",\"accent\":\"indigo\",\"col\":3,\"row\":2},{\"id\":\"p1\",\"label\":\"PLCs\",\"sub\":\"Line A\",\"col\":1,\"row\":3},{\"id\":\"p2\",\"label\":\"PLCs\",\"sub\":\"Line B\",\"col\":2,\"row\":3},{\"id\":\"p3\",\"label\":\"PLCs\",\"sub\":\"Line C\",\"col\":3,\"row\":3}]",[141,195,196],{},"Instead of a Remote Instance on every device, deploy one FlowFuse server close to the line and run several Hosted Instances on it — each doing the work an edge device would have done, talking to its equipment directly. Fewer physical boxes to buy and maintain, same separation of concerns.",[141,198,199,201],{},[147,200,149],{}," — You want the edge workloads consolidated onto nearby server hardware to cut device count.",{"title":203,"searchDepth":67,"depth":67,"links":204},"",[],"md",{},true,"\u002Fapplication-guide\u002Fflowfuse\u002Fot-architectures",{"title":100,"description":203},"application-guide\u002Fflowfuse\u002Fot-architectures","vmbHskropRepTY1ZS4XhRdRFv-e-nibSwhqR_KM0Fjs",1787068105811]