[{"data":1,"prerenderedAt":240},["ShallowReactive",2],{"application-guide-nav":3,"application-guide-flowfuse-hardware-apps":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":37,"blocks":103,"blurb":39,"extension":236,"guide":5,"meta":237,"navOrder":38,"slug":36,"stem":238,"__hash__":239},"applicationGuide\u002Fapplication-guide\u002Fflowfuse\u002F04-hardware-apps.yml",[104,108],{"type":105,"kicker":106,"body":107},"prose","Hardware apps — start here","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).",{"type":109,"panels":110},"tabs",[111,152,195],{"label":112,"kicker":113,"kickerNote":114,"diagram":115,"summary":136,"useWhen":137,"how":138,"lists":139},"Packaged App","Deploy · sealed","Sealed product on a Remote Instance, identical on every device.",{"lanes":116,"note":135},[117,124,126],{"label":118,"tone":119,"nodes":120},"Built once","it",[121],{"title":122,"sub":123,"tone":119},"Pipeline snapshot","sealed · built once",{"link":125},"deploy · sealed",{"label":127,"tone":128,"nodes":129},"Devices · nothing to configure","ot",[130,133,134],{"title":131,"sub":132,"tone":128},"Remote Instance","identical",{"title":131,"sub":132,"tone":128},{"title":131,"sub":132,"tone":128},"Sealed · nothing to configure","A sealed product that ships on a piece of hardware and is identical everywhere — buy it, it runs on its device, nothing to configure.","The app ships with a known partner device and the data it reads is fixed by that hardware.","Built and promoted through a pipeline (dev → staging → prod), then deployed to a Remote Instance as a snapshot. Everything is baked in; only fixed env vars vary at deploy.",[140,147],{"heading":141,"items":142},"Major components",[143,144,145,146],"Pipeline snapshot — the app built once, promoted to the device","Remote Instance (edge device) — FlowFuse-managed Node-RED running the sealed app","Team Broker (MQTT) — carries the app's events to subscribers","FlowFuse Tables — stores the rows the app writes",{"heading":148,"items":149},"Where config & data live",[150,151],"Config — baked into the snapshot; only fixed env vars at deploy, nothing per-site.","Data — events to the Team Broker, records to FlowFuse Tables.",{"label":153,"kicker":154,"kickerNote":155,"diagram":156,"summary":181,"useWhen":182,"how":183,"lists":184},"Configurable App","Same build, per-site config","Same build on a Remote Instance, tuned by a per-site config file that lives on the device.",{"lanes":157},[158,162,163,170,172],{"label":118,"tone":119,"nodes":159},[160],{"title":122,"sub":161,"tone":119},"same build",{"link":161},{"label":164,"tone":165,"nodes":166},"Per-site config","neutral",[167],{"title":164,"sub":168,"tone":169},"tags · broker · site","muted",{"link":171},"loads its own config",{"label":173,"tone":128,"nodes":174},"Devices · each tuned to its site",[175,177,179],{"title":131,"sub":176,"tone":128},"Site A",{"title":131,"sub":178,"tone":128},"Site B",{"title":131,"sub":180,"tone":128},"Site C","The same shelf product, plus a few knobs — tag names, broker address, site name — that differ per site and live on the Remote Instance.","The flows are the same everywhere but the values they use differ per install and may change over time.","Same pipeline delivery to a Remote Instance; the runtime loads a per-site config from a file on the device. Back that file up to the database, so a device swap restores the config — the device is the source of truth, the DB is the safety net.",[185,191],{"heading":141,"items":186},[187,188,189,190],"Pipeline snapshot — the same build promoted to every device","Remote Instance (edge device) — runs the app and loads its own per-site config","Per-site config (tags · broker · site) — a file on the device, backed up to the DB","Team Broker \u002F FlowFuse Tables — event egress + records",{"heading":148,"items":192},[193,194],"Config — a per-site file on the device (tags, broker address, site name), backed up to FlowFuse Tables so a swap restores it.","Data — Team Broker + FlowFuse Tables.",{"label":196,"kicker":197,"kickerNote":198,"diagram":199,"summary":222,"useWhen":223,"how":224,"lists":225},"Edge Building Block","A reusable edge block","A reusable edge block you wire into your own upstream flows.",{"lanes":200},[201,206,208,213,215],{"label":202,"tone":165,"nodes":203},"Equipment",[204],{"title":202,"sub":205,"tone":169},"signals \u002F PLC",{"link":207},"reads",{"label":209,"tone":128,"nodes":210},"Edge Building Block on a Remote Instance",[211],{"title":131,"sub":212,"tone":128},"edge device",{"link":214},"publishes",{"label":216,"tone":217,"nodes":218},"Upstream","broker",[219],{"title":220,"sub":221,"tone":217},"Team Broker","MQTT","Not a finished app — one hardware-facing block plus example flows, running on a Remote Instance. You assemble everything upstream of it yourself.","The hardware-facing piece is reusable, but everything before it differs so much per site that no finished app would fit.","Blocks are published as subflows to the Team Library with an example flow. Consumers drop them onto a Remote Instance and wire them up.",[226,232],{"heading":141,"items":227},[228,229,230,231],"Equipment (signals \u002F PLC) — the source hardware the block reads","Remote Instance (edge device) — runs the edge building block at the line","Team Broker (MQTT) — publishes the normalized data upstream","Team Library — where the block is published as an installable subflow",{"heading":148,"items":233},[234,235],"Config — lives in the consuming flow you build around the block (env \u002F context).","Data — Team Broker (normalized, upstream).","yml",{},"application-guide\u002Fflowfuse\u002F04-hardware-apps","d4-a2gt6MCjJ0XhYfrxEQMGNBEwAHtiolaNd3PCjm1I",1786132520467]