[{"data":1,"prerenderedAt":232},["ShallowReactive",2],{"application-guide-nav":3,"application-guide-node-red-flow-shape":101},[4,11,15,21,24,30,35,41,46,52,57,63,68,74,79,85,91,97],{"guide":5,"slug":6,"title":7,"navOrder":8,"blurb":9,"path":10},"flowfuse","overview","Overview",1,"Turn an app idea into FlowFuse pieces you can name and say in one sentence.","\u002Fapplication-guide\u002Fflowfuse\u002Foverview\u002F",{"guide":12,"slug":6,"title":7,"navOrder":8,"blurb":13,"path":14},"node-red","Turn an architecture sentence into a clean flow shape you can read at a glance.","\u002Fapplication-guide\u002Fnode-red\u002Foverview\u002F",{"guide":5,"slug":16,"title":17,"navOrder":18,"blurb":19,"path":20},"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":12,"slug":16,"title":17,"navOrder":18,"blurb":22,"path":23},"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":25,"title":26,"navOrder":27,"blurb":28,"path":29},"app-delivery-methods","App delivery methods",3,"Two different units of code, delivered two ways: ship the whole app, or publish one reusable piece.","\u002Fapplication-guide\u002Fflowfuse\u002Fapp-delivery-methods\u002F",{"guide":12,"slug":31,"title":32,"navOrder":27,"blurb":33,"path":34},"flow-shape","Flow shape","Turn an architecture sentence into a flow you can read at a glance.","\u002Fapplication-guide\u002Fnode-red\u002Fflow-shape\u002F",{"guide":5,"slug":36,"title":37,"navOrder":38,"blurb":39,"path":40},"hardware-apps","Hardware apps",4,"The three shapes a FlowFuse app takes when it runs on a device.","\u002Fapplication-guide\u002Fflowfuse\u002Fhardware-apps\u002F",{"guide":12,"slug":42,"title":43,"navOrder":38,"blurb":44,"path":45},"design-patterns","Design patterns","The moves that turn a flow into something you can reuse, test and hand off.","\u002Fapplication-guide\u002Fnode-red\u002Fdesign-patterns\u002F",{"guide":5,"slug":47,"title":48,"navOrder":49,"blurb":50,"path":51},"software-apps","Software apps",5,"The three shapes a FlowFuse app takes when it runs on the platform.","\u002Fapplication-guide\u002Fflowfuse\u002Fsoftware-apps\u002F",{"guide":12,"slug":53,"title":54,"navOrder":49,"blurb":55,"path":56},"handling-data","Handling data","Sort data by what it is for before you tune anything.","\u002Fapplication-guide\u002Fnode-red\u002Fhandling-data\u002F",{"guide":5,"slug":58,"title":59,"navOrder":60,"blurb":61,"path":62},"data-plane","Data plane",6,"Before you pick where things run, decide how data is handled.","\u002Fapplication-guide\u002Fflowfuse\u002Fdata-plane\u002F",{"guide":12,"slug":64,"title":65,"navOrder":60,"blurb":66,"path":67},"operating-flows","Operating flows","Four operational habits that keep a flow running when the real world pushes back.","\u002Fapplication-guide\u002Fnode-red\u002Foperating-flows\u002F",{"guide":5,"slug":69,"title":70,"navOrder":71,"blurb":72,"path":73},"architectures","Architectures",7,"The same building blocks, arranged for where they run.","\u002Fapplication-guide\u002Fflowfuse\u002Farchitectures\u002F",{"guide":12,"slug":75,"title":76,"navOrder":71,"blurb":77,"path":78},"worked-example","Worked example","The shape rules and patterns applied end to end.","\u002Fapplication-guide\u002Fnode-red\u002Fworked-example\u002F",{"guide":5,"slug":80,"title":81,"navOrder":82,"blurb":83,"path":84},"it-architectures","IT architectures",8,"Hosting the platform and serving the wider organisation.","\u002Fapplication-guide\u002Fflowfuse\u002Fit-architectures\u002F",{"guide":5,"slug":86,"title":87,"navOrder":88,"blurb":89,"path":90},"ot-architectures","OT architectures",9,"How FlowFuse deploys in operational-technology environments, near the equipment.","\u002Fapplication-guide\u002Fflowfuse\u002Fot-architectures\u002F",{"guide":5,"slug":92,"title":93,"navOrder":94,"blurb":95,"path":96},"iiot-architectures","IIoT architectures",10,"Distributed edge nodes, each doing one small job, feeding one central system.","\u002Fapplication-guide\u002Fflowfuse\u002Fiiot-architectures\u002F",{"guide":5,"slug":75,"title":76,"navOrder":98,"blurb":99,"path":100},11,"OEE, end to end — two packages, two connections.","\u002Fapplication-guide\u002Fflowfuse\u002Fworked-example\u002F",{"id":102,"title":32,"blocks":103,"blurb":33,"extension":228,"guide":12,"meta":229,"navOrder":27,"slug":31,"stem":230,"__hash__":231},"applicationGuide\u002Fapplication-guide\u002Fnode-red\u002F03-flow-shape.yml",[104,108],{"type":105,"kicker":106,"body":107},"prose","Flow shape — start here","Turn an architecture sentence into a flow you can read at a glance. Four shape rules — where paths begin, how they share services, when to reuse as a subflow vs a link call, and where they end — draw the flow for you.",{"type":109,"panels":110},"tabs",[111,139,170,202],{"label":112,"kicker":113,"kickerNote":114,"diagramTitle":115,"diagram":116,"summary":132,"useWhen":133,"howHeading":134,"how":135,"callout":136},"Beginnings","Entry paths","List every entry first; keep each path separate, don't funnel through one front door.","Three beginnings, three paths",{"lanes":117,"note":131},[118],{"label":119,"tone":120,"nodes":121},"Node-RED runtime","neutral",[122,125,128],{"title":123,"sub":124},"http in","a request arrives → prep + format → sink",{"title":126,"sub":127},"MQTT in","an event arrives → prep + format → sink",{"title":129,"sub":130},"inject \u002F timer","a schedule fires → prep + format → sink","Each beginning is its own path, all the way across.","Every way work enters a piece: an http in, an MQTT in, an inject or timer. Each beginning is its own path.","You are laying out a piece and want to see its paths before wiring. List the entries first, and do not funnel them through one shared front door.","How to lay it out","Draw one row per beginning. Each row runs straight: beginning, prep, a call to services, then a sink. The paths stay separate the whole way across.",{"tone":137,"text":138},"good","Keeping a device path and a browser path from running through each other.",{"label":140,"kicker":141,"kickerNote":142,"diagramTitle":143,"diagram":144,"summary":165,"useWhen":166,"howHeading":134,"how":167,"callout":168},"Shared services (link call)","Shared services","Expose a resource once behind link-in\u002Fout; every path calls it, results return, no central router.","One pool serves every path, result returns",{"lanes":145,"note":164},[146,155,157],{"label":147,"tone":120,"nodes":148},"Paths",[149,151,153],{"title":150},"GET \u002Fassets",{"title":152},"GET \u002Fknowledge",{"title":154},"POST \u002Fknowledge",{"link":156},"link call",{"label":158,"tone":159,"nodes":160},"Shared service","it",[161],{"title":162,"sub":163,"tone":159},"tables pool","SQL database · one pool","Result returns to whoever asked.","Anything that holds a connection or is a common dependency many paths use: a database pool, a model call, a broker. You call it and the result returns to the caller.","More than one path needs the same resource and you do not want a copy per path. One pool, one call, a result back to whoever asked.","Expose the resource once behind a link in that ends in a returning link out. Each path uses link call, and results come back with no central router to build.",{"tone":137,"text":169},"One DB pool serving every read and write path without mixing them.",{"label":171,"kicker":172,"kickerNote":173,"diagramTitle":174,"diagram":175,"summary":196,"useWhen":197,"howHeading":134,"how":198,"callout":199},"Subflow vs link call","Reuse: subflow or link call","Link call for one fixed config; subflow only when it needs per-instance config or cross-instance reuse.","One config, use link call. Per-instance config, use a subflow",{"lanes":176},[177,187],{"label":178,"tone":120,"nodes":179},"Link call · one shared config",[180,182,184],{"title":181},"caller A",{"title":183},"caller B",{"title":185,"tone":186},"pool","muted",{"label":188,"tone":159,"nodes":189},"Subflow · config per instance",[190,193],{"title":191,"sub":192,"tone":159},"instance 1","config A",{"title":194,"sub":195,"tone":159},"instance 2","config B","Both reuse logic, but they are not interchangeable. A link call shares one fixed configuration; a subflow is a reusable assembly with its own per-instance config.","Use a subflow only if it needs per-instance config, or it is reused in other Node-RED instances. Otherwise a link call is lighter and enough.","Single config and single project means link call. Different settings per drop, or reuse across other Node-RED instances, means subflow. Start as a link call and promote it if it earns the distribution.",{"tone":200,"text":201},"watch","Defaulting to subflows for everything duplicates connections and adds indirection.",{"label":203,"kicker":203,"kickerNote":204,"diagramTitle":205,"diagram":206,"summary":223,"useWhen":224,"howHeading":134,"how":225,"callout":226},"Single sink","Each family converges on one sink that routes nothing; keep the decisions upstream.","Many paths, one sink, no decisions here",{"lanes":207},[208,215,217],{"label":147,"tone":120,"nodes":209},[210,212,213],{"title":211},"path, read",{"title":211},{"title":214},"path, write",{"link":216},"link out",{"label":218,"tone":159,"nodes":219},"One sink",[220],{"title":221,"sub":222,"tone":159},"http res","http response · one node","The one sink each family of paths converges on — an http response, an MQTT publish, or a dashboard update — reached by a labeled link. It only sends; no decisions live here.","Every path in a surface needs to end somewhere, and that ending should route nothing. Keep the logic upstream so the sink makes no routing decisions.","Point each path at one labeled sink that only sends and never branches — an http response, an MQTT publish, or a dashboard update. Reads and writes converge there; an HTTP path responds exactly once, a streaming path simply emits.",{"tone":200,"text":227},"If a node everything passes through decides where things go, that is a router. Split it back out.","yml",{},"application-guide\u002Fnode-red\u002F03-flow-shape","EKdrT3A-bA8dEFX1FF_oBnELTf0VdwpNuyFhbwe9E2U",1786132521758]