[{"data":1,"prerenderedAt":631},["ShallowReactive",2],{"docs-\u002Fdocs\u002Fuser\u002Fprojectnodes\u002F":3,"docs-nav":175},{"id":4,"title":5,"body":6,"description":16,"extension":164,"layout":165,"meta":166,"navGroup":165,"navGroupOrder":165,"navOrder":165,"navTitle":5,"navigation":167,"originalPath":168,"path":169,"redirect":165,"seo":170,"stem":171,"updated":172,"version":173,"__hash__":174},"docs\u002Fdocs\u002Fuser\u002Fprojectnodes.md","FlowFuse Project Nodes",{"type":7,"value":8,"toc":156},"minimark",[9,13,17,20,29,32,37,40,63,78,81,84,87,90,93,109,121,133,144,148],[10,11,5],"h1",{"id":12},"flowfuse-project-nodes",[14,15,16],"p",{},"Node-RED instances running within FlowFuse include a set of nodes that make it\nvery quick and easy to securely send and receive messages between different\ninstances in a team.",[14,18,19],{},"The nodes act in a similar way to the Node-RED Link nodes, but by allowing the\nlinks to extend between different instances, they open up a wide range of\npossibilities. Remote instances can take part too, with the limitations described\nbelow.",[14,21,22,23,28],{},"For example, a single Node-RED instance may contain a set of utility flows that\nyou want to reuse in other instances. Rather than copy the flows around, the\nProject Nodes allow you to easily call those flows and get the result back. The\nflows stay in one place, so a change to them applies to every caller at once,\nwith the trade-offs covered in ",[24,25,27],"a",{"href":26},"#limitations","Limitations",".",[14,30,31],{},"The project nodes are only available in the Enterprise tier of FlowFuse.",[33,34,36],"h3",{"id":35},"nodes","Nodes",[14,38,39],{},"There are three nodes in this collection:",[41,42,43,51,57],"ul",{},[44,45,46,50],"li",{},[47,48,49],"code",{},"Project In"," - listens for messages being broadcast by other Node-RED instances, or for\nmessages being sent just to this instance",[44,52,53,56],{},[47,54,55],{},"Project Out"," - sends messages to other Node-RED instances",[44,58,59,62],{},[47,60,61],{},"Project Call"," - sends messages to other Node-RED instances and waits for a response",[14,64,65,66,69,70,73,74,77],{},"The nodes send the whole ",[47,67,68],{},"msg"," object. Due to the way the nodes\nencode messages, there are some data types that do not get sent. For example,\nthe ",[47,71,72],{},"msg.req","\u002F",[47,75,76],{},"msg.res"," properties used by the core HTTP nodes will not be sent.\nInstead, they are temporarily removed from the message and re-attached when the\nmessage is received back.",[14,79,80],{},"Each node is configured with a topic on which it either sends or receives messages\non. This is similar in concept to MQTT topics - although the nodes do not currently\nsupport using MQTT wildcards in their topics.",[14,82,83],{},"The Project Out nodes can either broadcast messages on a topic to anyone listening,\nor they can send messages on a topic to a specific other instance.",[14,85,86],{},"The Project In nodes do the opposite - they can either listen for messages being\nbroadcast, or for messages sent directly to them.",[14,88,89],{},"The Project Call node can be used to send a message to another Project In node\nand then wait for a response, with a built-in timeout if it doesn't arrive.\nThe response is sent back using a Project Out node configured to respond to the call\nnode.",[33,91,27],{"id":92},"limitations",[14,94,95,99,100,102,103,105,106,108],{},[96,97,98],"strong",{},"Only hosted instances can be addressed directly."," The list of targets and sources\noffered by the nodes is the hosted instances in your team. This applies to the\n",[47,101,55],{}," node when sending to a specific instance, the ",[47,104,49],{}," node when\nlistening to a specific source, and the ",[47,107,61],{}," node's target.",[14,110,111,114,115,117,118,120],{},[96,112,113],{},"A remote instance can send, but cannot be sent to."," Flows on a remote instance can\nuse ",[47,116,55],{}," and ",[47,119,61],{}," to reach a hosted instance, and can receive\nbroadcasts. They cannot be named as a target, so shared logic being called by others\nhas to live on a hosted instance. A remote instance assigned to an application cannot\nreceive direct messages at all, and can only listen for broadcasts.",[14,122,123,126,127,129,130,132],{},[96,124,125],{},"Calls need the target to be up."," The ",[47,128,61],{}," node waits for the default\ntimeout of 30 seconds, then logs an error that can be caught with a Catch node. The\ntarget instance must be running and have a ",[47,131,49],{}," node listening on the same\ntopic. Because every call travels through the platform's broker, logic called this\nway is unavailable to a caller whose connection to the platform is down.",[14,134,135,138,139,143],{},[96,136,137],{},"Load is shared only in HA mode."," The instance holding the called flows serves every\ncaller from a single Node-RED runtime. In ",[24,140,142],{"href":141},"\u002Fdocs\u002Fuser\u002Fhigh-availability","High Availability mode","\nthe nodes automatically switch to MQTT shared subscriptions, so calls are distributed\nbetween the copies.",[33,145,147],{"id":146},"github","GitHub",[14,149,150,151,28],{},"The nodes are published under an Apache-2.0 license and available on ",[24,152,147],{"href":153,"rel":154},"https:\u002F\u002Fgithub.com\u002FFlowFuse\u002Fnr-project-nodes",[155],"nofollow",{"title":157,"searchDepth":158,"depth":158,"links":159},"",4,[160,162,163],{"id":35,"depth":161,"text":36},3,{"id":92,"depth":161,"text":27},{"id":146,"depth":161,"text":147},"md",null,{},true,"user\u002Fprojectnodes.md","\u002Fdocs\u002Fuser\u002Fprojectnodes",{"title":5,"description":16},"docs\u002Fuser\u002Fprojectnodes","2026-08-13 10:57:01 +0200","2.33.2","4MZ7AfV47LST-WYNfRCFVgv2_878YMf1BKTMQG6oj5g",[176,185,204,216],{"name":177,"order":178,"children":179},"FlowFuse User Manuals",1,[180],{"title":181,"path":182,"group":177,"groupOrder":178,"order":183,"children":184},"FlowFuse API","\u002Fdocs\u002Fapi",2,[],{"name":186,"order":158,"children":187},"FlowFuse Self-Hosted",[188,192],{"title":189,"path":190,"group":186,"groupOrder":158,"order":178,"children":191},"Quick Start","\u002Fdocs\u002Fquick-start",[],{"title":193,"path":194,"group":186,"groupOrder":158,"order":161,"children":195},"Upgrading FlowFuse","\u002Fdocs\u002Fupgrade",[196,200],{"title":197,"path":198,"order":165,"children":199},"Installing a license","\u002Fdocs\u002Fupgrade\u002Fopen-source-to-premium",[],{"title":201,"path":202,"order":165,"children":203},"Upgrading the Node-RED version","\u002Fdocs\u002Fupgrade\u002Fnodered-version",[],{"name":205,"order":206,"children":207},"Support",5,[208,212],{"title":209,"path":210,"group":205,"groupOrder":206,"order":161,"children":211},"Premium Support","\u002Fdocs\u002Fpremium-support",[],{"title":213,"path":214,"group":205,"groupOrder":206,"order":165,"children":215},"Debugging Node-RED issues","\u002Fdocs\u002Fdebugging",[],{"name":217,"order":165,"children":218},"Other",[219,267,279,358,407,426,500,511],{"title":220,"path":221,"order":165,"children":222},"admin","\u002Fdocs\u002Fadmin",[223,227,239,247,251,255,259,263],{"title":224,"path":225,"order":178,"children":226},"Administering FlowFuse","\u002Fdocs\u002Fadmin\u002Fintroduction",[],{"title":228,"path":229,"order":165,"children":230},"Configuring Single Sign-On (SSO)","\u002Fdocs\u002Fadmin\u002Fsso",[231,235],{"title":232,"path":233,"order":165,"children":234},"LDAP SSO","\u002Fdocs\u002Fadmin\u002Fsso\u002Fldap",[],{"title":236,"path":237,"order":165,"children":238},"SAML SSO","\u002Fdocs\u002Fadmin\u002Fsso\u002Fsaml",[],{"title":240,"path":241,"order":165,"children":242},"hardening","\u002Fdocs\u002Fadmin\u002Fhardening",[243],{"title":244,"path":245,"order":165,"children":246},"Kubernetes Hardening","\u002Fdocs\u002Fadmin\u002Fhardening\u002Fkubernetes",[],{"title":248,"path":249,"order":165,"children":250},"Monitoring","\u002Fdocs\u002Fadmin\u002Fmonitoring",[],{"title":252,"path":253,"order":165,"children":254},"Observability","\u002Fdocs\u002Fadmin\u002Fobservability",[],{"title":256,"path":257,"order":165,"children":258},"Soft Launch Enablement","\u002Fdocs\u002Fadmin\u002Ffeature-flags",[],{"title":260,"path":261,"order":165,"children":262},"Telemetry","\u002Fdocs\u002Fadmin\u002Ftelemetry",[],{"title":264,"path":265,"order":165,"children":266},"User Management","\u002Fdocs\u002Fadmin\u002Fuser-management",[],{"title":268,"path":269,"order":165,"children":270},"cloud","\u002Fdocs\u002Fcloud",[271,275],{"title":272,"path":273,"order":178,"children":274},"Introduction","\u002Fdocs\u002Fcloud\u002Fintroduction",[],{"title":276,"path":277,"order":165,"children":278},"FlowFuse Cloud Billing","\u002Fdocs\u002Fcloud\u002Fbilling",[],{"title":280,"path":281,"order":165,"children":282},"contribute","\u002Fdocs\u002Fcontribute",[283,286,290,294,298,302,306,314,350,354],{"title":272,"path":284,"order":178,"children":285},"\u002Fdocs\u002Fcontribute\u002Fintroduction",[],{"title":287,"path":288,"order":165,"children":289},"Adding Template Settings","\u002Fdocs\u002Fcontribute\u002Fadding-template-settings",[],{"title":291,"path":292,"order":165,"children":293},"API Design","\u002Fdocs\u002Fcontribute\u002Fapi-design",[],{"title":295,"path":296,"order":165,"children":297},"Creating debug stack containers","\u002Fdocs\u002Fcontribute\u002Fcreating-debug-stack-containers",[],{"title":299,"path":300,"order":165,"children":301},"Database migrations","\u002Fdocs\u002Fcontribute\u002Fdb-migrations",[],{"title":303,"path":304,"order":165,"children":305},"FlowFuse Architecture","\u002Fdocs\u002Fcontribute\u002Farchitecture",[],{"title":307,"path":308,"order":165,"children":309},"Local Install","\u002Fdocs\u002Fcontribute\u002Flocal",[310],{"title":311,"path":312,"order":165,"children":313},"Local Stacks","\u002Fdocs\u002Fcontribute\u002Flocal\u002Fstacks",[],{"title":315,"path":316,"order":165,"children":317},"State Flows","\u002Fdocs\u002Fcontribute\u002Fworkflows",[318,322,326,330,334,338,342,346],{"title":319,"path":320,"order":165,"children":321},"Device Editor","\u002Fdocs\u002Fcontribute\u002Fworkflows\u002Fdevice-editor",[],{"title":323,"path":324,"order":165,"children":325},"Instance states","\u002Fdocs\u002Fcontribute\u002Fworkflows\u002Fproject-states",[],{"title":327,"path":328,"order":165,"children":329},"Invite External Users","\u002Fdocs\u002Fcontribute\u002Fworkflows\u002Finvite-external-user",[],{"title":331,"path":332,"order":165,"children":333},"Project Creation","\u002Fdocs\u002Fcontribute\u002Fworkflows\u002Fproject-create",[],{"title":335,"path":336,"order":165,"children":337},"Reset Password Flow","\u002Fdocs\u002Fcontribute\u002Fworkflows\u002Fpassword-reset",[],{"title":339,"path":340,"order":165,"children":341},"Team creation Flow","\u002Fdocs\u002Fcontribute\u002Fworkflows\u002Fteam-create",[],{"title":343,"path":344,"order":165,"children":345},"User Login Flows","\u002Fdocs\u002Fcontribute\u002Fworkflows\u002Flogin",[],{"title":347,"path":348,"order":165,"children":349},"User Sign up Flow","\u002Fdocs\u002Fcontribute\u002Fworkflows\u002Fsignup",[],{"title":351,"path":352,"order":165,"children":353},"Team Broker","\u002Fdocs\u002Fcontribute\u002Fteam-broker",[],{"title":355,"path":356,"order":165,"children":357},"Working with Feature Flags","\u002Fdocs\u002Fcontribute\u002Ffeature-flags",[],{"title":359,"path":360,"order":165,"children":361},"device-agent","\u002Fdocs\u002Fdevice-agent",[362,366,369,373,377,382],{"title":363,"path":364,"order":178,"children":365},"FlowFuse Device Agent Introduction","\u002Fdocs\u002Fdevice-agent\u002Fintroduction",[],{"title":189,"path":367,"order":183,"children":368},"\u002Fdocs\u002Fdevice-agent\u002Fquickstart",[],{"title":370,"path":371,"order":158,"children":372},"Register your Remote Instance","\u002Fdocs\u002Fdevice-agent\u002Fregister",[],{"title":374,"path":375,"order":206,"children":376},"Running the Agent","\u002Fdocs\u002Fdevice-agent\u002Frunning",[],{"title":378,"path":379,"order":380,"children":381},"Deploying your Flows","\u002Fdocs\u002Fdevice-agent\u002Fdeploy",6,[],{"title":383,"path":384,"order":165,"children":385},"install","\u002Fdocs\u002Fdevice-agent\u002Finstall",[386,391,395,399,403],{"title":387,"path":388,"group":389,"order":178,"children":390},"Overview","\u002Fdocs\u002Fdevice-agent\u002Finstall\u002Foverview","DeviceAgentInstallation",[],{"title":392,"path":393,"group":389,"order":183,"children":394},"Device Agent Installer","\u002Fdocs\u002Fdevice-agent\u002Finstall\u002Fdevice-agent-installer",[],{"title":396,"path":397,"group":389,"order":161,"children":398},"Docker Install","\u002Fdocs\u002Fdevice-agent\u002Finstall\u002Fdocker",[],{"title":400,"path":401,"group":389,"order":158,"children":402},"Kubernetes Install","\u002Fdocs\u002Fdevice-agent\u002Finstall\u002Fkubernetes",[],{"title":404,"path":405,"group":389,"order":206,"children":406},"Manual Install with NPM","\u002Fdocs\u002Fdevice-agent\u002Finstall\u002Fmanual",[],{"title":408,"path":409,"order":165,"children":410},"hardware","\u002Fdocs\u002Fhardware",[411,414,418,422],{"title":387,"path":412,"order":178,"children":413},"\u002Fdocs\u002Fhardware\u002Fintroduction",[],{"title":415,"path":416,"order":183,"children":417},"ctrlX - Node-RED","\u002Fdocs\u002Fhardware\u002Fctrlx-node-red",[],{"title":419,"path":420,"order":161,"children":421},"ctrlX - Device Agent","\u002Fdocs\u002Fhardware\u002Fctrlx-device-agent",[],{"title":423,"path":424,"order":161,"children":425},"Raspberry Pi with Raspbian","\u002Fdocs\u002Fhardware\u002Fraspbian",[],{"title":383,"path":427,"order":165,"children":428},"\u002Fdocs\u002Finstall",[429,432,436,440,460,464,468,472],{"title":387,"path":430,"order":178,"children":431},"\u002Fdocs\u002Finstall\u002Fintroduction",[],{"title":433,"path":434,"order":165,"children":435},"Configuring FlowFuse","\u002Fdocs\u002Finstall\u002Fconfiguration",[],{"title":437,"path":438,"order":165,"children":439},"DNS Setup","\u002Fdocs\u002Finstall\u002Fdns-setup",[],{"title":441,"path":442,"order":165,"children":443},"Docker install","\u002Fdocs\u002Finstall\u002Fdocker",[444,448,452,456],{"title":445,"path":446,"order":165,"children":447},"Add Project Stacks on Docker","\u002Fdocs\u002Finstall\u002Fdocker\u002Fstacks",[],{"title":449,"path":450,"order":165,"children":451},"Docker Engine on Windows","\u002Fdocs\u002Finstall\u002Fdocker\u002Fwindows-docker-ce",[],{"title":453,"path":454,"order":165,"children":455},"Docker from AWS Market Place","\u002Fdocs\u002Finstall\u002Fdocker\u002Faws-marketplace",[],{"title":457,"path":458,"order":165,"children":459},"Docker on Digital Ocean","\u002Fdocs\u002Finstall\u002Fdocker\u002Fdigital-ocean",[],{"title":461,"path":462,"order":165,"children":463},"Email configuration","\u002Fdocs\u002Finstall\u002Femail-providers",[],{"title":465,"path":466,"order":165,"children":467},"First Run Setup","\u002Fdocs\u002Finstall\u002Ffirst-run",[],{"title":469,"path":470,"order":165,"children":471},"FlowFuse File Storage","\u002Fdocs\u002Finstall\u002Ffile-storage",[],{"title":473,"path":474,"order":165,"children":475},"Install FlowFuse on Kubernetes","\u002Fdocs\u002Finstall\u002Fkubernetes",[476,480,484,488,492,496],{"title":477,"path":478,"order":165,"children":479},"AWS EKS Installation","\u002Fdocs\u002Finstall\u002Fkubernetes\u002Faws",[],{"title":481,"path":482,"order":165,"children":483},"AWS EKS Installation with Terraform and Helm","\u002Fdocs\u002Finstall\u002Fkubernetes\u002Faws-terraform",[],{"title":485,"path":486,"order":165,"children":487},"Digital Ocean Kubernetes Installation","\u002Fdocs\u002Finstall\u002Fkubernetes\u002Fdigital-ocean",[],{"title":489,"path":490,"order":165,"children":491},"Ingress Controller Migration","\u002Fdocs\u002Finstall\u002Fkubernetes\u002Fingress-controller-migration",[],{"title":493,"path":494,"order":165,"children":495},"Kubernetes Project Stacks","\u002Fdocs\u002Finstall\u002Fkubernetes\u002Fstacks",[],{"title":497,"path":498,"order":165,"children":499},"OpenShift Installation","\u002Fdocs\u002Finstall\u002Fkubernetes\u002Fopenshift",[],{"title":501,"path":502,"order":165,"children":503},"migration","\u002Fdocs\u002Fmigration",[504,507],{"title":272,"path":505,"order":178,"children":506},"\u002Fdocs\u002Fmigration\u002Fintroduction",[],{"title":508,"path":509,"order":165,"children":510},"Node-RED Tools plugin","\u002Fdocs\u002Fmigration\u002Fnode-red-tools",[],{"title":512,"path":513,"order":165,"children":514},"user","\u002Fdocs\u002Fuser",[515,519,523,527,531,536,540,544,548,552,556,560,572,576,580,584,586,590,594,596,600,604,608,612,616,620,623,627],{"title":516,"path":517,"order":178,"children":518},"Getting Started","\u002Fdocs\u002Fuser\u002Fintroduction",[],{"title":520,"path":521,"order":178,"children":522},"Static asset service","\u002Fdocs\u002Fuser\u002Fstatic-asset-service",[],{"title":524,"path":525,"order":183,"children":526},"Bill of Materials","\u002Fdocs\u002Fuser\u002Fbill-of-materials",[],{"title":528,"path":529,"order":183,"children":530},"FlowFuse Concepts","\u002Fdocs\u002Fuser\u002Fconcepts",[],{"title":532,"path":533,"order":534,"children":535},"Instance States","\u002Fdocs\u002Fuser\u002Finstance-states",10,[],{"title":537,"path":538,"order":165,"children":539},"Changing the Stack","\u002Fdocs\u002Fuser\u002Fchangestack",[],{"title":541,"path":542,"order":165,"children":543},"Custom Hostnames","\u002Fdocs\u002Fuser\u002Fcustom-hostnames",[],{"title":545,"path":546,"order":165,"children":547},"Custom Node Packages","\u002Fdocs\u002Fuser\u002Fcustom-npm-packages",[],{"title":549,"path":550,"order":165,"children":551},"Dashboards","\u002Fdocs\u002Fuser\u002Fdashboards",[],{"title":553,"path":554,"order":165,"children":555},"DevOps Pipelines","\u002Fdocs\u002Fuser\u002Fdevops-pipelines",[],{"title":557,"path":558,"order":165,"children":559},"Environment Variables","\u002Fdocs\u002Fuser\u002Fenvvar",[],{"title":561,"path":562,"order":165,"children":563},"FlowFuse Expert","\u002Fdocs\u002Fuser\u002Fexpert",[564,568],{"title":565,"path":566,"order":165,"children":567},"AI in Node-RED","\u002Fdocs\u002Fuser\u002Fexpert\u002Fnode-red-embedded-ai",[],{"title":569,"path":570,"order":165,"children":571},"Chat Interface","\u002Fdocs\u002Fuser\u002Fexpert\u002Fchat",[],{"title":573,"path":574,"order":165,"children":575},"FlowFuse File Nodes","\u002Fdocs\u002Fuser\u002Ffilenodes",[],{"title":577,"path":578,"order":165,"children":579},"FlowFuse MQTT Nodes","\u002Fdocs\u002Fuser\u002Fmqtt-nodes",[],{"title":581,"path":582,"order":165,"children":583},"FlowFuse Persistent Context","\u002Fdocs\u002Fuser\u002Fpersistent-context",[],{"title":5,"path":169,"order":165,"children":585},[],{"title":587,"path":588,"order":165,"children":589},"FlowFuse Tables","\u002Fdocs\u002Fuser\u002Fff-tables",[],{"title":591,"path":592,"order":165,"children":593},"Groups","\u002Fdocs\u002Fuser\u002Fdevice-groups",[],{"title":142,"path":141,"order":165,"children":595},[],{"title":597,"path":598,"order":165,"children":599},"HTTP Access Tokens","\u002Fdocs\u002Fuser\u002Fhttp-access-tokens",[],{"title":601,"path":602,"order":165,"children":603},"Instance Settings","\u002Fdocs\u002Fuser\u002Finstance-settings",[],{"title":605,"path":606,"order":165,"children":607},"Logging","\u002Fdocs\u002Fuser\u002Flogs",[],{"title":609,"path":610,"order":165,"children":611},"Role-Based Access Control","\u002Fdocs\u002Fuser\u002Frole-based-access-control",[],{"title":613,"path":614,"order":165,"children":615},"Shared Team Library","\u002Fdocs\u002Fuser\u002Fshared-library",[],{"title":617,"path":618,"order":165,"children":619},"Snapshots","\u002Fdocs\u002Fuser\u002Fsnapshots",[],{"title":351,"path":621,"order":165,"children":622},"\u002Fdocs\u002Fuser\u002Fteambroker",[],{"title":624,"path":625,"order":165,"children":626},"Teams","\u002Fdocs\u002Fuser\u002Fteam",[],{"title":628,"path":629,"order":165,"children":630},"User Settings","\u002Fdocs\u002Fuser\u002Fuser-settings",[],1786614550932]