Open specification · Apache 2.0 · v1.0

Describe how events flow.
Run exactly that.

FlowDSL is one readable file for nodes, edges and delivery guarantees. Validate it, see it as a graph, run it on any runtime.

Read the spec
Sibling to OpenAPI and AsyncAPI.
Packet:
email-triage.flowdsl.yaml✓ valid
flowdsl: "1.0.0"
info:
title: Email triage
version: "1.0.0"
flows:
email_triage:
entrypoints:
- message: { $ref: "#/components/packets/EmailFetcherPacket" }
nodes:
EmailFetcher:
kind: source
operationId: fetch_inbox
runtime: { language: go }
LLMClassifier:
kind: llm
operationId: classify_intent
runtime: { language: python }
IntentRouter:
kind: router
operationId: route_by_intent
runtime: { language: go }
EmailSender:
kind: terminal
operationId: send_reply
runtime: { language: python }
SlackNotifier:
kind: action
operationId: notify_slack
runtime: { language: typescript }
edges:
- from: EmailFetcher
to: LLMClassifier
delivery: { mode: durable }
- from: LLMClassifier
to: IntentRouter
delivery: { mode: direct }
- from: IntentRouter
when: "output.name == 'routine'"
to: EmailSender
delivery: { mode: checkpoint }
- from: IntentRouter
when: "output.name == 'urgent'"
to: SlackNotifier
delivery: { mode: direct }
components:
packets:
EmailFetcherPacket: { type: object }
  1. routine
    urgent
NodeLLM Classifier

Classifies intent and urgency with an LLM; output is a typed packet.

kind
llm
operationId
classify_intent
runtime
Python · gRPC
inputs → outputs
packet → packet
running · Email Fetcher · hop 0/3Interactive preview · click nodes & edges
  1. 01

    Nodes are business logic

    Pure, testable units of work. No transport, no broker code inside.

  2. 02

    Edges carry the guarantee

    Pick a delivery mode per edge — in-process, Redis, Mongo, Postgres or Kafka.

  3. 03

    The runtime keeps the promise

    Retries, checkpoints and replay come from the edge policy, not glue code.

Edge delivery

Five guarantees. One line of YAML.

Choose how much an edge must survive. Same nodes, same code — only the policy changes. Try crashing the consumer.

durable
PRODUCERChargePayment
CONSUMERFulfillOrder
PACKET STOREMongoDB

consumer up · packets delivered

GuaranteeEvery packet persisted until acked
OverheadHigher
Backed byMongo / Postgres
- from: ChargePayment
  to: FulfillOrder
  delivery:
    mode: durable

Use it for: Money, orders and anything that must never be lost.

In production

Change a running app. No redeploy. No downtime.

A published flow version takes effect on the next request — the process keeps serving while you change what it does.

support-bot · production

POST /api/v1/support/chatv12

Publish a new version with a different LLM. The next request uses it.

flows/support-bot.yaml · v12
nodes:  Answer:    operationId: redelay/llm-chat    kind: llm    settings:      providerID: ollama      model: qwen3-14b      temperature: 0.2

Illustrative numbers. The mechanics are Redelay’s: deployments & A/B variants, trace, debug taps.

Node kinds

Ten kinds of node. Every graph is built from these.

The kind decides a node’s role and how Studio draws it. Pick one to see its card and YAML.

llmLLMClassifier
LLM Classifier
classify_intent

Calls a model and returns a typed result — prompts live in config, not code.

LLMClassifier:
  kind: llm
  operationId: classify_intent

Works with your specs

Completes the API spec family.

Keep your OpenAPI and AsyncAPI documents. FlowDSL references their schemas and adds the part they don’t describe: the flow.

View the JSON Schema
describesOpenAPIHTTP request & responseWhat an endpoint accepts and returns.$ref: "openapi#/components/schemas/Order"
describesAsyncAPIEvents & messagesWhat travels on a channel and its schema.$ref: "asyncapi#/components/messages/OrderPlaced"
addsFlowDSLExecutable flowsHow events move between nodes — and the guarantees.flowdsl: "1.0.0"

Get started

Write it. Validate it.Run it anywhere.

  1. DeclareNodes, edges and delivery in one .flowdsl.yaml.
  2. VisualizeThe canvas is a projection of the file — never the other way round.
  3. ExecuteGo runtime today; Python and TypeScript SDKs in development.
go run github.com/flowdsl/flowdsl-go/cmd/flowdsl-validate@v0.1.0 my-flow.flowdsl.json
Read the quick start
GoAvailable
Node handlers, spec parser, runtime interfaces
  • NodeHandler interface, packets and settings
  • Document parser + structural validator
  • Runtime interfaces: Engine, Checkpoint, DeliveryAdapter
go get github.com/flowdsl/flowdsl-go
Studio comingThe visual editor for FlowDSL, with two-way YAML sync. Join the waitlist.Join the waitlist

Runtime

Runs on Redelay.See it working.

FlowDSL's Go runtime is Redelay. Publish a flow version and it takes effect on the next request — no restart. Deployments carry stable and canary variants; debug taps watch node I/O without touching it.

redelay.com

Have a project? We'll quote it — free.

The team behind FlowDSL and Redelay builds new AI products — or adds the flow layer to systems you already run.

What do you need?

or use the stufio quote form

Sent to stufio, the studio behind FlowDSL and Redelay. Used only to reply. Privacy policy

Ecosystem

Open core.The rest is on its way.

  • Open sourceSpec, Go SDK, examples, assistant and reference runtime.Available
  • StudioVisual editor with two-way YAML sync.Coming soon
  • Node marketplaceShare and install community nodes.Coming soon
  • CloudRun FlowDSL flows as a managed service.Coming soon
Ask the docs

Answers from the FlowDSL documentation, with links — runs on open models.