FlowDSL
Studio
Reference

Node Manifest Reference

Complete field reference for the flowdsl-node.json node manifest format — identity, runtime, ports, settingsSchema, and publishing.

A Node Manifest is a .flowdsl-node.json file that describes a single installable node in the repo.flowdsl.com registry. It captures the node's identity, runtime requirements, typed port contracts, and the settings schema used to render configuration forms in FlowDSL Studio.

Schema: https://flowdsl.com/schemas/v1/flowdsl-node.schema.json


File format

Node manifests use the .flowdsl-node.json extension and validate against the flowdsl-node.schema.json schema (JSON Schema Draft-07).

json
{
  "id": "flowdsl/email-fetcher",
  "name": "Email Fetcher",
  "version": "1.0.0",
  "summary": "Polls an IMAP or POP3 mailbox and emits one event per received email.",
  "kind": "source",
  "language": "python",
  "author": { "name": "FlowDSL Team", "url": "https://flowdsl.com" },
  "license": "Apache-2.0",
  "runtime": {
    "handler": "flowdsl.nodes.email.EmailFetcherNode",
    "supports": ["proc"]
  },
  "outputs": [ ... ],
  "settingsSchema": { ... },
  "published": true,
  "publishedAt": "2026-01-15T10:00:00Z"
}

Top-level fields

FieldTypeRequiredDescription
idstringyesUnique registry identifier. Format: <namespace>/<slug>. e.g. flowdsl/email-fetcher
namestringyesHuman-readable display name shown in Studio and the marketplace.
versionstringyesSemver version of this manifest.
summarystringyesOne-line description shown in search results and Studio tooltips.
descriptionstringnoFull markdown description rendered on the registry detail page.
kindenumyesFunctional category. See Node kinds.
languageenumyesImplementation language: go, python, or nodejs.
authorobjectyesNode author. See Author.
licensestringyesSPDX license identifier, e.g. Apache-2.0.
repoUrlstring (URI)noSource code repository URL.
docsUrlstring (URI)noDocumentation page URL.
iconstringnoEmoji or icon name displayed in Studio.
colorstringnoHex color for the Studio node card, e.g. #4F46E5.
tagsstringnoSearch and filter tags for the registry.
runtimeobjectyesRuntime configuration. See Runtime.
inputsNodePortnoNamed input ports. See Ports.
outputsNodePortnoNamed output ports. See Ports.
settingsSchemaobjectnoJSON Schema object driving the Studio settings form. See settingsSchema.
dependenciesstringnoOther node IDs required at runtime.
minRuntimeVersionstringnoMinimum FlowDSL runtime version required.
publishedbooleanyesWhether the node is visible in the registry.
publishedAtstring (date-time)noISO 8601 timestamp when this version was published.

Port object

Input and output ports are described as objects in the inputs and outputs arrays:

FieldTypeRequiredDescription
namestringYesPort name (matches port name in the flow document)
packetstringNoPacket type reference
descriptionstringNoDescription of this port
requiredbooleanNoWhether this port must have an incoming packet (default: true)

Supported protocols

The runtime field in a FlowDSL document’s node definition includes a supports array listing which communication protocols the node can use. The specific protocol for a connection is selected on the edge via the protocol field.

FieldTypeDefaultDescription
runtime.supportsstring["grpc"]Protocols this node supports: "proc", "grpc", "http", "nats", "kafka", "redis", "zeromq", "rabbitmq", or "websocket"

gRPC config

FieldTypeDefaultDescription
runtime.grpc.portinteger50051gRPC listen port
runtime.grpc.streamingbooleanfalseWhether the node supports InvokeStream
runtime.grpc.maxConcurrentStreamsintegerMax concurrent gRPC streams
runtime.grpc.tlsbooleanWhether TLS is required

NATS config

FieldTypeDefaultDescription
runtime.nats.urlstring (uri)NATS server URL
runtime.nats.subjectstringNATS subject to subscribe/publish on
runtime.nats.queueGroupstringQueue group for load balancing

Redis config

FieldTypeDefaultDescription
runtime.redis.urlstring (uri)Redis server URL
runtime.redis.channelstringRedis channel or pattern

ZeroMQ config

FieldTypeDefaultDescription
runtime.zeromq.addressstringZeroMQ bind/connect address
runtime.zeromq.patternstring"pubSub", "pushPull", or "reqRep"

RabbitMQ config

FieldTypeDefaultDescription
runtime.rabbitmq.urlstring (uri)AMQP connection URL
runtime.rabbitmq.exchangestringExchange name
runtime.rabbitmq.routingKeystringRouting key
runtime.rabbitmq.queuestringQueue name

WebSocket config

FieldTypeDefaultDescription
runtime.websocket.urlstring (uri)WebSocket server URL
runtime.websocket.pathstringWebSocket endpoint path

The top-level grpcPort field in a node manifest is a convenient shorthand — equivalent to setting runtime.grpc.port.

See Communication Protocols for full protocol details and usage guidance.

Complete example

json
{
  "operationId": "llm_classify_email",
  "name": "LLM Email Classifier",
  "version": "2.3.1",
  "description": "Classifies support emails as urgent, normal, or spam using a language model. Returns a classification with confidence score and reasoning.",
  "runtime": "python",
  "inputs": [
    {
      "name": "in",
      "packet": "EmailPayload",
      "description": "The email to classify",
      "required": true
    }
  ],
  "outputs": [
    {
      "name": "out",
      "packet": "AnalysisResult",
      "description": "Classification result with confidence score"
    }
  ],
  "settings": {
    "type": "object",
    "properties": {
      "model": {
        "type": "string",
        "default": "gpt-4o-mini",
        "description": "LLM model to use for classification",
        "enum": ["gpt-4o", "gpt-4o-mini", "claude-3-5-sonnet-20241022"]
      },
      "temperature": {
        "type": "number",
        "default": 0.1,
        "minimum": 0,
        "maximum": 2,
        "description": "Model temperature. Lower = more deterministic."
      },
      "systemPrompt": {
        "type": "string",
        "description": "Custom system prompt. Uses a carefully tuned default if omitted."
      },
      "maxTokens": {
        "type": "integer",
        "default": 500,
        "minimum": 100,
        "maximum": 4000
      }
    }
  },
  "repository": "https://github.com/myorg/flowdsl-nodes",
  "author": "My Team",
  "email": "[email protected]",
  "license": "Apache-2.0",
  "tags": ["llm", "email", "classification", "nlp", "support"],
  "minRuntimeVersion": "1.0.0"
}

Versioning

Node versions follow semver:

Change typeVersion bumpExample
Bug fix, no contract changePatch2.3.0 → 2.3.1
New optional input/output portMinor2.3.0 → 2.4.0
Renamed port, removed output, changed packet typeMajor2.3.0 → 3.0.0

Before bumping major versions, update all FlowDSL documents that reference this operationId.

settings schema

The settings field is a JSON Schema Draft-07 object describing the node's static configuration. The runtime validates the settings provided in the FlowDSL node definition against this schema at startup.

Provide defaults for all optional settings so the node works correctly when settings are omitted.

Next steps

Copyright © 2026