Appearance
What is FlowPad?
FlowPad is a Matrix browser package — @open-matrix/flowpad — that gives developers and integrators a live, editable workbench for composing data-flow pipelines and running them against the actors mounted in their Host. It is the closest thing the Matrix substrate has to a hands-on "REPL for actors."
In substrate vocabulary: Matrix is docker-for-actors / npm-for-actors — a typed pub/sub/RPC fabric where every Feed, Service, and Component is an actor on a federated bus. FlowPad is one vertical built on that fabric: a developer surface for the Compositional UI wedge of the thesis (Vertical C). The fabric is the substrate; FlowPad is one app on the substrate.
matrix.json describes it (projects/matrix-3/packages/flowpad/matrix.json:1-23):
json
{
"name": "@open-matrix/flowpad",
"version": "0.2.6",
"description": "FlowPad — Matrix interactive data flow visualization",
"webapp": {
"distDir": "dist",
"entry": "index.html",
"appName": "flowpad",
"displayName": "FlowPad",
"icon": "📋",
"navOrder": 40,
"description": "Interactive actor data-flow workspace",
"shells": ["platform", "edge"]
},
"components": [],
"permissions": { "fsPolicy": "none" }
}There is no headless actor in the manifest's components array. FlowPad is a pure browser package: every actor instance is created in the page when the <flowpad-app> custom element mounts.
What you see when you open it
The page is laid out by flowpad.template.ts (projects/matrix-3/packages/flowpad/src/template/flowpad.template.ts) into four regions:
| Region | Custom element | What it shows |
|---|---|---|
| Header strip | <flowpad-control id="headerControl"> | Page-topic mailbox tag and FlowPad title bar; transport indicator (Local InMemory / federated NATS) |
| Sidebar | <flowpad-sidebar> | Actor tree, package browser, example list, filter input, collapse toggle |
| Workspace | <pipeline-editor> + <results-panel> | The code editor and the result viewers (data, table, tree, error) |
| Dock | <mx-dock> | Tabbed bottom pane; first tab is <transport-log>, additional tabs are added by VLM/debug viewers |
Each divider is a <mx-split> from @open-matrix/core/framework/components, so every region is independently resizable.
Two run modes
The pipeline editor auto-detects which language you typed (projects/matrix-3/packages/flowpad/src/components/PipelineEditor.ts:259-282):
- Flow DSL — JavaScript-flavoured fluent calls like
flow().fromValue({...}).viaRemote("./db", "Query").mapLocal(rows => ...). Each call corresponds to one stage in an execution plan. - LISP / Scheme — anything that begins with
(after stripping;comments. The editor turns green and the source is wrapped for the VLM (Virtual LISP Machine) at./vlm-evalbefore execution.
Both modes compile to the same Canonical Internal Representation (IQueryExecutionIR or IComponentSchemaIR) defined in projects/matrix-3/packages/flowpad/src/runtime/queryPipeline.ts:42-60, then execute through executeCanonicalIR against the bound actors.
What runs underneath
When FlowpadApp bootstraps it adds eleven service children to its mount (FlowpadApp.ts:212-246):
db, flow-runner, security-realm, topic-claims,
lisp, scheme, bootstrap,
vlm-router, vlm-join, vlm-atomizer, vlm-eval,
vlm-node-0 .. vlm-node-4 (five bootstrap nodes for parallel execution)Five built-in examples (Basic Query, Filter & Map, Query Tree, Scheme Eval, Security Policy) are coded in FlowpadApp.ts:131-203 and exercise these services. The much larger DSL example library lives in dsl/examples.ts (~1270 lines covering themes, table viewers, render components, security demos, COM bridge, topic claiming, and federation).
What FlowPad is not
- Not a kanban or whiteboard. There are no boards, cards, or links in the codebase. The original docs draft used those words; they don't reflect any source code.
- Not a runtime supervisor. FlowPad runs entirely in the browser; only its NATS transport reaches outside the page. It is a Package the substrate's runtime hosts, not a runtime itself.
- Not the substrate. FlowPad is one vertical on the substrate. The substrate is the bus, the registry, the catalog, the identity model, federation. FlowPad uses all of those; it doesn't define any of them.
- Not domain-specific. It is a general-purpose actor explorer; what it can do depends on what actors exist at the addresses you target (
./db,./scheme,$TARGET,$CATALOG_TARGET, etc.).
See also
Source:
projects/matrix-3/packages/flowpad/src/FlowpadApp.tsandprojects/matrix-3/packages/flowpad/src/template/flowpad.template.ts.