FlowDSL
Studio
Spec

FlowDSL Document Reference

Top-level fields of a FlowDSL document.

A FlowDSL document is a YAML or JSON file that describes an executable flow graph. This page covers every top-level field.

Top-level fields

FieldTypeRequiredDescription
flowdslstringYesSpecification version. Currently "1.0".
infoInfo objectYesDocument metadata.
externalDocsExternalDocs objectNoLinks to related documentation.
asyncapistringNoPath or URL to an AsyncAPI document for message references.
openapistringNoPath or URL to an OpenAPI document for schema references.
nodesobjectYesMap of NodeName → Node object. Node names must be PascalCase.
edgesarrayYesArray of Edge objects.
componentsComponents objectNoReusable packets, events, policies, and node templates.

info object

FieldTypeRequiredDescription
titlestringYesHuman-readable name for the flow.
versionstringYesFlow document version (semver recommended).
descriptionstringNoLonger description. Supports markdown.
contactobjectNoname, email, url of the owning team.
licenseobjectNoname and url of the flow's license.

Complete example

yaml
flowdsl: "1.0"
info:
  title: Order Fulfillment
  version: "2.1.0"
  description: |
    Processes customer orders from receipt to shipment confirmation.
    Handles payment, inventory reservation, and customer notification.
  contact:
    name: Platform Team
    email: [email protected]
  license:
    name: Apache-2.0
    url: https://www.apache.org/licenses/LICENSE-2.0

externalDocs:
  url: https://github.com/mycompany/event-schemas/blob/main/asyncapi.yaml
  description: AsyncAPI event schema definitions

asyncapi: "./events.asyncapi.yaml"

nodes:
  OrderReceived:
    operationId: receive_order
    kind: source
    outputs:
      out: { packet: OrderPayload }

  ValidateOrder:
    operationId: validate_order
    kind: transform
    inputs:
      in: { packet: OrderPayload }
    outputs:
      out: { packet: ValidatedOrder }

  ChargePayment:
    operationId: charge_payment
    kind: action
    inputs:
      in: { packet: ValidatedOrder }
    outputs:
      out: { packet: PaymentResult }

edges:
  - from: OrderReceived
    to: ValidateOrder
    delivery:
      mode: direct
      packet: OrderPayload

  - from: ValidateOrder
    to: ChargePayment
    delivery:
      mode: durable
      packet: ValidatedOrder
      idempotencyKey: "{{payload.orderId}}-charge"

components:
  packets:
    OrderPayload:
      type: object
      properties:
        orderId: { type: string }
        customerId: { type: string }
        total: { type: number }
        currency: { type: string }
      required: [orderId, customerId, total, currency]

JSON equivalent

json
{
  "flowdsl": "1.0",
  "info": {
    "title": "Order Fulfillment",
    "version": "2.1.0"
  },
  "nodes": {
    "OrderReceived": {
      "operationId": "receive_order",
      "kind": "source",
      "outputs": { "out": { "packet": "OrderPayload" } }
    }
  },
  "edges": [
    {
      "from": "OrderReceived",
      "to": "ValidateOrder",
      "delivery": { "mode": "direct", "packet": "OrderPayload" }
    }
  ],
  "components": {
    "packets": {
      "OrderPayload": {
        "type": "object",
        "properties": {
          "orderId": { "type": "string" }
        }
      }
    }
  }
}

Validation

Validate any FlowDSL document against the JSON Schema:

shell
# Using ajv-cli
npx ajv-cli validate \
  -s https://flowdsl.com/schemas/v1/flowdsl.schema.json \
  -d my-flow.flowdsl.yaml

# Using the FlowDSL CLI
flowdsl validate my-flow.flowdsl.yaml

Next steps

Copyright © 2026