Skip to main content

Multi-Tool Workflow

A workflow that chains multiple heterogeneous tools: a JavaScript data generator, a Python processing container, and three different visualization libraries rendering the same data in parallel.

Architecture

Loading diagram...

The same output data is fanned out to three independent visualization metaframes. Each renders independently; the layout is configured in metapage.json.

metapage.json

{
"version": "2",
"metaframes": {
"generator": {
"url": "https://random.mtfm.io/#?distribution=sin"
},
"processor": {
"url": "https://container.mtfm.io/#?queue=<queue>&image=python:3.12-slim",
"inputs": [
{ "metaframe": "generator", "source": "data", "target": "raw.json" }
]
},
"plotly": {
"url": "https://plotly.mtfm.io/",
"inputs": [
{ "metaframe": "processor", "source": "processed.json", "target": "data" }
]
},
"vega": {
"url": "https://vega.mtfm.io/",
"inputs": [
{ "metaframe": "processor", "source": "processed.json", "target": "data" }
]
},
"d3": {
"url": "https://d3.mtfm.io/",
"inputs": [
{ "metaframe": "processor", "source": "processed.json", "target": "data" }
]
}
}
}

Key patterns

Fan-out

A single output can be routed to multiple downstream metaframes by defining the same source in multiple inputs arrays. The routing layer sends a copy of each output to every subscribed target.

Mixing JS and container metaframes

JavaScript metaframes and container metaframes operate on the same data model. JS frames pass data directly via postMessage; container frames pass files. The metapage routing layer handles the serialization transparently.

Parallel rendering

Because each visualization metaframe is independent, they render in parallel. If one chart is slow to load, the others continue rendering unaffected.