+
diff --git a/nuxt/content.config.ts b/nuxt/content.config.ts
index 798a23ee20..b433e940da 100644
--- a/nuxt/content.config.ts
+++ b/nuxt/content.config.ts
@@ -337,6 +337,94 @@ export default defineContentConfig({
linkHref: z.string(),
linkSuffix: z.string().optional(),
}),
+
+ })
+ }),
+ // The /landing/ pages that were pure 11ty frontmatter. Two shapes, both routed
+ // through pages/landing/[slug].vue and told apart by `kind`:
+ // - abm (layouts/abm-landing.njk) - problem/solution/how/features
+ // - comparison (layouts/landing-comparison.njk) - two cards and a gated brief
+ // /landing/plc/, /tulip/ and /factory-efficiency/ had markup bodies and stay
+ // hand-written Vue pages.
+ landingPages: defineCollection({
+ type: 'data',
+ source: 'landing/*.yml',
+ schema: z.object({
+ slug: z.string(),
+ kind: z.enum(['abm', 'comparison']),
+ seoMeta: z.object({
+ title: z.string(),
+ description: z.string().optional(),
+ }),
+ // The comparison briefs are campaign landing pages, kept out of the sitemap.
+ skipIndex: z.boolean().optional(),
+
+ // --- abm ---------------------------------------------------------------
+ heroTitle: z.string().optional(),
+ image: z.string().optional(),
+ imageDescription: z.string().optional(),
+ values: z.array(z.string()).optional(),
+ problem: z.object({
+ title: z.string(),
+ description: z.array(z.string()),
+ }).optional(),
+ solution: z.object({
+ title: z.string(),
+ description: z.string(),
+ benefits: z.array(z.object({
+ svgPath: z.string(),
+ title: z.string(),
+ description: z.string(),
+ })),
+ }).optional(),
+ testimonialsTitle: z.string().optional(),
+ useCases: z.object({
+ title: z.string(),
+ image: z.string(),
+ imgAlt: z.string(),
+ case: z.array(z.object({ title: z.string(), description: z.string() })),
+ }).optional(),
+ how: z.object({
+ title: z.string(),
+ steps: z.array(z.object({ title: z.string(), description: z.string() })),
+ }).optional(),
+ features: z.object({
+ title: z.string(),
+ features: z.array(z.object({ svgPath: z.string(), title: z.string() })),
+ }).optional(),
+ ctaSection: z.object({
+ title: z.string(),
+ description: z.string(),
+ }).optional(),
+
+ // --- comparison --------------------------------------------------------
+ hubspot: z.object({
+ formId: z.string(),
+ cta: z.string(),
+ reference: z.string(),
+ }).optional(),
+ hero: z.object({
+ headline: z.string(),
+ headlineHighlight: z.string(),
+ intro1: z.string(),
+ intro2: z.string(),
+ image: z.string(),
+ imageAlt: z.string(),
+ buttonText: z.string(),
+ }).optional(),
+ leftCard: z.object({
+ title: z.string(),
+ items: z.array(z.object({ icon: z.string(), text: z.string() })),
+ }).optional(),
+ rightCard: z.object({
+ title: z.string(),
+ items: z.array(z.object({ icon: z.string(), text: z.string() })),
+ }).optional(),
+ takeaway: z.object({
+ para1: z.string(),
+ para2: z.string(),
+ }).optional(),
+ form: z.object({ title: z.string() }).optional(),
})
}),
ebooks: defineCollection({
diff --git a/src/landing/building-and-scaling-industrial-applications.md b/nuxt/content/landing/building-and-scaling-industrial-applications.yml
similarity index 77%
rename from src/landing/building-and-scaling-industrial-applications.md
rename to nuxt/content/landing/building-and-scaling-industrial-applications.yml
index 62703f4abf..6d8b21c899 100644
--- a/src/landing/building-and-scaling-industrial-applications.md
+++ b/nuxt/content/landing/building-and-scaling-industrial-applications.yml
@@ -1,7 +1,10 @@
----
-layout: layouts/landing-comparison.njk
+# Lifted verbatim from src/landing/building-and-scaling-industrial-applications.md (11ty), which had no body: the whole page was
+# frontmatter read by layouts/landing-comparison.njk.
+# Rendered now by pages/landing/[slug].vue.
+slug: building-and-scaling-industrial-applications
+kind: comparison
skipIndex: true
-meta:
+seoMeta:
title: "Building and Scaling Industrial Applications | FlowFuse"
description: "Most industrial teams can build, the challenge is scaling. See how FlowFuse solves it."
hubspot:
@@ -13,46 +16,45 @@ hero:
headlineHighlight: "until you need to scale them"
intro1: "Most industrial teams start by solving a single use case, connecting a machine, moving data, or building a workflow."
intro2: "That's the right approach early on, the challenge appears when those solutions need to scale across sites, teams, and systems."
- image: "images/building-applications.png"
+ image: "/landing/images/building-applications.png"
imageAlt: "Industrial engineer working at a computer workstation"
buttonText: "Get the brief"
leftCard:
title: "In-house"
items:
- - icon: "components/icons/snowflake.svg"
+ - icon: "i-ff-snowflake"
text: 'Each use case becomes a separate implementation ("snowflake")'
- - icon: "components/icons/squares-2x2.svg"
+ - icon: "i-heroicons-squares-2x2"
text: "Difficult to standardize across plants and teams"
- - icon: "components/icons/users.svg"
+ - icon: "i-heroicons-users"
text: "High dependency on internal developers and tribal knowledge"
- - icon: "components/icons/pin-slash.svg"
+ - icon: "i-ff-pin-slash"
text: "No centralized governance, versioning, or deployment control"
- - icon: "components/icons/wrench-screwdriver.svg"
+ - icon: "i-heroicons-wrench-screwdriver"
text: "Increasing maintenance as the number of workflows grows"
- - icon: "components/icons/eye-slash.svg"
+ - icon: "i-heroicons-eye-slash"
text: "Limited visibility across systems and operations"
- - icon: "components/icons/target-view.svg"
+ - icon: "i-ff-target-view"
text: "Hard to ensure consistency in mission-critical environments"
rightCard:
title: "Industrial Application Platform (FlowFuse Approach)"
items:
- - icon: "components/icons/check-circle.svg"
+ - icon: "i-heroicons-check-circle"
text: "Standardized application patterns deployed across sites"
- - icon: "components/icons/pin.svg"
+ - icon: "i-ff-pin"
text: "Centralized governance, access control, and versioning"
- - icon: "components/icons/layers.svg"
+ - icon: "i-ff-layers"
text: "Blueprint-driven deployments ensure consistency at scale"
- - icon: "components/icons/uns.svg"
+ - icon: "i-ff-uns"
text: "Connect any machine, protocol, ERP, or MES system"
- - icon: "components/icons/pulse.svg"
+ - icon: "i-ff-pulse"
text: "Unified real-time data across all operations"
- - icon: "components/icons/sparkles.svg"
+ - icon: "i-heroicons-sparkles"
text: "Built-in AI assistance to accelerate development and transformation"
- - icon: "components/icons/shield-check.svg"
+ - icon: "i-heroicons-shield-check"
text: "Designed for production environments with security and reliability"
takeaway:
para1: "Building internally may solve individual problems quickly, but scaling industrial automation requires operational consistency, governance, and control."
para2: "FlowFuse enables teams to move from isolated workflows to a globally scalable industrial application strategy."
form:
title: "Download the brief"
----
diff --git a/src/landing/coordinating-industrial-systems-at-scale.md b/nuxt/content/landing/coordinating-industrial-systems-at-scale.yml
similarity index 75%
rename from src/landing/coordinating-industrial-systems-at-scale.md
rename to nuxt/content/landing/coordinating-industrial-systems-at-scale.yml
index 9afeb4f7dd..70d3e2b3e3 100644
--- a/src/landing/coordinating-industrial-systems-at-scale.md
+++ b/nuxt/content/landing/coordinating-industrial-systems-at-scale.yml
@@ -1,7 +1,10 @@
----
-layout: layouts/landing-comparison.njk
+# Lifted verbatim from src/landing/coordinating-industrial-systems-at-scale.md (11ty), which had no body: the whole page was
+# frontmatter read by layouts/landing-comparison.njk.
+# Rendered now by pages/landing/[slug].vue.
+slug: coordinating-industrial-systems-at-scale
+kind: comparison
skipIndex: true
-meta:
+seoMeta:
title: "Coordinating Industrial Systems at Scale, Beyond Point Tools | FlowFuse"
description: "Point tools solve isolated problems. See how FlowFuse enables a scalable, event-driven industrial application layer across your entire operation."
hubspot:
@@ -13,42 +16,41 @@ hero:
headlineHighlight: "beyond point tools"
intro1: "Many tools solve individual integration or automation problems. But industrial organizations rarely have just one use case. The challenge isn't the tools themselves, it's coordinating how they work together."
intro2: "They need a system that connects, scales, and adapts across the entire operation."
- image: "images/unified-real-time-data-platform.png"
+ image: "/landing/images/unified-real-time-data-platform.png"
imageAlt: "Industrial facility with coordinated automation systems"
buttonText: "Get the brief"
leftCard:
title: "Point solutions"
items:
- - icon: "components/icons/adjustments-horizontal.svg"
+ - icon: "i-heroicons-adjustments-horizontal"
text: "Built for single use cases"
- - icon: "components/icons/arrows-pointing-out.svg"
+ - icon: "i-heroicons-arrows-pointing-out"
text: "Limited scalability across sites and teams"
- - icon: "components/icons/puzzle-piece.svg"
+ - icon: "i-heroicons-puzzle-piece"
text: "Fragmented integrations and workflows"
- - icon: "components/icons/shield-exclamation.svg"
+ - icon: "i-heroicons-shield-exclamation"
text: "No centralized governance"
- - icon: "components/icons/wrench-screwdriver.svg"
+ - icon: "i-heroicons-wrench-screwdriver"
text: "Difficult to extend or adapt over time"
- - icon: "components/icons/clock.svg"
+ - icon: "i-heroicons-clock"
text: "Not designed for real-time orchestration"
rightCard:
title: "Industrial Application Platform (FlowFuse Approach)"
items:
- - icon: "components/icons/link.svg"
+ - icon: "i-heroicons-link"
text: "Connect, collect, build, and scale in one platform"
- - icon: "components/icons/squares-2x2.svg"
+ - icon: "i-heroicons-squares-2x2"
text: "Supports multiple use cases across the organization"
- - icon: "components/icons/uns.svg"
+ - icon: "i-ff-uns"
text: "Centralized management of workflows, devices, and applications"
- - icon: "components/icons/share.svg"
+ - icon: "i-heroicons-share"
text: "Event-driven data orchestration across IT and OT"
- - icon: "components/icons/sparkles.svg"
+ - icon: "i-heroicons-sparkles"
text: "AI-assisted development to accelerate use case delivery"
- - icon: "components/icons/lock-open.svg"
+ - icon: "i-heroicons-lock-open"
text: "Extend existing systems without vendor lock-in"
takeaway:
para1: "Point tools solve isolated problems."
para2: "FlowFuse enables organizations to build a scalable, event-driven industrial application layer across their entire operation."
form:
title: "Download the brief"
----
diff --git a/src/landing/edge-connectivity.njk b/nuxt/content/landing/edge-connectivity.yml
similarity index 85%
rename from src/landing/edge-connectivity.njk
rename to nuxt/content/landing/edge-connectivity.yml
index 2468f3e7ee..5f94d441f0 100644
--- a/src/landing/edge-connectivity.njk
+++ b/nuxt/content/landing/edge-connectivity.yml
@@ -1,9 +1,12 @@
----
-layout: layouts/abm-landing.njk
+# Lifted verbatim from src/landing/edge-connectivity.njk (11ty), which had no body: the whole page was
+# frontmatter read by layouts/abm-landing.njk.
+# Rendered now by pages/landing/[slug].vue.
+slug: edge-connectivity
+kind: abm
image: /landing/images/edge-hero.png
imageDescription: "Plant manager with a laptop in a factory setting"
-heroTitle: "Break Free from Edge Data Lock‑In"
-meta:
+heroTitle: "Break Free from Edge Data Lock‑In"
+seoMeta:
title: "Break Free from Edge Data Lock-In"
description: "Your machine data shouldn't be trapped in proprietary silos. FlowFuse unleashes open-edge connectivity so you control your data – not the vendors."
values:
@@ -20,16 +23,16 @@ solution:
title: "FlowFuse: Open Edge Connectivity at Enterprise Scale"
description: "FlowFuse is built on Node-RED, the open-source standard for industrial connectivity. That means you can connect ANY device, ANY protocol, ANY data source – without vendor permission."
benefits:
- - svgPath: "components/icons/globe-alt.svg"
+ - svgPath: "i-heroicons-globe-alt"
title: "Universal Connectivity"
description: "OPC-UA, Modbus, MQTT, REST APIs, PLCs, sensors – if it speaks a protocol, FlowFuse connects it. No more waiting for vendor integrations or paying for expensive gateways."
- - svgPath: "components/icons/arrows-pointing-out.svg"
+ - svgPath: "i-heroicons-arrows-pointing-out"
title: "Deploy Once, Scale Everywhere"
description: "Build your edge flows once and deploy them across hundreds of locations with centralized management. Update remotely, monitor in real-time, rollback instantly."
- - svgPath: "components/icons/eye.svg"
+ - svgPath: "i-heroicons-eye"
title: "Real-Time Visibility"
description: "Stop flying blind. Stream data from every edge device to dashboards, databases, or cloud platforms – in seconds, not weeks."
- - svgPath: "components/icons/shield-check.svg"
+ - svgPath: "i-heroicons-shield-check"
title: "Enterprise-Grade Reliability"
description: "Built for production environments with security, audit trails, version control, and DevOps workflows for OT teams."
testimonialsTitle: "Trusted by Engineering Teams Worldwide"
@@ -58,23 +61,22 @@ how:
features:
title: "Everything You Need for Enterprise Edge"
features:
- - svgPath: "components/icons/chip.svg"
+ - svgPath: "i-heroicons-cpu-chip"
title: "Centralized device management"
- - svgPath: "components/icons/wifi.svg"
+ - svgPath: "i-heroicons-wifi"
title: "Remote deployment & updates"
- - svgPath: "components/icons/arrow-path.svg"
+ - svgPath: "i-heroicons-arrow-path"
title: "Version control & rollback"
- - svgPath: "components/icons/lock-closed.svg"
+ - svgPath: "i-heroicons-lock-closed"
title: "Security & role-based access"
- - svgPath: "components/icons/shield-check.svg"
+ - svgPath: "i-heroicons-shield-check"
title: "Audit trails & compliance"
- - svgPath: "components/icons/camera.svg"
+ - svgPath: "i-heroicons-camera"
title: "Snapshot & recovery"
- - svgPath: "components/icons/arrow-path-rounded-square.svg"
+ - svgPath: "i-heroicons-arrow-path-rounded-square"
title: "CI/CD pipelines for OT"
- - svgPath: "components/icons/arrows-pointing-out.svg"
+ - svgPath: "i-heroicons-arrows-pointing-out"
title: "Multi-site orchestration"
ctaSection:
title: "Take Back Control of Your Edge Data"
description: "Stop letting vendors hold your data hostage. See how FlowFuse delivers open, scalable edge connectivity in a live demo."
----
\ No newline at end of file
diff --git a/src/landing/enterprise-integration.njk b/nuxt/content/landing/enterprise-integration.yml
similarity index 85%
rename from src/landing/enterprise-integration.njk
rename to nuxt/content/landing/enterprise-integration.yml
index d577e78a05..2292a7ee27 100644
--- a/src/landing/enterprise-integration.njk
+++ b/nuxt/content/landing/enterprise-integration.yml
@@ -1,9 +1,12 @@
----
-layout: layouts/abm-landing.njk
+# Lifted verbatim from src/landing/enterprise-integration.njk (11ty), which had no body: the whole page was
+# frontmatter read by layouts/abm-landing.njk.
+# Rendered now by pages/landing/[slug].vue.
+slug: enterprise-integration
+kind: abm
image: /landing/images/hero-enterprise.png
imageDescription: "Industrial workers wearing safety vests and hard hats monitor robotic production lines using a tablet in a modern manufacturing facility."
heroTitle: "From Shop Floor to Top Floor – Instantly"
-meta:
+seoMeta:
title: "From Shop Floor to Top Floor – Instantly"
description: "Break down data silos and connect your factory to your enterprise systems. FlowFuse bridges IT/OT – giving you real-time insights and full control, enterprise-wide."
values:
@@ -20,22 +23,22 @@ solution:
title: "Bridging IT and OT for True Enterprise Integration"
description: "FlowFuse enables direct, secure integration between factory assets (PLC, MES, OPC-UA, sensors) and enterprise platforms (ERP, BI, cloud) using Node-RED flows."
benefits:
- - svgPath: "components/icons/arrows-right-left.svg"
+ - svgPath: "i-heroicons-arrows-right-left"
title: "Direct Data Flow"
description: "Push real-time KPIs, batch status, and events from machine to ERP, SAP, and Power BI instantly."
- - svgPath: "components/icons/squares-plus.svg"
+ - svgPath: "i-heroicons-squares-plus"
title: "Out-of-the-Box Connectors"
description: "Use our broad library: SAP, REST, MQTT, AWS, Azure, and more – no custom coding or vendors required."
- - svgPath: "components/icons/shield-check.svg"
+ - svgPath: "i-heroicons-shield-check"
title: "Enterprise Security & Governance"
description: "Role-based access, audit trails, TLS encryption, deployment options for cloud/on-prem/air-gapped environments."
- - svgPath: "components/icons/building-office-2.svg"
+ - svgPath: "i-heroicons-building-office-2"
title: "Multi-Site, Scalable"
description: "Integrate multiple plants, teams, and reporting platforms at enterprise scale – without rebuilding from scratch."
testimonialsTitle: "Trusted by Leading Enterprises"
useCases:
title: "How Enterprises Use FlowFuse"
- image: /landing/images/how-enterprise.png
+ image: "/landing/images/how-enterprise.png"
imgAlt: "IT engineers working at dual-monitor desks in a clean office, visible through a glass wall overlooking the OT shop floor in an active factory."
case:
- title: "Shop Floor to ERP Integration"
@@ -58,19 +61,18 @@ how:
features:
title: "Everything You Need for IT/OT Convergence"
features:
- - svgPath: "components/icons/squares-plus.svg"
+ - svgPath: "i-heroicons-squares-plus"
title: "Built-in ERP/BI/cloud connectors"
- - svgPath: "components/icons/clipboard-document-check.svg"
+ - svgPath: "i-heroicons-clipboard-document-check"
title: "Audit trails & security management"
- - svgPath: "components/icons/shield-check.svg"
+ - svgPath: "i-heroicons-shield-check"
title: "Role-based access, governance controls"
- - svgPath: "components/icons/building-office-2.svg"
+ - svgPath: "i-heroicons-building-office-2"
title: "Scalable to multi-site and multi-cloud"
- - svgPath: "components/icons/arrows-right-left.svg"
+ - svgPath: "i-heroicons-arrows-right-left"
title: "Visual flow builder for integration mapping"
- - svgPath: "components/icons/server-stack.svg"
+ - svgPath: "i-heroicons-server-stack"
title: "On-prem/cloud/air-gapped deploy options"
ctaSection:
title: "Connect Your Factory to the Enterprise"
description: "See FlowFuse unify your shop floor and enterprise in real time. Request a demo and make IT/OT convergence a reality."
----
\ No newline at end of file
diff --git a/src/landing/line-control.njk b/nuxt/content/landing/line-control.yml
similarity index 83%
rename from src/landing/line-control.njk
rename to nuxt/content/landing/line-control.yml
index a75ca21f52..8fd35a60ee 100644
--- a/src/landing/line-control.njk
+++ b/nuxt/content/landing/line-control.yml
@@ -1,9 +1,12 @@
----
-layout: layouts/abm-landing.njk
+# Lifted verbatim from src/landing/line-control.njk (11ty), which had no body: the whole page was
+# frontmatter read by layouts/abm-landing.njk.
+# Rendered now by pages/landing/[slug].vue.
+slug: line-control
+kind: abm
image: /landing/images/hero-line-control.png
imageDescription: "Plant worker interacting with an HMI"
heroTitle: "Operators Flying Blind? Not Anymore"
-meta:
+seoMeta:
title: "Operators Flying Blind?"
description: "Give your line teams instant visibility and control. FlowFuse delivers real-time HMI and line orchestration, no code required."
values:
@@ -19,22 +22,22 @@ solution:
title: "Line-Level Control Made Simple"
description: "Build and deploy modern HMIs and line orchestration apps with visual flows – no custom software, no SCADA headaches."
benefits:
- - svgPath: "components/icons/bell-alert.svg"
+ - svgPath: "i-heroicons-bell-alert"
title: "Real-Time Alarms & Status"
description: "Get instant alerts, monitor run conditions, and see live data for every line, all from a unified dashboard."
- - svgPath: "components/icons/adjustments-horizontal.svg"
+ - svgPath: "i-heroicons-adjustments-horizontal"
title: "Customizable HMIs"
description: "Design operator screens for every station and device. Adapt flows as needs change, with rapid visual configuration."
- - svgPath: "components/icons/wrench-screwdriver.svg"
+ - svgPath: "i-heroicons-wrench-screwdriver"
title: "Engineer Empowerment"
description: "Put controls in the hands of your engineers. Make improvements, troubleshoot, and scale new features in hours, not weeks."
- - svgPath: "components/icons/bolt.svg"
+ - svgPath: "i-heroicons-bolt"
title: "Rapid Deployment"
description: "Go from whiteboard to working solution in days. No vendor bottlenecks, no custom code, no endless consulting."
testimonialsTitle: "Proven on Hundreds of Lines"
useCases:
title: "How Line Teams Use FlowFuse"
- image: /landing/images/line-solution.png
+ image: "/landing/images/line-solution.png"
imgAlt: "Plant workers looking at a screen with a dashboard"
case:
- title: "Real-Time Line Dashboards"
@@ -57,21 +60,20 @@ how:
features:
title: "Everything You Need to Own Your Line"
features:
- - svgPath: "components/icons/squares-plus.svg"
+ - svgPath: "i-heroicons-squares-plus"
title: "User-friendly visual flow builder"
- - svgPath: "components/icons/computer-desktop.svg"
+ - svgPath: "i-heroicons-computer-desktop"
title: "HMI and dashboard templates"
- - svgPath: "components/icons/bell-alert.svg"
+ - svgPath: "i-heroicons-bell-alert"
title: "Alarm management & escalation"
- - svgPath: "components/icons/rocket-launch.svg"
+ - svgPath: "i-heroicons-rocket-launch"
title: "Rapid deployment to production"
- - svgPath: "components/icons/lock-closed.svg"
+ - svgPath: "i-heroicons-lock-closed"
title: "Secure access, versioning & rollback"
- - svgPath: "components/icons/queue-list.svg"
+ - svgPath: "i-heroicons-queue-list"
title: "Multi-line orchestration"
- - svgPath: "components/icons/arrow-path-rounded-square.svg"
+ - svgPath: "i-heroicons-arrow-path-rounded-square"
title: "Integration with MES/ERP/Cloud"
ctaSection:
title: "Put Control Back in Operator Hands"
description: "See how FlowFuse empowers your line teams to improve efficiency, reduce downtime, and own their workflows."
----
\ No newline at end of file
diff --git a/src/landing/plant-orchestration.njk b/nuxt/content/landing/plant-orchestration.yml
similarity index 85%
rename from src/landing/plant-orchestration.njk
rename to nuxt/content/landing/plant-orchestration.yml
index 26e71bd9be..4e98397210 100644
--- a/src/landing/plant-orchestration.njk
+++ b/nuxt/content/landing/plant-orchestration.yml
@@ -1,9 +1,12 @@
----
-layout: layouts/abm-landing.njk
+# Lifted verbatim from src/landing/plant-orchestration.njk (11ty), which had no body: the whole page was
+# frontmatter read by layouts/abm-landing.njk.
+# Rendered now by pages/landing/[slug].vue.
+slug: plant-orchestration
+kind: abm
image: /landing/images/hero-plant.png
imageDescription: "Engineer monitoring a factory floor while working with the Node-RED interface inside FlowFuse on a desktop screen."
heroTitle: "Still Running Your Plant on Spreadsheets?"
-meta:
+seoMeta:
title: "Still Running Your Plant on Spreadsheets?"
description: "Unlock plant-wide automation and orchestration. FlowFuse gives you the power of real-time workflows and centralized control without the monolith."
values:
@@ -19,22 +22,22 @@ solution:
title: "Plant Orchestration, the Open Way"
description: "FlowFuse brings the flexibility of open-source Node-RED to the entire plant. Connect every asset, line, and team. Build automated workflows, plant-wide dashboards, and recipe-driven processes using visual flows – no more spreadsheet juggling."
benefits:
- - svgPath: "components/icons/arrows-right-left.svg"
+ - svgPath: "i-heroicons-arrows-right-left"
title: "Cross-Line Coordination"
description: "Run recipes and workflows across multiple lines, hand off automatically, and track results – all in one place."
- - svgPath: "components/icons/cog.svg"
+ - svgPath: "i-heroicons-cog"
title: "Centralized Automation"
description: "Automate reporting, downtime analysis, quality checks, and more plant-wide, not just in pockets."
- - svgPath: "components/icons/eye.svg"
+ - svgPath: "i-heroicons-eye"
title: "Real-Time Plant Visibility"
description: "See the status of every line, team, and asset with shared dashboards. Catch issues before they scale."
- - svgPath: "components/icons/arrow-trending-up.svg"
+ - svgPath: "i-heroicons-arrow-trending-up"
title: "Plant-Wide Improvement"
description: "Turn every project into a repeatable flow. Empower teams to iterate and improve at scale."
testimonialsTitle: "From Spreadsheets to Smart Plants"
useCases:
title: "How Modern Plants Use FlowFuse"
- image: /landing/images/use-cases-plant.png
+ image: "/landing/images/use-cases-plant.png"
imgAlt: "Plant workers looking at a screen with a dashboard"
case:
- title: "Recipe Management & Rollout"
@@ -57,21 +60,20 @@ how:
features:
title: "Everything You Need for the Modern Plant"
features:
- - svgPath: "components/icons/cog.svg"
+ - svgPath: "i-heroicons-cog"
title: "Recipe and workflow automation"
- - svgPath: "components/icons/building-office-2.svg"
+ - svgPath: "i-heroicons-building-office-2"
title: "Multi-line and multi-site orchestration"
- - svgPath: "components/icons/chart.svg"
+ - svgPath: "i-heroicons-chart-bar-square"
title: "Centralized dashboards & reporting"
- - svgPath: "components/icons/shield-check.svg"
+ - svgPath: "i-heroicons-shield-check"
title: "Plant-wide permissions and controls"
- - svgPath: "components/icons/arrow-trending-up.svg"
+ - svgPath: "i-heroicons-arrow-trending-up"
title: "Continuous improvement workflow engine"
- - svgPath: "components/icons/puzzle-piece.svg"
+ - svgPath: "i-heroicons-puzzle-piece"
title: "Integration with legacy MES/ERP"
- - svgPath: "components/icons/cursor-arrow-rays.svg"
+ - svgPath: "i-heroicons-cursor-arrow-rays"
title: "Visual, low-code builder for all teams"
ctaSection:
title: "Move From Spreadsheets to Smart Plant"
description: "See how FlowFuse lets you orchestrate and automate at scale. Book a live demo and transform your plant operations."
----
\ No newline at end of file
diff --git a/src/landing/unified-real-time-data-platform.md b/nuxt/content/landing/unified-real-time-data-platform.yml
similarity index 76%
rename from src/landing/unified-real-time-data-platform.md
rename to nuxt/content/landing/unified-real-time-data-platform.yml
index b244dabdaa..e51cff5964 100644
--- a/src/landing/unified-real-time-data-platform.md
+++ b/nuxt/content/landing/unified-real-time-data-platform.yml
@@ -1,7 +1,10 @@
----
-layout: layouts/landing-comparison.njk
+# Lifted verbatim from src/landing/unified-real-time-data-platform.md (11ty), which had no body: the whole page was
+# frontmatter read by layouts/landing-comparison.njk.
+# Rendered now by pages/landing/[slug].vue.
+slug: unified-real-time-data-platform
+kind: comparison
skipIndex: true
-meta:
+seoMeta:
title: "From Fragmented to a Unified, Real-Time Industrial Data Platform | FlowFuse"
description: "Most industrial data already exists, but it's siloed and disconnected. See how FlowFuse turns it into a unified, real-time, event-driven platform."
hubspot:
@@ -13,42 +16,41 @@ hero:
headlineHighlight: "a unified, real-time data platform"
intro1: "Many industrial organizations already collect data, but it is often siloed across machines, protocols, and systems. In most cases, existing systems already solve 60–70% of the problem."
intro2: "The real challenge isn't starting from scratch, it's connecting and extending what's already in place: data exists, but it is not unified, actionable, or scalable."
- image: "images/edge-hero.png"
+ image: "/landing/images/edge-hero.png"
imageAlt: "Industrial facility with connected machines and systems"
buttonText: "Get the brief"
leftCard:
title: "Fragmented"
items:
- - icon: "components/icons/archive-box-x-mark.svg"
+ - icon: "i-heroicons-archive-box-x-mark"
text: "Data trapped in different protocols and systems"
- - icon: "components/icons/hand-raised.svg"
+ - icon: "i-heroicons-hand-raised"
text: "Manual integration between tools"
- - icon: "components/icons/adjustments-vertical.svg"
+ - icon: "i-heroicons-adjustments-vertical"
text: "Limited ability to transform and structure data"
- - icon: "components/icons/clock.svg"
+ - icon: "i-heroicons-clock"
text: "Slow deployment of new use cases"
- - icon: "components/icons/link-slash.svg"
+ - icon: "i-heroicons-link-slash"
text: "Difficult to connect shop floor data to enterprise systems"
- - icon: "components/icons/building-office-2.svg"
+ - icon: "i-heroicons-building-office-2"
text: "High reliance on vendor-specific solutions"
rightCard:
title: "Event-Driven Data Bridge + System Agility (FlowFuse Approach)"
items:
- - icon: "components/icons/link.svg"
+ - icon: "i-heroicons-link"
text: "Connect anything: machines, PLCs, ERP, MES, cloud services"
- - icon: "components/icons/arrow-path.svg"
+ - icon: "i-heroicons-arrow-path"
text: "Convert and unify data across any protocol"
- - icon: "components/icons/bolt.svg"
+ - icon: "i-heroicons-bolt"
text: "Event-driven architecture triggers real-time data flows"
- - icon: "components/icons/sparkles.svg"
+ - icon: "i-heroicons-sparkles"
text: "Build and deploy logic using AI-assisted low-code tools"
- - icon: "components/icons/arrow-top-right-on-square.svg"
+ - icon: "i-heroicons-arrow-top-right-on-square"
text: "Extend existing systems without replacing them"
- - icon: "components/icons/shield-check.svg"
+ - icon: "i-heroicons-shield-check"
text: "Create a real-time source of truth across operations"
takeaway:
para1: "The challenge is not collecting data, it is making it usable, connected, and actionable in real time."
para2: "FlowFuse turns fragmented systems into a unified, event-driven industrial data platform."
form:
title: "Download the brief"
----
diff --git a/nuxt/nuxt.config.ts b/nuxt/nuxt.config.ts
index a1bb2e162c..88499a6c34 100644
--- a/nuxt/nuxt.config.ts
+++ b/nuxt/nuxt.config.ts
@@ -177,7 +177,14 @@ export default defineNuxtConfig({
// and adds a pattern for dotfiles: glob's `*` never matches a leading dot, so
// nuxt/content/handbook/**/.navigation.yml (where each department's nav icon lives) is
// otherwise invisible to the scan - those icons kept warning even with scan on.
- icon: { clientBundle: { scan: { globInclude: ['**/*.{vue,jsx,tsx,md,mdc,mdx,yml,yaml}', '**/.*.{yml,yaml}'] } } },
+ icon: {
+ clientBundle: { scan: { globInclude: ['**/*.{vue,jsx,tsx,md,mdc,mdx,yml,yaml}', '**/.*.{yml,yaml}'] } },
+ // Eight glyphs the landing pages use have no Heroicons equivalent: the UNS mark, the
+ // layered cube, the pin pair, pulse, snowflake, target-view and the diagonal arrows.
+ // As a collection they reach by name like any other icon, so the .yml content
+ // names them the same way it names a Heroicon and no resolver component is needed.
+ customCollections: [{ prefix: 'ff', dir: join(__dirname, 'assets/icons') }],
+ },
site: {
url: site.baseURL,
@@ -293,6 +300,17 @@ export default defineNuxtConfig({
// this they are in neither sitemap.
...collectSlugRoutes(join(__dirname, 'content/vs'), '/vs').map(loc => ({ loc })),
],
+ urls: [
+ ...blogAuthorRoutes.map(loc => ({ loc, priority: 0.6 })),
+ // /landing// is one [slug].vue over a `data` collection, so the module's
+ // static-route discovery cannot see it, and content-urls.get.ts cannot either
+ // (it keys on `path`, which a data collection has no equivalent of). Without
+ // this they are in neither sitemap, having left sitemap-legacy.xml when their
+ // .njk files were deleted. `skipIndex` entries stay out, as they are noindex.
+ ...readEntries(join(__dirname, 'content/landing'))
+ .filter(entry => !entry.skipIndex)
+ .map(entry => ({ loc: `/landing/${entry.slug}/` })),
+ ],
exclude: ['/_studio/**', '/api/**'],
},
@@ -455,6 +473,10 @@ export default defineNuxtConfig({
'/pricing/request-quote/',
// The homepage itself: nothing links to it that the crawler starts from.
'/',
+ // The four campaign pages with their own layout are .vue files, linked only from off-site campaigns.
+ '/landing/tulip/',
+ '/landing/plc/',
+ '/landing/factory-efficiency/',
// /ai is only linked from 11ty-generated HTML (nav, homepage), which the
// Nuxt prerender crawler never parses, so it has to be listed explicitly
// or the route is missing from nuxt/dist and every link to it breaks.
@@ -467,6 +489,8 @@ export default defineNuxtConfig({
...collectSlugRoutes(join(__dirname, 'content/vs'), '/vs'),
'/about/',
+
+ ...collectSlugRoutes(join(__dirname, 'content/landing'), '/landing'),
// Without this, @nuxtjs/sitemap only bakes /sitemap.xml statically when
// isNuxtGenerate() is true, which checks for nitro.static/preset "static" -
// the netlify preset here is hybrid (prerendered pages + a fallback
diff --git a/nuxt/pages/landing/[slug].vue b/nuxt/pages/landing/[slug].vue
new file mode 100644
index 0000000000..776113bad6
--- /dev/null
+++ b/nuxt/pages/landing/[slug].vue
@@ -0,0 +1,41 @@
+
+
+
+
+ Connect Your PLCs to the Modern Industrial Stack
+
+
+ FlowFuse bridges Programmable Logic Controllers, Siemens, Allen-Bradley, Omron, and more, to MQTT, OPC UA, cloud platforms, and enterprise systems. No expensive gateways, no custom code.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
What is a PLC?
+
+
+
+ A Programmable Logic Controller (PLC) is a ruggedized industrial computer that automates electromechanical processes on the factory floor, controlling machines, conveyor belts, assembly lines, packaging systems, and more.
+
+
+ PLCs continuously execute a scan cycle: they read inputs from sensors and field devices, run a control program (written in ladder logic, structured text, or function block diagrams), and write outputs to actuators, motors, and valves.
+
+
+ Originally designed for deterministic machine control, modern PLCs also expose data over standard industrial protocols, making them the primary data source for IIoT, SCADA, MES, and digital transformation initiatives.
+
+ PLCs generate rich, real-time data, production counts, machine states, alarms, energy readings, but that data is often trapped. Getting it into dashboards, databases, cloud analytics, or ERP systems traditionally requires expensive SCADA licenses, proprietary gateways, or months of custom integration work. FlowFuse changes that.
+
+
+
+
+
+
+
+
+
Send PLC Data to the Cloud, Without a Gateway or Vendor Lock-In
+
+ The fastest way to get PLC data to the cloud is to skip the dedicated gateway appliance entirely. Install the FlowFuse Device Agent on an industrial PC, Raspberry Pi, or supported edge device already inside your plant network. It connects to your PLC over OPC UA, S7, EtherNet/IP, or Modbus, and opens only outbound connections to publish that data to MQTT, a REST API, or a cloud data platform — no inbound firewall rules, no VPN, no separate gateway hardware to buy and maintain.
+
+
+
+
PLC + SCADA, one integration
+
Pull tag data straight from the controller and poll your existing SCADA historian or OPC server in the same flow — one platform covers both layers instead of two separate integrations.
+
+
+
MES and ERP, without rebuilding per site
+
Route production counts, downtime, and quality data from the PLC into SAP, Oracle, or any MES over REST or SQL. Build the flow once and deploy it to every plant.
+
+
+
No vendor lock-in
+
Integration logic lives in open-source Node-RED flows, not a proprietary gateway config. Swap PLC brands, MES vendors, or cloud providers later without starting over.
+
+
+
+
+
+
+
+
+
+
+
+
How FlowFuse Connects to Any PLC
+
+ FlowFuse's built-in low-code runtime includes 5,000+ nodes for industrial protocols. Drag in a protocol node, configure your PLC's address, and data flows. No gateway hardware required.
+
+
+
+
+
+
+
+
{{ protocol.title }}
+
{{ protocol.description }}
+ {{ link.text }}
+
+
+
+
+
+
+
+
+
What You Can Build with PLC + FlowFuse
+
+
+
+
+
+
+
+
+
PLC Data Logging
+
+ Collect tag values, machine states, and counters at any interval. Write to InfluxDB, TimescaleDB, PostgreSQL, or CSV, for OEE tracking, trend analysis, and compliance.
+
+ Build modern operator interfaces that display live PLC data, gauges, trends, alarms, and controls, accessible from any browser without proprietary HMI software.
+
+ Stream PLC data to AWS IoT, Azure IoT Hub, Google Cloud, or any REST API. Enable predictive maintenance, AI analytics, and enterprise reporting without replacing your PLCs.
+
+ Bridge the OT/IT gap. Route production counts, downtime events, and quality data from PLCs directly into SAP, Oracle, or any MES, eliminating manual entry and delays.
+
+ Subscribe to PLC fault bits and alarm words, route notifications to Slack, email, SMS, or PagerDuty, and log alarm history for root-cause analysis.
+
+
+
+
+
+
+
+
+
+
Unified Namespace (UNS)
+
+ Use FlowFuse as the adapter layer between your PLCs and an MQTT-based UNS. Normalize data from Siemens, Allen-Bradley, and legacy equipment into a common topic hierarchy.
+
+ Stop paying for expensive gateways and inflexible SCADA licenses. See how FlowFuse connects your PLCs to the modern industrial stack, in a live demo or a free trial.
+
diff --git a/nuxt/public/images/abrasive-technology-icon.png b/nuxt/public/images/abrasive-technology-icon.png
new file mode 100644
index 0000000000..dceaaf3a22
Binary files /dev/null and b/nuxt/public/images/abrasive-technology-icon.png differ
diff --git a/nuxt/public/images/icons-large/centralized.svg b/nuxt/public/images/icons-large/centralized.svg
new file mode 100644
index 0000000000..821721a4a4
--- /dev/null
+++ b/nuxt/public/images/icons-large/centralized.svg
@@ -0,0 +1,18 @@
+
diff --git a/nuxt/public/images/icons-large/connect.svg b/nuxt/public/images/icons-large/connect.svg
new file mode 100644
index 0000000000..ef8c988ea3
--- /dev/null
+++ b/nuxt/public/images/icons-large/connect.svg
@@ -0,0 +1,11 @@
+
diff --git a/nuxt/public/images/icons-large/data-silos.svg b/nuxt/public/images/icons-large/data-silos.svg
new file mode 100644
index 0000000000..3c2dc4a1cf
--- /dev/null
+++ b/nuxt/public/images/icons-large/data-silos.svg
@@ -0,0 +1,6 @@
+
diff --git a/nuxt/public/images/icons-large/disconnected.svg b/nuxt/public/images/icons-large/disconnected.svg
new file mode 100644
index 0000000000..356af3af09
--- /dev/null
+++ b/nuxt/public/images/icons-large/disconnected.svg
@@ -0,0 +1,6 @@
+
diff --git a/nuxt/public/images/icons-large/expensive.svg b/nuxt/public/images/icons-large/expensive.svg
new file mode 100644
index 0000000000..3dfaffd066
--- /dev/null
+++ b/nuxt/public/images/icons-large/expensive.svg
@@ -0,0 +1,5 @@
+
diff --git a/nuxt/public/images/icons-large/incomplete.svg b/nuxt/public/images/icons-large/incomplete.svg
new file mode 100644
index 0000000000..6c01c7eea0
--- /dev/null
+++ b/nuxt/public/images/icons-large/incomplete.svg
@@ -0,0 +1,21 @@
+
diff --git a/nuxt/public/images/icons-large/launch.svg b/nuxt/public/images/icons-large/launch.svg
new file mode 100644
index 0000000000..ddfc8236c3
--- /dev/null
+++ b/nuxt/public/images/icons-large/launch.svg
@@ -0,0 +1,11 @@
+
diff --git a/nuxt/public/images/icons-large/reduce.svg b/nuxt/public/images/icons-large/reduce.svg
new file mode 100644
index 0000000000..4284593fd6
--- /dev/null
+++ b/nuxt/public/images/icons-large/reduce.svg
@@ -0,0 +1,14 @@
+
diff --git a/nuxt/public/images/power-workplace-icon.png b/nuxt/public/images/power-workplace-icon.png
new file mode 100644
index 0000000000..fd03d385c9
Binary files /dev/null and b/nuxt/public/images/power-workplace-icon.png differ
diff --git a/nuxt/server/middleware/legacy.ts b/nuxt/server/middleware/legacy.ts
index deb9c7a86e..cc1ebec52b 100644
--- a/nuxt/server/middleware/legacy.ts
+++ b/nuxt/server/middleware/legacy.ts
@@ -15,12 +15,12 @@ const NUXT_ROUTE_PREFIXES = ['/integrations/', '/raw/']
// left once its one referring blog post pointed at /contact-us/ instead) - but they stay
// listed so their 301s in nuxt/redirects.ts are served by Nitro in dev rather than being
// proxied to 11ty, which has nothing there either.
-const NUXT_PREFIXES = ['/handbook', '/ebooks', '/whitepaper', '/pricing', '/docs', '/changelog', '/application-guide', '/blog', '/product', '/customer-stories', '/thank-you', '/resources', '/webinars', '/free-consultation', '/vs']
+const NUXT_PREFIXES = ['/handbook', '/ebooks', '/whitepaper', '/pricing', '/docs', '/changelog', '/application-guide', '/blog', '/product', '/customer-stories', '/thank-you', '/resources', '/webinars', '/free-consultation', '/vs', '/landing']
// Top-level routes still on 11ty, not yet ported to Nuxt (everything not listed above
// already falls through to the 11ty proxy by default). Remove entries here as they migrate:
// /blueprints, /careers, /community, /events
-// /free-consultation, /industries, /landing, /node-red, /partners, /platform,
+// /free-consultation, /industries, /node-red, /partners, /platform,
// /use-cases, /webinars
// New pages should never grow that fallback set: nuxt/lib/legacy-pages.test.mjs fails
@@ -52,6 +52,13 @@ export default defineEventHandler(async (event) => {
// from still-11ty pages like use-cases/uns.njk) - /resources is otherwise a Nuxt prefix.
if (normalised.startsWith('/resources/images/')) return proxyRequest(event, `http://localhost:8080${path}`)
+ // Same story for src/landing/images/**: 11ty-owned files that only reach nuxt/public/
+ // through the passthrough in a production build, so dev has to ask 11ty for them even
+ // though /landing is a Nuxt prefix now.
+ if (normalised.startsWith('/landing/images/')) {
+ return proxyRequest(event, `http://localhost:8080${path}`)
+ }
+
// The documentation below /node-red/ moved into /docs/, and every old URL now 301s
// from nuxt/redirects-node-red.ts. Those are Nitro route rules, so the request has to
// reach Nitro in dev rather than being proxied to 11ty, which no longer has the pages.
diff --git a/src/landing/factory-efficiency.njk b/src/landing/factory-efficiency.njk
deleted file mode 100644
index d101c0afae..0000000000
--- a/src/landing/factory-efficiency.njk
+++ /dev/null
@@ -1,149 +0,0 @@
----
-layout: page
-nohero: true
-skipIndex: true
-image: /landing/images/factory-efficiency.png
-imageDescription: "Plant manager with a walkie-talkie in a factory setting"
-meta:
- title: "Transform Your Factory’s Efficiency and Profitability with FlowFuse"
- description: "See how innovative plant managers like you are cutting costs, boosting uptime, and driving growth."
-hero:
- buttonText: "DOWNLOAD"
- buttonLink: "form"
- buttonReference: "landing-factory-efficiency"
-sectionTitle: "The Industrial Application Platform for Plant Managers"
-sectionSubtitle: "Unlock Data. Accelerate Results. Scale with Confidence."
-stats:
- - title: "-40%"
- description: "reduction in integration costs"
- - title: "9x"
- description: "faster prototyping"
- - description: "Deployment at scale"
-sections:
- - svgPath: "components/icons/large/connect.svg"
- title: "Connect your factory systems"
- description: "Integrate OT, IT, and cloud data for real-time visibility and control."
- - svgPath: "components/icons/large/launch.svg"
- title: "Launch industrial apps up to 9x faster"
- description: "Move from idea to solution in hours, not days."
- - svgPath: "components/icons/large/reduce.svg"
- title: "Reduce engineering time by 20%"
- description: "Free up your team for high-value projects."
- - svgPath: "components/icons/large/centralized.svg"
- title: "Centralized management & enterprise security"
- description: "Deploy and monitor all your applications from one dashboard."
-quotes:
- - icon: ./images/power-workplace-icon.png
- alt: "Power Workplace logo"
- quote: "FlowFuse Cloud is interesting for us because it allows us to focus on growing our business rather than maintaining environments."
- author: "Alan Yeung, CTO,"
- company: "Power Workplace"
- - icon: ./images/abrasive-technology-icon.png
- alt: "Abrasive Technology logo"
- quote: "Our search for a better way to host and manage our Node-RED instances is what started our transition to using FlowFuse."
- author: "Josh Dudley,"
- company: "Abrasive Technology"
-hubspot:
- script: "hubspot/hs-form.njk"
- formId: eef5e79c-74ae-499e-9fa1-9bd9974959d4
- cta: "download-case-study"
- reference: "factory-efficiency-landing"
----
-
-
-
-
-{% include "smooth-scroll.njk" %}
-
-
diff --git a/src/landing/plc.njk b/src/landing/plc.njk
deleted file mode 100644
index 35b7e41cd5..0000000000
--- a/src/landing/plc.njk
+++ /dev/null
@@ -1,474 +0,0 @@
----
-metaTitle: "PLC Integration Platform: Connect to MQTT & SCADA"
-layout: page
-nohero: true
-meta:
- title: "PLC Integration Platform | Connect PLCs to MQTT, Cloud & SCADA | FlowFuse"
- description: "Send PLC data to the cloud, SCADA, and MES without a gateway or vendor lock-in. Connect Siemens, Allen-Bradley, Omron & more via MQTT, OPC UA & Modbus with FlowFuse."
- keywords: "plc, programmable logic controller, plc integration, plc system integration, plc mqtt, node-red plc, opc ua plc, plc to cloud, plc to cloud gateway, plc scada mes integration, plc vendor lock-in, plc communication, plc communication protocols, siemens plc, allen bradley plc, plc data collection, plc logging, what is a plc, plc control system"
- faq:
- - question: "What is a PLC (Programmable Logic Controller)?"
- answer: >
- A Programmable Logic Controller (PLC) is an industrial computer used to automate manufacturing processes, controlling machines, assembly lines, conveyor belts, and other equipment on the factory floor. PLCs continuously read inputs from sensors and actuators, execute a control program, and send output signals to drive motors, valves, and other devices. Common PLC brands include Siemens (S7-300, S7-400, S7-1200, S7-1500), Allen-Bradley (Rockwell Automation ControlLogix, CompactLogix), Omron, Mitsubishi, Schneider Electric, and Beckhoff.
- - question: "How does FlowFuse connect to PLCs?"
- answer: >
- FlowFuse connects to PLCs via industrial protocols including OPC UA, MQTT, Modbus TCP/RTU, EtherNet/IP (for Allen-Bradley), and the Siemens S7 protocol using a built-in low-code runtime. You drag in a certified protocol node, enter your PLC's IP address or endpoint, and data flows immediately. No custom code, no expensive gateways, no vendor lock-in.
- - question: "Which PLC brands does FlowFuse support?"
- answer: >
- FlowFuse supports virtually all major PLC brands: Siemens (S7-1200, S7-1500, S7-300, S7-400), Allen-Bradley / Rockwell Automation (ControlLogix, CompactLogix via EtherNet/IP), Omron, Mitsubishi, Schneider Electric, Beckhoff TwinCAT, and any PLC that exposes OPC UA or Modbus TCP. If your PLC speaks a standard industrial protocol, FlowFuse can connect it.
- - question: "Can I connect a PLC to MQTT using FlowFuse?"
- answer: >
- Yes. Connecting a PLC to MQTT is one of the most common FlowFuse use cases. FlowFuse reads tag data from your PLC (via OPC UA, S7, EtherNet/IP, or Modbus), transforms it as needed, and publishes it to any MQTT broker, including AWS IoT, Azure IoT Hub, HiveMQ, Mosquitto, or the built-in FlowFuse MQTT Broker. This is the foundation for building a Unified Namespace (UNS) or streaming factory data to the cloud.
- - question: "How do I collect and log data from a PLC?"
- answer: >
- In FlowFuse, you build a flow that polls your PLC at a set interval (or subscribes to events), transforms the tag data, and writes it to your destination, a CSV file, InfluxDB, TimescaleDB, PostgreSQL, or a cloud data lake. You can also trigger logging on events (alarms, production counts, shift changes) rather than polling. FlowFuse manages deployment, versioning, and monitoring of these flows across multiple edge devices.
- - question: "Can FlowFuse replace my existing SCADA system?"
- answer: >
- FlowFuse can augment or replace traditional SCADA systems. It provides real-time monitoring, custom dashboards via FlowFuse Dashboard, alarm management, and control logic — without the cost and inflexibility of monolithic SCADA software. Many organizations start by running FlowFuse alongside their existing SCADA to add cloud connectivity or modern dashboards, then expand from there.
- - question: "How do I send data from a PLC to the cloud?"
- answer: >
- Install the FlowFuse Device Agent on an industrial PC, Raspberry Pi, or supported edge device already inside your plant network. Connect it to your PLC over OPC UA, S7, EtherNet/IP, or Modbus, then add a flow that publishes the tag data to MQTT, a REST API, or a cloud data platform. The Device Agent only opens outbound connections, so PLC data reaches the cloud without opening inbound firewall ports or standing up a VPN.
- - question: "Do I need a dedicated PLC-to-cloud gateway?"
- answer: >
- No. A dedicated hardware gateway is one way to bridge a PLC to the cloud, but it adds cost, another vendor relationship, and another device to patch and maintain. FlowFuse replaces that hardware with software — install the Device Agent on an industrial PC or edge device you already own, and it handles protocol translation, local buffering, and the outbound cloud connection without a separate gateway appliance.
- - question: "Can one platform connect both PLC and SCADA data to the cloud?"
- answer: >
- Yes. FlowFuse reads tag and alarm data directly from PLCs over OPC UA, S7, EtherNet/IP, or Modbus, and can also poll or subscribe to existing SCADA historians and OPC servers. Both sources are normalized in the same flow and published to the same MQTT broker or cloud destination, so you don't need separate integrations for the controller layer and the supervisory layer.
- - question: "How do I integrate PLC, SCADA, and MES data without vendor lock-in?"
- answer: >
- Standardize on an integration layer that speaks open protocols instead of committing to one vendor's ecosystem. FlowFuse connects to PLCs and SCADA using OPC UA, MQTT, and Modbus, and pushes structured data to any MES, ERP, or database over REST or SQL. Because the logic lives in portable, open-source Node-RED flows rather than a proprietary gateway configuration, you can swap PLC brands, MES vendors, or cloud providers later without rebuilding the integration.
- - question: "Why does PLC communication have latency, and how do I fix it?"
- answer: >
- Latency almost never comes from the protocol itself — it comes from polling every tag at the same rate, timeouts set from guesswork instead of measurement, too many requests competing for the controller's scan budget, and single-write telemetry instead of buffered batches. Tiering poll rates, measuring timeouts, and sampling at the source fixes most PLC communication latency without touching the network. See our full guide on fixing PLC communication latency for a step-by-step walkthrough.
- - question: "Does FlowFuse work on-premises or in the cloud?"
- answer: >
- Both. FlowFuse runs on FlowFuse Cloud (fully managed, no infrastructure to maintain), self-managed on your own servers or private cloud, or directly on edge devices running the FlowFuse Device Agent. For PLC connectivity, many teams deploy the Device Agent on an industrial PC close to the machines, so data never has to leave the plant unless you choose to send it.
-image: /landing/images/plc-landing-image.png
-protocols:
- - icon: "components/icons/globe-alt.svg"
- title: "OPC UA"
- description: "The IIoT standard. Connect to any OPC UA-enabled PLC, Siemens, Allen-Bradley, Beckhoff, and more, with built-in security and structured data models."
- links:
- - text: "OPC UA Tutorial →"
- url: "/blog/2025/07/reading-and-writing-plc-data-using-opc-ua/"
- - icon: "components/icons/wifi.svg"
- title: "MQTT"
- description: "Publish PLC tag data to any MQTT broker, AWS IoT, Azure IoT Hub, HiveMQ, or the built-in FlowFuse MQTT Broker. The foundation of a Unified Namespace."
- links:
- - text: "PLC to MQTT Guide →"
- url: "/blog/2025/10/plc-to-mqtt-using-flowfuse/"
- - icon: "components/icons/chip.svg"
- title: "EtherNet/IP"
- description: "Native Allen-Bradley / Rockwell communication. Read and write tags on ControlLogix and CompactLogix PLCs without a gateway."
- links:
- - text: "EtherNet/IP Guide →"
- url: "/blog/2025/10/using-ethernet-ip-with-flowfuse/"
- - icon: "components/icons/server-stack.svg"
- title: "Siemens S7 Protocol"
- description: "Direct S7comm connectivity to Siemens S7-300, S7-400, S7-1200, and S7-1500 PLCs. Read DB blocks, Merkers, I/O, and more."
- links:
- - text: "Siemens S7 Integration Guide →"
- url: "/blog/2025/01/integrating-siemens-s7-plcs-with-node-red-guide/"
- - icon: "components/icons/arrows-pointing-out.svg"
- title: "Modbus TCP / RTU"
- description: "The universal open protocol. Connect legacy PLCs, drives, meters, and sensors that speak Modbus, over Ethernet or serial."
- links:
- - text: "Modbus Guide →"
- url: "/blog/2025/09/using-modbus-with-flowfuse/"
- - icon: "components/icons/squares-plus.svg"
- title: "5,000+ Community Nodes"
- description: "Beyond the basics: PROFINET, BACnet, DNP3, IEC 61850, Mitsubishi MC Protocol, Omron FINS, Beckhoff TwinCAT ADS, and more, all available as open-source community nodes."
- links:
- - text: "Browse Node Library →"
- url: "/integrations/"
-steps:
- - number: "1"
- title: "Connect Your PLC"
- description: "Drop a protocol node into your flow canvas, OPC UA, S7, EtherNet/IP, or Modbus. Enter your PLC's IP address and tag list. Data starts flowing in seconds."
- - number: "2"
- title: "Transform & Route"
- description: "Filter, scale, aggregate, or enrich tag data using visual flow logic. Route it to MQTT, databases, dashboards, REST APIs, or cloud services, all in one flow."
- - number: "3"
- title: "Deploy & Scale"
- description: "Push your flow to one edge device or a thousand with one click. Monitor health, update remotely, roll back instantly, all from the FlowFuse central platform."
-advantages:
- - title: "Protocol-agnostic"
- description: "One platform connects Siemens, Allen-Bradley, Omron, Mitsubishi, legacy Modbus, and modern OPC UA, no vendor lock-in."
- - title: "Low-code, fast to deploy"
- description: "Drag-and-drop flows replace months of custom integration work. Go from PLC to live dashboard in hours, not weeks."
- - title: "Edge + cloud flexibility"
- description: "Run close to the machine on an industrial PC, in your private cloud, or on FlowFuse Cloud, or all three simultaneously."
- - title: "Store-and-forward resilience"
- description: "Buffer PLC data locally during network outages and forward it when connectivity is restored, zero data loss at the edge."
- - title: "Open-source core"
- description: "5,000+ open-source community nodes for protocols, integrations, and data transformation. No proprietary runtime fees, no protocol licensing costs."
- - title: "Enterprise-ready"
- description: "Role-based access, audit logs, DevOps pipelines, team collaboration, and professional support, for production OT environments."
-resources:
- - title: "How to Connect Any PLC to MQTT in Under an Hour"
- image: "./blog/2025/10/images/plc-to-mqtt.png"
- alt: "PLC to MQTT integration diagram"
- url: "/blog/2025/10/plc-to-mqtt-using-flowfuse/"
- - title: "OPC UA Tutorial: Connect and Exchange Data with Industrial Equipment"
- image: "blog/2025/07/images/opcua-tutorial.png"
- alt: "OPC UA tutorial illustration"
- url: "/blog/2025/07/reading-and-writing-plc-data-using-opc-ua/"
- - title: "How to Log PLC Data to CSV Files"
- image: "./blog/2025/10/images/log-plc-data-to-csv.png"
- alt: "PLC data logging illustration"
- url: "/blog/2025/10/how-to-log-plc-data-csv-files/"
- - title: "Getting Started: Integrating Siemens S7 PLCs with Node-RED"
- image: "./blog/2025/01/images/s7-with-node-red.png"
- alt: "Siemens S7 PLC integration guide"
- url: "/blog/2025/01/integrating-siemens-s7-plcs-with-node-red-guide/"
- - title: "EtherNet/IP Integration: Communicating with Allen-Bradley PLCs"
- image: "./blog/2025/10/images/allen-bradly-plc.png"
- alt: "Allen-Bradley PLC with EtherNet/IP"
- url: "/blog/2025/10/using-ethernet-ip-with-flowfuse/"
- - title: "How to Connect to Beckhoff TwinCAT PLC Using ADS"
- image: "./blog/2026/03/images/backoff-twincat.png"
- alt: "Beckhoff TwinCAT ADS integration"
- url: "/blog/2026/03/how-to-connect-to-twincat-using-ads/"
- - title: "Building a Web HMI for Factory Equipment Control"
- image: "./blog/2025/11/images/building-a-web-hmi-for-factory.png"
- alt: "Web HMI dashboard for factory"
- url: "/blog/2025/11/building-hmi-for-equipment-control/"
- - title: "Store-and-Forward: Buffering PLC Data During Network Outages"
- image: "./blog/2025/11/images/store-and-forward.png"
- alt: "Store and forward edge buffering"
- url: "/blog/2025/11/store-and-forward-edge-data-buffering/"
- - title: "Fixing PLC Communication Latency: Where the Milliseconds Really Go"
- image: "./blog/2026/06/images/fixing-plc-communication.png"
- alt: "Diagnosing and fixing PLC communication latency"
- url: "/blog/2026/06/plc-communication-latency-causes-and-fixes/"
----
-{% from "components/cta/cta-sign-up.njk" import ctaSignUp %}
-{% from "components/cta/cta-contact-us.njk" import ctaContactUs %}
-{% from "components/cta/cta-book-demo.njk" import ctaBookDemo %}
-
-
-
-
-
-
-
-
- Connect Your PLCs to the Modern Industrial Stack
-
-
- FlowFuse bridges Programmable Logic Controllers, Siemens, Allen-Bradley, Omron, and more, to MQTT, OPC UA, cloud platforms, and enterprise systems. No expensive gateways, no custom code.
-
- {% image "./images/plc-landing-image.png", "PLC connected to cloud, MQTT, and dashboards via FlowFuse", [496] %}
-
-
-
-
-
-
-
-
-
-
What is a PLC?
-
-
-
- A Programmable Logic Controller (PLC) is a ruggedized industrial computer that automates electromechanical processes on the factory floor, controlling machines, conveyor belts, assembly lines, packaging systems, and more.
-
-
- PLCs continuously execute a scan cycle: they read inputs from sensors and field devices, run a control program (written in ladder logic, structured text, or function block diagrams), and write outputs to actuators, motors, and valves.
-
-
- Originally designed for deterministic machine control, modern PLCs also expose data over standard industrial protocols, making them the primary data source for IIoT, SCADA, MES, and digital transformation initiatives.
-
- PLCs generate rich, real-time data, production counts, machine states, alarms, energy readings, but that data is often trapped. Getting it into dashboards, databases, cloud analytics, or ERP systems traditionally requires expensive SCADA licenses, proprietary gateways, or months of custom integration work. FlowFuse changes that.
-
-
-
-
-
-
-
-
-
Send PLC Data to the Cloud, Without a Gateway or Vendor Lock-In
-
- The fastest way to get PLC data to the cloud is to skip the dedicated gateway appliance entirely. Install the FlowFuse Device Agent on an industrial PC, Raspberry Pi, or supported edge device already inside your plant network. It connects to your PLC over OPC UA, S7, EtherNet/IP, or Modbus, and opens only outbound connections to publish that data to MQTT, a REST API, or a cloud data platform — no inbound firewall rules, no VPN, no separate gateway hardware to buy and maintain.
-
-
-
-
PLC + SCADA, one integration
-
Pull tag data straight from the controller and poll your existing SCADA historian or OPC server in the same flow — one platform covers both layers instead of two separate integrations.
-
-
-
MES and ERP, without rebuilding per site
-
Route production counts, downtime, and quality data from the PLC into SAP, Oracle, or any MES over REST or SQL. Build the flow once and deploy it to every plant.
-
-
-
No vendor lock-in
-
Integration logic lives in open-source Node-RED flows, not a proprietary gateway config. Swap PLC brands, MES vendors, or cloud providers later without starting over.
- FlowFuse's built-in low-code runtime includes 5,000+ nodes for industrial protocols. Drag in a protocol node, configure your PLC's address, and data flows. No gateway hardware required.
-
-
-
- {% for protocol in protocols %}
-
-
- {% include protocol.icon %}
-
-
{{ protocol.title }}
-
{{ protocol.description }}
- {% for link in protocol.links %}
- {{ link.text }}
- {% endfor %}
-
- {% endfor %}
-
-
-
-
-
-
-
-
What You Can Build with PLC + FlowFuse
-
-
-
-
-
- {% include "components/icons/circle-stack.svg" %}
-
-
-
PLC Data Logging
-
- Collect tag values, machine states, and counters at any interval. Write to InfluxDB, TimescaleDB, PostgreSQL, or CSV, for OEE tracking, trend analysis, and compliance.
-
- {% include "components/icons/computer-desktop.svg" %}
-
-
-
Web HMI & Dashboards
-
- Build modern operator interfaces that display live PLC data, gauges, trends, alarms, and controls, accessible from any browser without proprietary HMI software.
-
- Stream PLC data to AWS IoT, Azure IoT Hub, Google Cloud, or any REST API. Enable predictive maintenance, AI analytics, and enterprise reporting without replacing your PLCs.
-
- Bridge the OT/IT gap. Route production counts, downtime events, and quality data from PLCs directly into SAP, Oracle, or any MES, eliminating manual entry and delays.
-
- {% include "components/icons/bell-alert.svg" %}
-
-
-
Alarm Management
-
- Subscribe to PLC fault bits and alarm words, route notifications to Slack, email, SMS, or PagerDuty, and log alarm history for root-cause analysis.
-
-
-
-
-
-
- {% include "components/icons/wifi.svg" %}
-
-
-
Unified Namespace (UNS)
-
- Use FlowFuse as the adapter layer between your PLCs and an MQTT-based UNS. Normalize data from Siemens, Allen-Bradley, and legacy equipment into a common topic hierarchy.
-
- Stop paying for expensive gateways and inflexible SCADA licenses. See how FlowFuse connects your PLCs to the modern industrial stack, in a live demo or a free trial.
-