[{"data":1,"prerenderedAt":1194},["ShallowReactive",2],{"blog-\u002Fblog\u002F2026\u002F06\u002Fplc-communication-latency-causes-and-fixes":3,"featureCatalog":264,"changelog-titles":659,"blog-all-for-related":1193},{"id":4,"title":5,"authors":6,"body":9,"cta":239,"date":243,"description":244,"extension":245,"features":246,"image":247,"lastUpdated":246,"meta":248,"navigation":253,"path":254,"release":246,"seo":255,"sitemap":256,"stem":257,"subtitle":258,"tags":259,"tldr":262,"video":246,"__hash__":263},"blog\u002Fblog\u002F2026\u002F06\u002Fplc-communication-latency-causes-and-fixes.md","Fixing PLC Communication Latency: Where the Milliseconds Really Go",[7,8],"drew-gatti","sumit-shinde",{"type":10,"value":11,"toc":226},"minimark",[12,16,19,22,27,30,33,37,40,43,46,49,78,81,85,88,91,94,98,107,127,131,134,137,169,172,175,178,182,185,188,191,194,197,201,204,207,210,213,216,220,223],[13,14,15],"p",{},"If you run control over a PLC link, a fast loop, an interlock, a setpoint that has to land on time, the fix usually isn't a faster runtime or a different protocol. It's a handful of settings made once at setup and never revisited, each one quietly costing milliseconds the loop can't spare.",[13,17,18],{},"Latency on a PLC link comes from how the data is handled, not the runtime, the network, or the PLC's CPU. Fix those settings, in order, and the timing comes back on its own.",[13,20,21],{},"This post follows the time: where a PLC link loses its milliseconds, and how to get each one back.",[23,24,26],"h2",{"id":25},"first-check-if-its-even-the-transport","First, check if it's even the transport",[13,28,29],{},"Following the time means starting at the bottom. Before you change anything, find out which layer is slow. You can spend a day tuning poll rates when the real problem is the protocol shaking underneath you, or the other way around.",[13,31,32],{},"The simplest check is a SISO test: single input, single output. Run a tiny exchange straight on the controller, with no PLC logic in the loop, just a line or two of code, and watch it on a scope. If even that bare exchange jumps around from one pass to the next, the problem is the transport itself, not anything you built on top. If the bare exchange holds steady but your real flow doesn't, the time is going somewhere in your data handling. That one test tells you which half of this article to read first.",[23,34,36],{"id":35},"the-data-doesnt-change-at-one-speed-and-your-poll-rate-shouldnt-either","The data doesn't change at one speed, and your poll rate shouldn't either",[13,38,39],{},"When the test points at your data handling, the first place to look is also where most of the lost time hides. It usually starts with a thirty-second choice: pick a scan rate, use it for every tag, move on. It works on day one, so it stays that way. But one rate is the wrong answer for almost every real system, and a quick calculation shows why.",[13,41,42],{},"Take a shared bus with twenty devices, all polled at 500 ms, where each read takes 50 ms. That's not 500 ms per device, it's a queue: twenty reads at 50 ms each is a full second to get through one cycle. By the time you read device twenty, its value is already a second old, and the next cycle hasn't started. You read a slow temperature sensor ten times before its value could have moved, and a fault bit that goes high for 800 ms can fall between two passes and never get seen. One rate ends up too fast for some tags and too slow for others.",[13,44,45],{},"The reason it's the wrong model is that the data isn't all one kind. A temperature drifts over minutes. A runtime counter ticks once an hour. An alarm bit can flip in under a second. A setpoint only changes when an operator touches it. Polling all four at the same rate fits none of them, and it wastes the controller's time on the ones that didn't need it.",[13,47,48],{},"The fix is to set the rate to how fast the data actually changes:",[50,51,52,60,66,72],"ul",{},[53,54,55,59],"li",{},[56,57,58],"strong",{},"Fast, 100 to 500 ms:"," fault and alarm bits, interlocks, values that drive closed-loop control. A missed change here has real consequences.",[53,61,62,65],{},[56,63,64],{},"Normal, 1 to 5 seconds:"," running values like flow, pressure, temperature, current draw. They change all the time, but not in an instant. A two-second poll catches the trend without flooding the bus.",[53,67,68,71],{},[56,69,70],{},"Slow, 30 seconds to a few minutes:"," counters, runtime hours, setpoints. They change by operator action, or build up slowly enough that fast polling is pure waste.",[53,73,74,77],{},[56,75,76],{},"Once, then cache:"," nameplate data, firmware versions, calibration values. Read them at startup and never poll again.",[13,79,80],{},"To sort any tag, ask whether a delay changes a control decision or only the timestamp on a record. If it changes a decision, it goes on the fast tier. If it only changes a timestamp, it's telemetry and belongs slower. Then ask how many tags really need the fast path, because it's almost always far fewer than the number on it now. Most points in most systems are reads, and most of those reads are not urgent.",[23,82,84],{"id":83},"a-timeout-is-a-measurement-not-a-guess","A timeout is a measurement, not a guess",[13,86,87],{},"Once the rates are sorted, the next thing that turns a slow moment into a stall is the timeout, and people usually set it by guessing a round number.",[13,89,90],{},"Both directions hurt. Too tight, and the request fails the moment the device is busy. That fires a retry, which adds more traffic to an already busy link, which makes the next request more likely to fail too. Too loose, and the master sits stuck on a dead request far longer than it should, holding up everything behind it. Either way, you've made latency.",[13,92,93],{},"The way to set it is to measure the floor and add margin. The floor has three parts: time to send the request, the device's own processing time, and time to send the response back. Take a slow serial device. Eight milliseconds to send, seventy-five for the device to process, twenty-five for the response: about 108 ms before anything has gone wrong. A 100 ms timeout fails that read every time. A 150 ms timeout usually passes but fails under load, which is the worst case because it's hard to catch. A 250 ms timeout gives you real room. Find your floor, multiply by 1.5 to 2, and don't treat the margin as wasted time. It's the difference between a link that holds under load and one that drops frames when the device gets busy. The datasheet gives you a starting number. A protocol analyzer gives you the real one.",[23,95,97],{"id":96},"the-controllers-scan-time-is-borrowed-so-spend-it-deliberately","The controller's scan time is borrowed, so spend it deliberately",[13,99,100,101,106],{},"Rates and timeouts are two settings, but step back and there's a simple idea underneath both. The PLC's first job is running the process, not talking to you. It works through a ",[102,103,105],"a",{"href":104},"\u002Fblog\u002F2025\u002F12\u002Fwhat-is-plc\u002F#how-a-plc-works-the-scan-cycle","fixed scan",", and communication is squeezed in around the logic that actually drives the machine. Every request you send borrows time from that work. Set your rates and timeouts well and you're spending that borrowed time with care. Three habits waste it.",[50,108,109,115,121],{},[53,110,111,114],{},[56,112,113],{},"Polling more than you need."," This is the poll rate problem from the controller's side. A big set of points read at a fast rate burns budget on data that didn't need the rate, leaving less room for the data that does. Tiering isn't only about the bus. It gives the scan its time back.",[53,116,117,120],{},[56,118,119],{},"Ignoring the connection limit."," Many devices accept only a few connections at once, sometimes as few as one to four. Point too many clients at one device, or fire too many requests at once, and the extras wait in line or get turned away. Over TCP that shows up as connections backing off on a timer that climbs through 250, 500, then 1000 ms. It looks like random network latency, but it's the device turning work away because it ran out of sockets. Know the limit and stay under it.",[53,122,123,126],{},[56,124,125],{},"Stacking everything on one protocol."," Most PLCs run each protocol through its own driver and process, with its own share of resources. Put fast control data and high-volume telemetry on the same protocol and they fight over the same driver, so the fast path picks up the load from the slow path. It also helps to know which way each connection opens, whether the controller reaches out or something reaches in, because that changes how the work gets scheduled and what it costs.",[23,128,130],{"id":129},"match-the-protocol-to-the-data-not-the-other-way-around","Match the protocol to the data, not the other way around",[13,132,133],{},"Even with a driver to itself, none of the protocols a runtime reaches a PLC or device through at this level, the northbound, supervisory layer, are real-time by design. That's true of Modbus TCP, OPC UA, MQTT, and EtherNet\u002FIP's explicit messaging alike. They were built to move data reliably between a supervisory system and a controller, not to guarantee it lands inside a fixed time window. So there's no protocol to crown the winner here, only ones better or worse suited to the job in front of you.",[13,135,136],{},"Start with what each one is built for:",[50,138,139,145,151,157,163],{},[53,140,141,144],{},[56,142,143],{},"MQTT"," is pub\u002Fsub transport, built to move lots of telemetry, wrong for steady sub-loop response.",[53,146,147,150],{},[56,148,149],{},"OPC UA"," is strong for structured, modeled data and a poor fit for sub-100 ms control.",[53,152,153,156],{},[56,154,155],{},"WebSocket"," is light and often the quickest of the general-purpose options, but it makes no promise on turn time.",[53,158,159,162],{},[56,160,161],{},"Modbus TCP"," can hold steady low-millisecond reads in good conditions, but never as a hard promise.",[53,164,165,168],{},[56,166,167],{},"EtherNet\u002FIP's explicit messaging"," carries structured requests over standard Ethernet and can be tuned to hold a steady turn time, but it's making the same kind of effort the others are, not a different one.",[13,170,171],{},"None of these guarantees delivery inside a fixed time window by default. They're non-deterministic at this layer.",[13,173,174],{},"The real determinism in a PLC system lives one level down, inside the controller's own I\u002FO scan and the fieldbus underneath it, things like EtherCAT or PROFINET IRT, where timing is enforced by the hardware and the scan cycle itself, cycle after cycle, regardless of what's happening above it. A supervisory runtime doesn't poll that layer and doesn't reach it; it talks to the controller through one of the four protocols above. Treating EtherNet\u002FIP, or any of them, as carrying that hardware-level determinism up to the supervisory layer is where a \"pick protocol X and you're guaranteed real-time\" claim goes wrong.",[13,176,177],{},"So the answer isn't a ranking, it's a method. Pick a protocol the device actually supports and that's well implemented on both ends. Apply the techniques already in this article, tiered poll rates, measured timeouts, a respected scan budget, sampling and timestamping at the source, before touching the protocol at all. Only consider switching protocols if the timing still won't hold after that. Keep the fast path lean either way: carry only the points needed to make the decision, and fetch everything else after the fact from a database or a slower read. Most slow links come from reaching for a protocol swap before doing the work above it.",[23,179,181],{"id":180},"the-steadiest-timing-is-built-at-the-source-not-fixed-downstream","The steadiest timing is built at the source, not fixed downstream",[13,183,184],{},"Tiering, timeouts, and the work above all cut wasted time. But the steadiest timing comes from a change in where the work happens: do it in the PLC, at the source, instead of trying to fix it downstream over the network.",[13,186,187],{},"Start with sampling. If you need a fixed gap between readings, the network can't give it to you. MQTT won't, WebSocket won't, none of them will. Everything past the point where the signal is read is transport, and transport doesn't promise a fixed gap. So build the guarantee in at the source: have the controller sample at a fixed rate as it reads the signal, and stamp each reading with the time it was taken. Once a sample carries its own timestamp, it doesn't matter that the transport delivers it at an uneven pace, because the timing of the measurement is already saved. Trying to fix this by controlling when data lands over the wire is solving it in the wrong place.",[13,189,190],{},"That same move fixes the polling load. Instead of reading without pause, let the controller hold telemetry in a buffer and pull the buffer at the slower rate the data actually needs. The controller stops handling requests that never had to happen, and because each reading was already timestamped at the source, the slower, uneven pull never touches the timing of the data.",[13,192,193],{},"Then move the buffer in batches, not a trickle. Build an array, say a window of samples, each with a timestamp and value, and write the whole batch to a time-series database at once. These databases are built for batch writes, so this is far lighter on both the database and the controller than a stream of single writes. One thing to watch when you batch: build each request from registers that sit together. Stack points that are scattered across the register map into one request, and you force the device to read the dead space between them, or split the read into many small ones behind the scenes. Either way the cycle slows. Group points that are next to each other, and let the gaps fall on request edges.",[13,195,196],{},"And make sure the receiving end is built for the rate too. Reliability isn't only an upstream worry. A time-series database can take data at high speed, but feed it single writes at that speed and the cost climbs far above batched writes. Whatever takes the data, database, broker, or app, should be set up for the rate it's actually getting.",[23,198,200],{"id":199},"the-runtime-isnt-your-variable","The runtime isn't your variable",[13,202,203],{},"By the time poll rates, timeouts, protocol selection, and data handling are properly tuned, the runtime becomes just one fixed cost in the path, and a predictable one.",[13,205,206],{},"In the case of FlowFuse, which is built on Node-RED, the runtime runs on Node.js rather than on compiled embedded code. That introduces a small amount of overhead on each pass through a flow: typically a few milliseconds, and consistently so. It doesn't drift over time, and it doesn't increase when a device on the line becomes busy. A well-designed flow can maintain low-millisecond response times all day.",[13,208,209],{},"That fixed overhead is also a useful diagnostic tool. A constant delay of a few milliseconds cannot cause timing variations of tens of milliseconds. So if you're seeing swings that large, the root cause is somewhere else. In most cases, it comes down to one of the four issues covered in this article: an overloaded poll rate, a timeout chosen by guesswork, an ignored connection limit, or a protocol being asked to deliver timing guarantees it was never designed to provide.",[13,211,212],{},"There is one exception worth calling out. Node-RED runs as a single process with a shared event loop, so a CPU-intensive transformation or a slow database write anywhere within that instance can temporarily block everything else, including the fast path, whenever it executes. Moving that work to a different tab in the editor doesn't help, because all tabs within the same instance share the same event loop.",[13,214,215],{},"This isn't a case of the runtime being slow; it's a case of unrelated workloads competing for the same process. The solution is the same principle used throughout this article: give the fast path its own lane by moving heavy workloads into a separate instance.",[23,217,219],{"id":218},"final-thought","Final thought",[13,221,222],{},"A slow PLC link is the configuration assuming the data is simpler than it is. One rate for data that moves at four different speeds. A timeout that's never been measured. A scan budget spent without counting. A protocol asked to promise what it was never designed to promise.",[13,224,225],{},"None of that is a tool problem. It's a mismatch between what the system expects and what the data actually needs. Close that gap, by how fast each tag changes, by what the wire actually measures, by what each protocol was actually built for, and the timing follows on its own.",{"title":227,"searchDepth":228,"depth":228,"links":229},"",4,[230,232,233,234,235,236,237,238],{"id":25,"depth":231,"text":26},2,{"id":35,"depth":231,"text":36},{"id":83,"depth":231,"text":84},{"id":96,"depth":231,"text":97},{"id":129,"depth":231,"text":130},{"id":180,"depth":231,"text":181},{"id":199,"depth":231,"text":200},{"id":218,"depth":231,"text":219},{"type":240,"title":241,"description":242},"contact","Still seeing PLC latency, or not sure your runtime can keep up?","If you've worked through poll tiers, timeouts, and protocol splits and the link still isn't steady, or you're not sure whether your runtime can hold the timing your process needs, that's exactly what our team can help diagnose, and help you achieve with FlowFuse.","2026-06-17","Troubleshoot PLC communication latency by identifying common causes such as poll rates, timeout settings, connection limits, and protocol selection.","md",null,"\u002Fblog\u002F2026\u002F06\u002Fimages\u002Ffixing-plc-communication.png",{"excerpt":249},{"type":10,"value":250},[251],[13,252,15],{},true,"\u002Fblog\u002F2026\u002F06\u002Fplc-communication-latency-causes-and-fixes",{"title":5,"description":244},{"loc":254},"blog\u002F2026\u002F06\u002Fplc-communication-latency-causes-and-fixes","Find the few settings draining your milliseconds and the timing follows.",[260,261],"post","plc","Most PLC latency isn't the runtime, the network, or the CPU, it's a few unexamined settings. Run a SISO test to isolate the transport from your data handling. Tier poll rates to how fast each tag actually changes instead of polling everything at one rate. Set timeouts from a measured floor times 1.5 to 2, not by feel. Spend the controller's scan budget deliberately: poll only what needs the fast tier, respect connection limits, and keep telemetry off the time-critical protocol's driver. At the supervisory layer, no protocol is a winner; pick one the device supports and that's well implemented on both ends, then hold timing with the techniques above before considering a switch. Then sample and timestamp at the source and batch writes instead of streaming single ones, so the timing is built in rather than fought for over the wire.","sesumlq9w0b9lRrJur6I1HXlLmajv0f_ycLl6eWpY30",{"id":265,"extension":266,"meta":267,"sections":268,"stem":657,"__hash__":658},"featureCatalog\u002Ffeature-catalog.yml","yml",{},[269,320,421,483,560,639],{"id":270,"title":271,"features":272},"ai-automation","AI & Automation",[273,283,293,303,309,315],{"id":274,"title":275,"description":276,"docsLink":277,"changelog":278,"tiers":282},"flowfuse-expert-ai","FlowFuse Expert AI","Build industrial apps with agents, and query the state of the factory with an agent. Adapt your current hardware and machines so agentic work can be done against them, without ripping and replacing what's already on the plant floor.","\u002Fdocs\u002Fuser\u002Fexpert\u002F",[279],{"url":280,"release":281},"\u002Fchangelog\u002F2026\u002F02\u002Fff-expert-update-banner\u002F","2.28",{"edge":253,"hub":253,"fleet":253},{"id":284,"title":285,"description":286,"docsLink":287,"changelog":288,"subfeature":253,"showOnPricing":291,"tiers":292},"flowfuse-expert-support-mode","Support Mode","Chat-based assistance for FlowFuse and Node-RED, including Node-RED instance management through natural language.","\u002Fdocs\u002Fuser\u002Fexpert\u002Fchat\u002F#support-mode",[289],{"url":290,"release":281},"\u002Fchangelog\u002F2026\u002F02\u002Fff-expert-debug-log-context\u002F",false,{"edge":253,"hub":253,"fleet":253},{"id":294,"title":295,"description":296,"docsLink":297,"changelog":298,"subfeature":253,"showOnPricing":291,"tiers":302},"flowfuse-expert-application-building","Application Building","Describe what you want to build and FlowFuse Expert assembles it on your workspace, adding tabs, wiring nodes, and configuring properties.","\u002Fdocs\u002Fuser\u002Fexpert\u002Fchat\u002F",[299],{"url":300,"release":301},"\u002Fchangelog\u002F2026\u002F05\u002Fexpert-application-building\u002F","2.30",{"edge":253,"hub":253,"fleet":253},{"id":304,"title":305,"description":306,"docsLink":307,"subfeature":253,"beta":253,"showOnPricing":291,"tiers":308},"flowfuse-expert-insights-mode","Insights Mode","Connects FlowFuse Expert to MCP servers in your Node-RED instances, enabling real-time data queries and actions through a single chat interface.","\u002Fdocs\u002Fuser\u002Fexpert\u002Fchat\u002F#insights-mode",{"edge":253,"hub":253,"fleet":253},{"id":310,"title":311,"description":312,"docsLink":313,"tiers":314},"mcp-servers","Agentic Operations","Expose your Node-RED flows as tools an AI agent can call directly, so agents can query the state of the factory or trigger actions without custom integration work.","\u002Fnode-red\u002Fflowfuse\u002Fmcp\u002F",{"edge":253,"hub":253,"fleet":253},{"id":316,"title":317,"description":318,"tiers":319},"onnx-integration","ONNX Integration","Run trained machine learning models directly in your flows, including on edge hardware, without sending data out to an external inference service.",{"edge":253,"hub":253,"fleet":253},{"id":321,"title":322,"features":323},"build","Build",[324,330,336,346,352,358,362,368,374,382,388,392,396,405,413],{"id":325,"title":326,"description":327,"docsLink":328,"tiers":329},"edge-development","Edge Development","Develop and test Node-RED flows directly on edge devices with a remote editor proxy.","\u002Fdocs\u002Fdevice-agent\u002Fquickstart\u002F",{"edge":253,"hub":291,"fleet":253},{"id":331,"title":332,"description":333,"docsLink":334,"tiers":335},"private-npm-registry","Custom Node-RED Nodes","Create and manage your own private npm registry for Node-RED nodes, so you can share custom nodes across your team and devices without publishing them publicly.","\u002Fdocs\u002Fuser\u002Fcustom-npm-packages\u002F",{"edge":253,"hub":253,"fleet":253},{"id":337,"title":338,"description":339,"docsLink":340,"changelog":341,"tiers":345},"flowfuse-tables","FlowFuse Tables","A managed PostgreSQL database for every application, so you can store and query structured data without standing up and maintaining your own database.","\u002Fdocs\u002Fuser\u002Fff-tables\u002F",[342],{"url":343,"release":344},"\u002Fchangelog\u002F2026\u002F07\u002Fexpert-tables-automation\u002F","2.33",{"edge":253,"hub":253,"fleet":253},{"id":347,"title":348,"description":349,"docsLink":350,"tiers":351},"persistent-files","File Storage","Store and retrieve files from your Node-RED flows, with automatic replication and backup across your devices and hosted instances.","\u002Fdocs\u002Finstall\u002Ffile-storage\u002F",{"edge":253,"hub":253,"fleet":253},{"id":353,"title":354,"description":355,"docsLink":356,"showOnPricing":291,"tiers":357},"persistent-context","Persistent Context","In-memory values defined in a Node-RED flow persist across project restarts and upgrades.","\u002Fdocs\u002Fuser\u002Fpersistent-context\u002F",{"edge":253,"hub":253,"fleet":253},{"id":359,"title":360,"showOnPricing":291,"tiers":361},"static-assets","Static Assets",{"edge":253,"hub":253,"fleet":253},{"id":363,"title":364,"description":365,"docsLink":366,"tiers":367},"team-library","Team Library","Set up standard nodes and flows that can be shared with all team members across your organisation.","\u002Fdocs\u002Fuser\u002Fshared-library\u002F",{"edge":253,"hub":253,"fleet":253},{"id":369,"title":370,"description":371,"docsLink":372,"tiers":373},"personalised-multi-user-dashboards","Personalised Multi-User Dashboards","Build applications that provide unique data to each logged-in user using personalised multi-user dashboards.","https:\u002F\u002Fdashboard.flowfuse.com\u002Fuser\u002Fmulti-tenancy.html",{"edge":253,"hub":253,"fleet":253},{"id":375,"title":376,"description":377,"changelog":378,"subfeature":253,"showOnPricing":291,"tiers":381},"dashboards-view","Dashboards View","Browse and open every dashboard across your team from a dedicated Dashboards view, at both team and application level, without leaving FlowFuse.",[379],{"url":380,"release":344},"\u002Fchangelog\u002F2026\u002F07\u002Fteam-and-application-dashboards\u002F",{"edge":253,"hub":253,"fleet":253},{"id":383,"title":384,"description":385,"docsLink":386,"tiers":387},"blueprints-converge","Blueprints","Ready-made starting points for your apps, from cross-team Converge templates to OT and IT specific blueprints.","\u002Fdocs\u002Fuser\u002Fconcepts\u002F#blueprint",{"edge":253,"hub":253,"fleet":253},{"id":389,"title":390,"subfeature":253,"showOnPricing":291,"tiers":391},"blueprints-ot-apps","Blueprints - OT APPS",{"edge":253,"hub":291,"fleet":253},{"id":393,"title":394,"subfeature":253,"showOnPricing":291,"tiers":395},"blueprints-it-apps","Blueprints - IT APPS",{"edge":291,"hub":253,"fleet":291},{"id":397,"title":398,"description":399,"changelog":400,"showOnPricing":291,"tiers":404},"immersive-editor-snapshots","Snapshot Details in Immersive Editor","View and manage snapshot details directly inside the immersive editor without leaving your editing session.",[401],{"url":402,"release":403},"\u002Fchangelog\u002F2026\u002F03\u002Fsnapshot-detail-modal-immersive-editor\u002F","2.29",{"edge":253,"hub":253,"fleet":253},{"id":406,"title":407,"description":408,"changelog":409,"showOnPricing":291,"tiers":412},"immersive-editor-drawer","Customisable Immersive Editor Drawer","Pin, move, resize, or full-screen the immersive editor drawer. Your preferences are remembered between sessions.",[410],{"url":411,"release":301},"\u002Fchangelog\u002F2026\u002F04\u002Fimmersive-editor-drawer\u002F",{"edge":253,"hub":253,"fleet":253},{"id":414,"title":415,"description":416,"changelog":417,"showOnPricing":291,"tiers":420},"embedded-editor-tab-title","Embedded Editor Browser Tab Title","The browser tab title updates to reflect the active Node-RED canvas tab when working in the embedded editor.",[418],{"url":419,"release":403},"\u002Fchangelog\u002F2026\u002F03\u002Fembedded-editor-tab-title\u002F",{"edge":253,"hub":253,"fleet":253},{"id":422,"title":423,"features":424},"deploy","Deploy",[425,431,440,446,452,458,464,470,475],{"id":426,"title":427,"description":428,"docsLink":429,"tiers":430},"hosted-instances","Cloud Instances","Run Node-RED instances managed and hosted by FlowFuse.","\u002Fdocs\u002Fuser\u002Fintroduction\u002F#creating-a-node-red-instance",{"edge":253,"hub":253,"fleet":253},{"id":432,"title":433,"description":434,"docsLink":435,"changelog":436,"tiers":439},"edge-devices","Edge Instances","Deploy and mange your Node-RED instances on edge PLCs and gateways, with full visibility and control from the cloud.","\u002Fdocs\u002Fdevice-agent\u002Fintroduction\u002F",[437],{"url":438,"release":281},"\u002Fchangelog\u002F2026\u002F02\u002Fdevice-agent-nodejs-options\u002F",{"edge":253,"hub":291,"fleet":253},{"id":441,"title":442,"description":443,"docsLink":444,"tiers":445},"custom-hostnames","Custom Hostnames","Access your Node-RED application via your own domain name.","\u002Fdocs\u002Fuser\u002Fcustom-hostnames\u002F",{"edge":291,"hub":253,"fleet":291},{"id":447,"title":448,"description":449,"docsLink":450,"tiers":451},"mqtt-broker","MQTT Broker","Manage and create MQTT clients to transport data for efficient messaging and communication within your applications.","\u002Fdocs\u002Fuser\u002Fteambroker\u002F",{"edge":253,"hub":291,"fleet":253},{"id":453,"title":454,"description":455,"docsLink":456,"showOnPricing":291,"tiers":457},"project-nodes","Project Nodes aka seamless project comms","FlowFuse Project Nodes enable the passing of data and messages between your Node-RED projects.","\u002Fdocs\u002Fuser\u002Fprojectnodes\u002F",{"edge":253,"hub":253,"fleet":253},{"id":459,"title":460,"description":461,"docsLink":462,"tiers":463},"devops-pipelines","DevOps Pipelines","Set up different environments for development, testing, and production Node-RED instances to support a full software delivery lifecycle.","\u002Fdocs\u002Fuser\u002Fdevops-pipelines\u002F",{"edge":253,"hub":253,"fleet":253},{"id":465,"title":466,"description":467,"docsLink":468,"tiers":469},"git-integration","Git Integration","Back up your flows to a remote Git repository through a DevOps Pipeline. Supports GitHub and Azure DevOps repositories.","\u002Fdocs\u002Fuser\u002Fdevops-pipelines\u002F#git-repository-stage",{"edge":291,"hub":253,"fleet":291},{"id":471,"title":472,"description":473,"docsLink":468,"subfeature":253,"showOnPricing":291,"tiers":474},"git-integration-github","GitHub","Push and pull snapshots to GitHub repositories through DevOps Pipeline Git Stages.",{"edge":291,"hub":253,"fleet":291},{"id":476,"title":477,"description":478,"docsLink":468,"changelog":479,"subfeature":253,"showOnPricing":291,"tiers":482},"git-integration-azure","Azure DevOps","Push and pull snapshots to Azure DevOps repositories through DevOps Pipeline Git Stages.",[480],{"url":481,"release":403},"\u002Fchangelog\u002F2026\u002F03\u002Fazure-dev-ops-gitops\u002F",{"edge":291,"hub":253,"fleet":291},{"id":484,"title":485,"features":486},"operate-maintain","Operate & Maintain",[487,493,499,504,512,516,520,525,531,537,542,548,552,556],{"id":488,"title":489,"description":490,"docsLink":491,"tiers":492},"snapshots","Snapshots & Version History","Automatic snapshots on remote devices and hosted instances, plus a full version history timeline so you can roll back to any prior state.","\u002Fdocs\u002Fuser\u002Fsnapshots\u002F",{"edge":253,"hub":253,"fleet":253},{"id":494,"title":495,"description":496,"docsLink":497,"subfeature":253,"showOnPricing":291,"tiers":498},"auto-snapshot-remote","Auto Snapshot (Remote)","Automatically capture a snapshot every time a remote instance is deployed, so you always have a recoverable history of what was running on each device.","\u002Fdocs\u002Fuser\u002Fsnapshots\u002F#auto-snapshots",{"edge":253,"hub":253,"fleet":253},{"id":500,"title":501,"description":502,"docsLink":497,"subfeature":253,"showOnPricing":291,"tiers":503},"auto-snapshot-hosted","Auto Snapshot (Hosted)","Automatically capture a snapshot every time a hosted instance is deployed, so you always have a recoverable history of what was running.",{"edge":253,"hub":253,"fleet":253},{"id":505,"title":506,"description":507,"changelog":508,"subfeature":253,"showOnPricing":291,"tiers":511},"snapshot-comparison","Snapshot Comparison","Compare two snapshots side-by-side with a navigable diff view. Step through every changed, added, or deleted node and see property and code diffs.",[509],{"url":510,"release":403},"\u002Fchangelog\u002F2026\u002F04\u002Fsnapshot-diff-viewer\u002F",{"edge":253,"hub":253,"fleet":253},{"id":513,"title":514,"subfeature":253,"showOnPricing":291,"tiers":515},"version-history-timeline","Version History Timeline",{"edge":253,"hub":253,"fleet":253},{"id":517,"title":518,"tiers":519},"unlimited-workflow-executions","Unlimited Workflow Executions",{"edge":253,"hub":253,"fleet":253},{"id":521,"title":522,"description":523,"tiers":524},"device-fleet-updates","Device Fleet Updates","Connect to edge devices to quickly assess and update logic. Debug one device and roll out improvements to your fleet in minutes, securely without requiring full device access for your whole organisation.",{"edge":253,"hub":291,"fleet":253},{"id":526,"title":527,"description":528,"docsLink":529,"tiers":530},"device-group-management","Device Group Management","Logically group devices assigned to an application and integrate device groups into your DevOps Pipeline for coordinated fleet updates.","\u002Fdocs\u002Fuser\u002Fdevice-groups\u002F",{"edge":253,"hub":291,"fleet":253},{"id":532,"title":533,"description":534,"docsLink":535,"tiers":536},"high-availability","High Availability","Leverage horizontal scaling for reliable and scalable processing of your data through Node-RED.","\u002Fdocs\u002Fuser\u002Fhigh-availability\u002F",{"edge":291,"hub":253,"fleet":291},{"id":538,"title":539,"description":540,"tiers":541},"performance-monitoring","Performance Monitoring & Alerts","Track CPU, memory, and event loop performance across your instances and devices, with email alerts when something needs your attention.",{"edge":253,"hub":253,"fleet":253},{"id":543,"title":544,"description":545,"docsLink":546,"subfeature":253,"showOnPricing":291,"tiers":547},"instance-monitoring","Instance Monitoring","Enable alerts to be sent via email when your Node-RED instances encounter issues.","\u002Fdocs\u002Fuser\u002Finstance-settings\u002F#alerts",{"edge":253,"hub":253,"fleet":253},{"id":549,"title":550,"subfeature":253,"showOnPricing":291,"tiers":551},"email-alerts","Email Alerts",{"edge":253,"hub":253,"fleet":253},{"id":553,"title":554,"showOnPricing":291,"tiers":555},"api-debug-length-limit","API\u002FDebug Length Limit",{"edge":253,"hub":253,"fleet":253},{"id":557,"title":558,"tiers":559},"protected-instances","Protected Instances",{"edge":291,"hub":253,"fleet":291},{"id":561,"title":562,"features":563},"govern-secure","Govern and Secure",[564,573,579,585,590,596,602,608,616,622,628,634],{"id":565,"title":566,"description":567,"docsLink":568,"changelog":569,"tiers":572},"single-sign-on","Single Sign-On (SSO)","Configure FlowFuse to work with your own SSO provider, allowing users to access FlowFuse with a single set of login credentials.","\u002Fdocs\u002Fadmin\u002Fsso\u002F",[570],{"url":571,"release":344},"\u002Fchangelog\u002F2026\u002F07\u002Fapplication-sso-groups\u002F",{"edge":253,"hub":253,"fleet":253},{"id":574,"title":575,"description":576,"docsLink":577,"tiers":578},"two-factor-authentication","Two-Factor Authentication","Two-factor authentication adds an extra layer of security to your FlowFuse account.","\u002Fdocs\u002Fuser\u002Fuser-settings\u002F#two-factor-authentication",{"edge":253,"hub":253,"fleet":253},{"id":580,"title":581,"description":582,"docsLink":583,"tiers":584},"certified-nodes-it","Certified Nodes - IT","IT certified node bundle includes: Redis, MQTT, HTTP Request, AI nodes (Gemini, Claude, ChatGPT, Ollama), MCP Server","\u002Fblog\u002F2025\u002F07\u002Fcertified-nodes-v2\u002F",{"edge":291,"hub":253,"fleet":253},{"id":586,"title":587,"description":588,"tiers":589},"certified-nodes-ot","Certified OT Connections - OPC-UA, Modbus, etc.","OT certified node bundle includes: OPC-UA, Modbus TCP & RTU, RTSP, EtherNet\u002FIP, AI nodes (Gemini, Claude, ChatGPT, Ollama), MCP Server",{"edge":253,"hub":291,"fleet":291},{"id":591,"title":592,"description":593,"docsLink":594,"tiers":595},"audit-log","Audit Log","Keep track of everything going on in your Node-RED instances and FlowFuse. Audit Logs provide details on what actions have taken place, when they happened, and who did them.","\u002Fdocs\u002Fuser\u002Flogs\u002F#audit-log",{"edge":253,"hub":253,"fleet":253},{"id":597,"title":598,"description":599,"docsLink":600,"tiers":601},"role-based-access-control","Role-Based Access Control","Control who can do what at both the team and application level, from viewers to admins.","\u002Fdocs\u002Fuser\u002Frole-based-access-control\u002F",{"edge":253,"hub":253,"fleet":253},{"id":603,"title":604,"description":605,"docsLink":606,"subfeature":253,"showOnPricing":291,"tiers":607},"application-level-rbac","Application-Level RBAC","Fine-grained access control per application, allowing team members to have different permission levels across different applications without requiring separate teams.","\u002Fdocs\u002Fuser\u002Frole-based-access-control\u002F#application-level-rbac",{"edge":253,"hub":253,"fleet":253},{"id":609,"title":610,"description":611,"changelog":612,"subfeature":253,"showOnPricing":291,"tiers":615},"scoped-personal-access-tokens","Scoped Personal Access Tokens","Restrict a Personal Access Token to specific teams, limit it to read-only operations, or control whether it carries admin privileges.",[613],{"url":614,"release":344},"\u002Fchangelog\u002F2026\u002F07\u002Fscoped-pats\u002F",{"edge":253,"hub":253,"fleet":253},{"id":617,"title":618,"description":619,"docsLink":620,"showOnPricing":291,"tiers":621},"team-members","Team Members","Invite multiple team members to collaborate on the same Node-RED flows.","\u002Fdocs\u002Fuser\u002Fteam\u002F#teams",{"edge":253,"hub":253,"fleet":253},{"id":623,"title":624,"description":625,"docsLink":626,"showOnPricing":291,"tiers":627},"endpoint-security","Endpoint Security","Secure HTTP endpoints for hosted Node-RED instances using FlowFuse credentials.","\u002Fdocs\u002Fuser\u002Finstance-settings\u002F#security",{"edge":253,"hub":253,"fleet":253},{"id":629,"title":630,"description":631,"docsLink":632,"tiers":633},"baa-for-hipaa","BAA for HIPAA","FlowFuse can sign a Business Associate Agreement to ensure proper safeguarding of protected health information handled on your behalf.","\u002Fhandbook\u002Fsales\u002Fsubscription-agreement-1.5\u002F",{"edge":291,"hub":253,"fleet":291},{"id":635,"title":636,"description":637,"tiers":638},"sbom","Software Bill of Materials","A complete list of all software components used in your Node-RED instances and hosted applications, including version numbers and license information.",{"edge":291,"hub":253,"fleet":291},{"id":640,"title":641,"features":642},"support","Support",[643,648,652],{"id":644,"title":645,"docsLink":646,"tiers":647},"installation-support","Installation Support","\u002Fdocs\u002Finstall\u002Fintroduction\u002F#do-you-need-help-installation-service",{"edge":253,"hub":253,"fleet":253},{"id":649,"title":650,"showOnPricing":291,"tiers":651},"live-chat-support","Live Chat Support",{"edge":253,"hub":253,"fleet":253},{"id":653,"title":654,"docsLink":655,"tiers":656},"enterprise-support","Enterprise Support","\u002Fdocs\u002Fpremium-support\u002F",{"edge":253,"hub":253,"fleet":253},"feature-catalog","0AnkhTIPCECCwP9NmbTWP5HvRYx4FTSao4lG93-HaWM",[660,663,666,669,672,675,677,680,683,686,689,691,694,697,700,703,706,709,712,715,718,721,724,727,730,733,736,739,742,745,748,751,754,757,760,763,766,769,772,775,778,781,784,787,790,793,796,799,802,804,807,810,813,816,819,822,825,827,830,833,836,839,842,844,847,850,853,856,859,862,865,868,871,874,876,879,882,885,888,891,894,897,900,903,906,909,912,915,918,920,923,926,929,932,935,938,941,944,947,950,953,956,959,962,965,968,971,974,976,979,982,985,988,991,994,997,999,1002,1005,1008,1011,1014,1017,1020,1023,1026,1029,1032,1035,1038,1041,1044,1047,1050,1053,1056,1059,1062,1065,1068,1071,1074,1077,1080,1083,1086,1089,1092,1095,1098,1101,1104,1107,1110,1113,1116,1119,1122,1125,1128,1131,1134,1137,1140,1143,1146,1149,1151,1154,1157,1160,1163,1166,1169,1172,1175,1178,1181,1184,1187,1190],{"path":661,"title":662},"\u002Fchangelog\u002F2023\u002F09\u002Fcustom-node-support","Custom Node Support",{"path":664,"title":665},"\u002Fchangelog\u002F2023\u002F09\u002Fdevops-actions","DevOps Pipeline with action selection",{"path":667,"title":668},"\u002Fchangelog\u002F2023\u002F09\u002Fintroduction-enterprise-tier","Introducing the Enterprise Tier",{"path":670,"title":671},"\u002Fchangelog\u002F2023\u002F09\u002Fpipeline-api","API Endpoint for DevOps Pipeline",{"path":673,"title":674},"\u002Fchangelog\u002F2023\u002F09\u002Fsnapshots-devices","Usability improvements to Device Management",{"path":676,"title":384},"\u002Fchangelog\u002F2023\u002F10\u002Fblueprints",{"path":678,"title":679},"\u002Fchangelog\u002F2023\u002F10\u002Fcertified-nodes","Certified Nodes",{"path":681,"title":682},"\u002Fchangelog\u002F2023\u002F10\u002Fdevice-snapshot-selection","Enhanced Snapshot Selection",{"path":684,"title":685},"\u002Fchangelog\u002F2023\u002F10\u002Fpath-bug-fix","Device Agent path bug fix",{"path":687,"title":688},"\u002Fchangelog\u002F2023\u002F10\u002Fresource-alerts","Resource Monitoring in Audit Log",{"path":690,"title":575},"\u002Fchangelog\u002F2023\u002F11\u002F2fa",{"path":692,"title":693},"\u002Fchangelog\u002F2023\u002F11\u002Fdefault-editor","Device Editor enabled by default",{"path":695,"title":696},"\u002Fchangelog\u002F2023\u002F11\u002Fdevices-in-pipelines","Devices in DevOps Pipelines",{"path":698,"title":699},"\u002Fchangelog\u002F2023\u002F11\u002Fproject-nodes-devices","Project Nodes for Devices",{"path":701,"title":702},"\u002Fchangelog\u002F2023\u002F12\u002Fbilling","No Credit Card required for billing",{"path":704,"title":705},"\u002Fchangelog\u002F2023\u002F12\u002Fblueprint-selection","Blueprint Selection Update",{"path":707,"title":708},"\u002Fchangelog\u002F2023\u002F12\u002Fdevice-groups","Device Groups",{"path":710,"title":711},"\u002Fchangelog\u002F2023\u002F12\u002Femail-alerting-node-red-crash","Email Alerts for Audit Log Events",{"path":713,"title":714},"\u002Fchangelog\u002F2023\u002F12\u002Fnode-red-updated","Node-RED 3.1.3 now available",{"path":716,"title":717},"\u002Fchangelog\u002F2024\u002F01\u002Fdevice-audit-log","Introducing the Device Auditlog Feature",{"path":719,"title":720},"\u002Fchangelog\u002F2024\u002F01\u002Fdevice-groups-snapshot","Device Groups - Automatic snapshot assignment",{"path":722,"title":723},"\u002Fchangelog\u002F2024\u002F01\u002Ffleet-mode","Renaming \"Default Device Mode\" to \"Fleet Mode\"",{"path":725,"title":726},"\u002Fchangelog\u002F2024\u002F01\u002Fhelm-v2","Helm Chart v2.0",{"path":728,"title":729},"\u002Fchangelog\u002F2024\u002F01\u002Fnew-blueprints","New Blueprints added",{"path":731,"title":732},"\u002Fchangelog\u002F2024\u002F01\u002Fsecurity-updates","Security Updates",{"path":734,"title":735},"\u002Fchangelog\u002F2024\u002F01\u002Fsso-team-membership","Managing Team Membership via SSO",{"path":737,"title":738},"\u002Fchangelog\u002F2024\u002F01\u002Fstreamlined-device-assignment","Streamlined Device assignment",{"path":740,"title":741},"\u002Fchangelog\u002F2024\u002F02\u002Fdevice-auto-snapshot","Device Auto Snapshots",{"path":743,"title":744},"\u002Fchangelog\u002F2024\u002F02\u002Fdevice-instance-audit-logs","Device Instance Audit Logging",{"path":746,"title":747},"\u002Fchangelog\u002F2024\u002F02\u002Fdevice-onboarding-improvements","Device Onboarding Improvements",{"path":749,"title":750},"\u002Fchangelog\u002F2024\u002F02\u002Fdevice-pricing-change","Pricing change for Devices",{"path":752,"title":753},"\u002Fchangelog\u002F2024\u002F02\u002Finstance-auto-snapshots","Instance Auto Snapshots",{"path":755,"title":756},"\u002Fchangelog\u002F2024\u002F02\u002Fpostgresql-upgrade","PostgreSQL Version update",{"path":758,"title":759},"\u002Fchangelog\u002F2024\u002F03\u002Fbearer-token-authentication","Bearer Token Authentication for Node-RED Instances",{"path":761,"title":762},"\u002Fchangelog\u002F2024\u002F03\u002Finstance-protection-mode","Instance Protection Mode",{"path":764,"title":765},"\u002Fchangelog\u002F2024\u002F03\u002Flimits-debug-payload","Configure HTTP Payload and Debug Message size",{"path":767,"title":768},"\u002Fchangelog\u002F2024\u002F03\u002Frestart-devices-remotly","Remote Device Restart",{"path":770,"title":771},"\u002Fchangelog\u002F2024\u002F04\u002Fcustom-nodes-on-devices","Custom Nodes Support on Devices",{"path":773,"title":774},"\u002Fchangelog\u002F2024\u002F04\u002Fdevice-auto-snapshot","Direct Dashboard Access",{"path":776,"title":777},"\u002Fchangelog\u002F2024\u002F04\u002Fimproving-device-groups","Improving Device Groups",{"path":779,"title":780},"\u002Fchangelog\u002F2024\u002F04\u002Fpricing-change","Pricing change Enterprise & Teams Tier",{"path":782,"title":783},"\u002Fchangelog\u002F2024\u002F04\u002Ftougher-rate-limiting","Tougher Rate Limiting on Public Routes",{"path":785,"title":786},"\u002Fchangelog\u002F2024\u002F05\u002Finstance-healthcheck","Customizing instance health-check settings",{"path":788,"title":789},"\u002Fchangelog\u002F2024\u002F05\u002Flibrary-blueprints","Blueprints added to Library",{"path":791,"title":792},"\u002Fchangelog\u002F2024\u002F05\u002Flibrary-flowviewer","Team Library - Flow Viewer",{"path":794,"title":795},"\u002Fchangelog\u002F2024\u002F05\u002Fmanaging-node-red-version-on-devices","Managing Node-RED versions on Devices",{"path":797,"title":798},"\u002Fchangelog\u002F2024\u002F05\u002Fsnapshot-improvements","Snapshot Improvements",{"path":800,"title":801},"\u002Fchangelog\u002F2024\u002F05\u002Fsnapshot-improvements-pt3","Snapshot Upload",{"path":803,"title":801},"\u002Fchangelog\u002F2024\u002F05\u002Fsnapshot-upload",{"path":805,"title":806},"\u002Fchangelog\u002F2024\u002F06\u002Fdevice-agent-proxy-support","Running the Device Agent behind an HTTP proxy",{"path":808,"title":809},"\u002Fchangelog\u002F2024\u002F06\u002Flibrary-blueprints","Custom hostnames for your instances",{"path":811,"title":812},"\u002Fchangelog\u002F2024\u002F06\u002Fmultiline-env-vars","Multi-line Environment Variables",{"path":814,"title":815},"\u002Fchangelog\u002F2024\u002F06\u002Fsnapshot-flow-compare","Compare Snapshots flows",{"path":817,"title":818},"\u002Fchangelog\u002F2024\u002F07\u002Fapplications-search","Applications Search",{"path":820,"title":821},"\u002Fchangelog\u002F2024\u002F07\u002Fdevice-group-clear-snapshot","Device Groups Snapshots",{"path":823,"title":824},"\u002Fchangelog\u002F2024\u002F07\u002Fdevice-management-bulk-delete","Managing devices",{"path":826,"title":824},"\u002Fchangelog\u002F2024\u002F07\u002Fdevice-management-bulk-move",{"path":828,"title":829},"\u002Fchangelog\u002F2024\u002F07\u002Fedit-snapshots","Edit Snapshots",{"path":831,"title":832},"\u002Fchangelog\u002F2024\u002F07\u002Fflowfuse-assistant","The FlowFuse Expert",{"path":834,"title":835},"\u002Fchangelog\u002F2024\u002F07\u002Fflowfuse-assistant-json","FlowFuse Expert Writes JSON",{"path":837,"title":838},"\u002Fchangelog\u002F2024\u002F07\u002Fimmersive-editor","Immersive Editor Experience",{"path":840,"title":841},"\u002Fchangelog\u002F2024\u002F07\u002Fnotifications-inbox","Notifications Inbox",{"path":843,"title":841},"\u002Fchangelog\u002F2024\u002F07\u002Fnotifications-update",{"path":845,"title":846},"\u002Fchangelog\u002F2024\u002F07\u002Fpersistent-storage","Persistent Storage on FlowFuse Cloud",{"path":848,"title":849},"\u002Fchangelog\u002F2024\u002F07\u002Fsso","Single Sign On Updates",{"path":851,"title":852},"\u002Fchangelog\u002F2024\u002F08\u002Fbill-of-materials","Bill of Materials",{"path":854,"title":855},"\u002Fchangelog\u002F2024\u002F08\u002Fenterprise-license-update","Enforcing Enterprise Restrictions",{"path":857,"title":858},"\u002Fchangelog\u002F2024\u002F08\u002Fldap-sso-groups","LDAP Single Sign On Updates",{"path":860,"title":861},"\u002Fchangelog\u002F2024\u002F08\u002Fstatic-file-service-navigation-visibility","Static File Service Navigation and Visibility",{"path":863,"title":864},"\u002Fchangelog\u002F2024\u002F10\u002Fdevice-group-env-vars","Environment Variables for your Device Groups",{"path":866,"title":867},"\u002Fchangelog\u002F2024\u002F10\u002Fmqtt-service","MQTT Broker Service",{"path":869,"title":870},"\u002Fchangelog\u002F2024\u002F10\u002Fnotifications-bulk-actions","Managing Notifications",{"path":872,"title":873},"\u002Fchangelog\u002F2024\u002F10\u002Fsnapshot-download-upload-options","Snapshot Upload and Download Improvements",{"path":875,"title":514},"\u002Fchangelog\u002F2024\u002F10\u002Fversion-history-timeline",{"path":877,"title":878},"\u002Fchangelog\u002F2024\u002F11\u002Faudit-log-hierarchy","Audit logs show hierarchical events",{"path":880,"title":881},"\u002Fchangelog\u002F2024\u002F11\u002Fdevice-agent-release","Device Agent 3.0 released",{"path":883,"title":884},"\u002Fchangelog\u002F2024\u002F11\u002Fmqtt-topic-hierarchy","MQTT Topic Hierarchy view",{"path":886,"title":887},"\u002Fchangelog\u002F2024\u002F11\u002Fteam-search","Team-wide search",{"path":889,"title":890},"\u002Fchangelog\u002F2024\u002F12\u002Fdashboad-iframe","Allow Dashboards to be embedded in iFrames",{"path":892,"title":893},"\u002Fchangelog\u002F2024\u002F12\u002Fdevice-editor-cache","Device Editor Access Speed Up",{"path":895,"title":896},"\u002Fchangelog\u002F2024\u002F12\u002Fteam-bom-timeline","Team BOM and Pipeline Views",{"path":898,"title":899},"\u002Fchangelog\u002F2025\u002F01\u002Ffree-tier-onboarding","New Onboarding Tour for Free Tier Users",{"path":901,"title":902},"\u002Fchangelog\u002F2025\u002F01\u002Fhidden-env-vars","Hidden Environment Variables",{"path":904,"title":905},"\u002Fchangelog\u002F2025\u002F01\u002Fimproved-diagnostics","Improved Diagnostics",{"path":907,"title":908},"\u002Fchangelog\u002F2025\u002F01\u002Fteam-level-groups","Team level view of Groups",{"path":910,"title":911},"\u002Fchangelog\u002F2025\u002F02\u002Fadditional-device-version-history-events","New Remote Instances Version History Events",{"path":913,"title":914},"\u002Fchangelog\u002F2025\u002F02\u002Fbroker-error-feedback","Improved Broker Connection Feedback",{"path":916,"title":917},"\u002Fchangelog\u002F2025\u002F02\u002Fdevice-agent-updates","FlowFuse User Authentication on Remote Instances",{"path":919,"title":514},"\u002Fchangelog\u002F2025\u002F02\u002Fdevice-version-history-timeline",{"path":921,"title":922},"\u002Fchangelog\u002F2025\u002F02\u002Fexternal-brokers","External MQTT Brokers",{"path":924,"title":925},"\u002Fchangelog\u002F2025\u002F02\u002Fmqtt-schema-suggestions","MQTT Smart Schema Suggestions",{"path":927,"title":928},"\u002Fchangelog\u002F2025\u002F02\u002Fresend-and-extend-team-invitation-expiration","Re-send Team Invitations",{"path":930,"title":931},"\u002Fchangelog\u002F2025\u002F02\u002Fschema-docs","Personalized Schema Documentation",{"path":933,"title":934},"\u002Fchangelog\u002F2025\u002F02\u002Ftopic-hierarchy-search","Search & Filter for Topic Hierarchy List",{"path":936,"title":937},"\u002Fchangelog\u002F2025\u002F03\u002Fcontainer-tags","Changes to tags for flowfuse\u002Fnode-red",{"path":939,"title":940},"\u002Fchangelog\u002F2025\u002F03\u002Fdevice-groups","Multiple Device Groups in a pipeline",{"path":942,"title":943},"\u002Fchangelog\u002F2025\u002F03\u002Fdevice-local-login","Local Login for Remote Instances",{"path":945,"title":946},"\u002Fchangelog\u002F2025\u002F03\u002Ffree-tier","Free Tier now more accessible to all",{"path":948,"title":949},"\u002Fchangelog\u002F2025\u002F03\u002Fresource-notifications","Resource Alerts",{"path":951,"title":952},"\u002Fchangelog\u002F2025\u002F03\u002Fsnapshot-filter","Filtering Snapshots",{"path":954,"title":955},"\u002Fchangelog\u002F2025\u002F03\u002Fteam-npm-registry","NPM Package Hosting",{"path":957,"title":958},"\u002Fchangelog\u002F2025\u002F03\u002Ftopic-deletion","MQTT Topic Management",{"path":960,"title":961},"\u002Fchangelog\u002F2025\u002F04\u002Fdevice-provisioning","Remote Instance Provisioning",{"path":963,"title":964},"\u002Fchangelog\u002F2025\u002F04\u002Fgit-integration","Git Integration with Pipelines",{"path":966,"title":967},"\u002Fchangelog\u002F2025\u002F04\u002Finstance-log-browsing","Better Node-RED log handling",{"path":969,"title":970},"\u002Fchangelog\u002F2025\u002F05\u002Fimport-node-red-flows","Import Node-RED Flows During Remote Instance Setup",{"path":972,"title":973},"\u002Fchangelog\u002F2025\u002F06\u002Fflowfuse-assistant","FlowFuse Expert just got smarter",{"path":975,"title":973},"\u002Fchangelog\u002F2025\u002F06\u002Fflowfuse-assistant-2",{"path":977,"title":978},"\u002Fchangelog\u002F2025\u002F06\u002Fgit-integration","Pulling snapshots from Git with Pipelines",{"path":980,"title":981},"\u002Fchangelog\u002F2025\u002F06\u002Finstance-performance-memory","Memory Metrics in Instance Performance View",{"path":983,"title":984},"\u002Fchangelog\u002F2025\u002F06\u002Fnew-home-page","Introducing the New Home Page Experience",{"path":986,"title":987},"\u002Fchangelog\u002F2025\u002F06\u002Fteam-performance","Team Performance Feature",{"path":989,"title":990},"\u002Fchangelog\u002F2025\u002F06\u002Fteam-performance-view","Instance Performance View",{"path":992,"title":993},"\u002Fchangelog\u002F2025\u002F06\u002Fui-refresh","Navigation UI Refresh",{"path":995,"title":996},"\u002Fchangelog\u002F2025\u002F07\u002Fbrowse-node-red-flows","Browse for Node-RED Flows During Remote Instance Setup",{"path":998,"title":338},"\u002Fchangelog\u002F2025\u002F07\u002Fflowfuse-tables",{"path":1000,"title":1001},"\u002Fchangelog\u002F2025\u002F07\u002Fimport-blueprints","Import blueprints directly into your existing instances",{"path":1003,"title":1004},"\u002Fchangelog\u002F2025\u002F07\u002Fsimplified-applications-overview","Simplified Applications Page with Summary Tiles",{"path":1006,"title":1007},"\u002Fchangelog\u002F2025\u002F07\u002Fsmart-suggestions","Smart Suggestions",{"path":1009,"title":1010},"\u002Fchangelog\u002F2025\u002F07\u002Fteam-to-pro-plan-rename","Team Plan Renamed to Pro Plan",{"path":1012,"title":1013},"\u002Fchangelog\u002F2025\u002F08\u002Fai-generated-snapshot-descriptions-hosted","Generate snapshot descriptions with AI",{"path":1015,"title":1016},"\u002Fchangelog\u002F2025\u002F08\u002Fai-generated-snapshot-descriptions-remote","AI Snapshot Descriptions Now Work with Remote Instances",{"path":1018,"title":1019},"\u002Fchangelog\u002F2025\u002F08\u002Fdevice-performance","FlowFuse Remote Instance Performance Data",{"path":1021,"title":1022},"\u002Fchangelog\u002F2025\u002F08\u002Fdirect-sso","Direct SSO Login",{"path":1024,"title":1025},"\u002Fchangelog\u002F2025\u002F08\u002Fflowfuse-assistant","FlowFuse Expert documents your flows",{"path":1027,"title":1028},"\u002Fchangelog\u002F2025\u002F08\u002Fflowfuse-mqtt","FlowFuse MQTT",{"path":1030,"title":1031},"\u002Fchangelog\u002F2025\u002F08\u002Fhttp-cors","Configure HTTP CORS",{"path":1033,"title":1034},"\u002Fchangelog\u002F2025\u002F08\u002Fsubflow-export","Export SubFlow as Node-RED module",{"path":1036,"title":1037},"\u002Fchangelog\u002F2025\u002F08\u002Ftables-assistant","FlowFuse Tables with a little help from the Assistant",{"path":1039,"title":1040},"\u002Fchangelog\u002F2025\u002F09\u002Fexpose-saml-groups-to-dashboard","Allow SSO groups to be shared with the Node-RED Dashboard",{"path":1042,"title":1043},"\u002Fchangelog\u002F2025\u002F09\u002Finline-assist","FlowFuse Expert can help you write code",{"path":1045,"title":1046},"\u002Fchangelog\u002F2025\u002F09\u002Fretiring-flowforge-device-agent","No more @flowforge\u002Fflowforge-device-agent releases",{"path":1048,"title":1049},"\u002Fchangelog\u002F2025\u002F09\u002Frevised-instance-snapshot-ui","Streamlined Snapshot Management",{"path":1051,"title":1052},"\u002Fchangelog\u002F2025\u002F09\u002Fteam-broker-async-api","Capture Async API data from FlowFuse Team Broker",{"path":1054,"title":1055},"\u002Fchangelog\u002F2025\u002F10\u002Fapplication-level-rbac","Application-level access control for Enterprise teams",{"path":1057,"title":1058},"\u002Fchangelog\u002F2025\u002F10\u002Fbulk-device-group-assignment","Easier Access to Bulk Device Group Management",{"path":1060,"title":1061},"\u002Fchangelog\u002F2025\u002F10\u002Fduplicate-instances-across-applications","Duplicate Instances Across Different Applications",{"path":1063,"title":1064},"\u002Fchangelog\u002F2025\u002F10\u002Fimport-flows-on-instance-creation","Import flows during instance creation",{"path":1066,"title":1067},"\u002Fchangelog\u002F2025\u002F10\u002Fmcp-nodes","FlowFuse MCP Server Nodes",{"path":1069,"title":1070},"\u002Fchangelog\u002F2025\u002F10\u002Fonnx-nodes","FlowFuse AI Nodes",{"path":1072,"title":1073},"\u002Fchangelog\u002F2025\u002F10\u002Fsettings-page-device-group-management","Device Group Management from Settings Page",{"path":1075,"title":1076},"\u002Fchangelog\u002F2025\u002F11\u002Fff-expert-update","FlowFuse Expert Update",{"path":1078,"title":1079},"\u002Fchangelog\u002F2025\u002F11\u002Fminimum-nodejs-version","Node.js v20 Minimum Version Requirement",{"path":1081,"title":1082},"\u002Fchangelog\u002F2025\u002F11\u002Fsso-session","SSO control over Session life",{"path":1084,"title":1085},"\u002Fchangelog\u002F2025\u002F12\u002Fff-expert-mcp-insights","FlowFuse Expert: Now with MCP-Powered Insights",{"path":1087,"title":1088},"\u002Fchangelog\u002F2025\u002F12\u002Fscheduled-maintenance","Scheduled Maintenance Mode",{"path":1090,"title":1091},"\u002Fchangelog\u002F2026\u002F01\u002Fdevice-agent-containers","Device Agent Docker Containers updated",{"path":1093,"title":1094},"\u002Fchangelog\u002F2026\u002F01\u002Fff-expert-manage-palette","FlowFuse Expert: Enhanced Palette Integration",{"path":1096,"title":1097},"\u002Fchangelog\u002F2026\u002F01\u002Fff-expert-nr-actions","FlowFuse Expert: Integration with Node-RED",{"path":1099,"title":1100},"\u002Fchangelog\u002F2026\u002F01\u002Fff-expert-palette-queries","FlowFuse Expert: Palette Queries",{"path":1102,"title":1103},"\u002Fchangelog\u002F2026\u002F01\u002Fff-expert-select-flows","FlowFuse Expert: Ask about your flows",{"path":1105,"title":1106},"\u002Fchangelog\u002F2026\u002F01\u002Fmcp-rbacs","FlowFuse Expert: MCP-Powered Insights with RBACs",{"path":1108,"title":1109},"\u002Fchangelog\u002F2026\u002F01\u002Fmcp-security","FlowFuse Expert: MCP-Powered Insights",{"path":1111,"title":1112},"\u002Fchangelog\u002F2026\u002F02\u002Fdevice-agent-nodejs-options","Set Node.js Options for Remote Instances",{"path":1114,"title":1115},"\u002Fchangelog\u002F2026\u002F02\u002Fff-expert-debug-log-context","FlowFuse Expert: Helping you make sense of your debug log",{"path":1117,"title":1118},"\u002Fchangelog\u002F2026\u002F02\u002Fff-expert-update-banner","FlowFuse Expert: Never Miss an Update",{"path":1120,"title":1121},"\u002Fchangelog\u002F2026\u002F02\u002Fha-instance-rolling-restart","HA Hosted Instance Rolling Restart",{"path":1123,"title":1124},"\u002Fchangelog\u002F2026\u002F02\u002Fremote-instances-immersive-editor","Immersive Mode for Remote Instances",{"path":1126,"title":1127},"\u002Fchangelog\u002F2026\u002F02\u002Frestoring-snapshots-to-remote-instances","Restoring snapshots to developer-mode Remote Instances",{"path":1129,"title":1130},"\u002Fchangelog\u002F2026\u002F03\u002Fazure-dev-ops-gitops","Azure DevOps Pipeline support",{"path":1132,"title":1133},"\u002Fchangelog\u002F2026\u002F03\u002Fdeveloper-mode-in-immersive-editor","Developer Mode Now Accessible from the Immersive Editor",{"path":1135,"title":1136},"\u002Fchangelog\u002F2026\u002F03\u002Fembedded-editor-tab-title","Embedded Editor Now Shows Active Tab",{"path":1138,"title":1139},"\u002Fchangelog\u002F2026\u002F03\u002Fmarch-scheduled-maintenance","Updated: Upcoming Scheduled Server Maintenance on March 28th, 2026",{"path":1141,"title":1142},"\u002Fchangelog\u002F2026\u002F03\u002Fsnapshot-detail-modal-immersive-editor","View Snapshot Details in the Immersive Editor",{"path":1144,"title":1145},"\u002Fchangelog\u002F2026\u002F04\u002Fexpert-action-links","FlowFuse expert action links",{"path":1147,"title":1148},"\u002Fchangelog\u002F2026\u002F04\u002Fhosted-instance-url-env-var","Hosted Instances know their own URL",{"path":1150,"title":407},"\u002Fchangelog\u002F2026\u002F04\u002Fimmersive-editor-drawer",{"path":1152,"title":1153},"\u002Fchangelog\u002F2026\u002F04\u002Fsnapshot-diff-viewer","Richer snapshot comparison view",{"path":1155,"title":1156},"\u002Fchangelog\u002F2026\u002F05\u002Fai-opt-out","AI Feature Opt-Out for Teams",{"path":1158,"title":1159},"\u002Fchangelog\u002F2026\u002F05\u002Fexpert-application-building","FlowFuse Expert Builds Your Application",{"path":1161,"title":1162},"\u002Fchangelog\u002F2026\u002F05\u002Fsingle-sso-provider","Single SSO provider for all users",{"path":1164,"title":1165},"\u002Fchangelog\u002F2026\u002F06\u002Fdark-mode","Dark Mode",{"path":1167,"title":1168},"\u002Fchangelog\u002F2026\u002F06\u002Fdevice-agent-v4-released","Device Agent v4 released",{"path":1170,"title":1171},"\u002Fchangelog\u002F2026\u002F06\u002Fgeneric-git-server-support","Connect Pipelines to Any Git Server",{"path":1173,"title":1174},"\u002Fchangelog\u002F2026\u002F06\u002Fjuly-scheduled-maintenance","Updated: Upcoming Scheduled Server Maintenance on July 11th, 2026",{"path":1176,"title":1177},"\u002Fchangelog\u002F2026\u002F07\u002Fapplication-sso-groups","Application Roles from SSO Groups",{"path":1179,"title":1180},"\u002Fchangelog\u002F2026\u002F07\u002Fdevice-agent-onboarding","Getting started with FlowFuse straight from the terminal",{"path":1182,"title":1183},"\u002Fchangelog\u002F2026\u002F07\u002Fexpert-enhancements","FlowFuse Expert Enhancements",{"path":1185,"title":1186},"\u002Fchangelog\u002F2026\u002F07\u002Fexpert-tables-automation","FlowFuse Expert Can Now Work With Your Tables",{"path":1188,"title":1189},"\u002Fchangelog\u002F2026\u002F07\u002Fscoped-pats","Team Scoped Personal Access Tokens",{"path":1191,"title":1192},"\u002Fchangelog\u002F2026\u002F07\u002Fteam-and-application-dashboards","A Dedicated Home for Your Dashboards",[],1786105902378]