FlowDSL
Studio
Tools

JavaScript SDK Reference

Reference for the @flowdsl/sdk — implementing FlowDSL nodes in TypeScript and Node.js.

@flowdsl/sdk is the official TypeScript/JavaScript SDK for implementing FlowDSL node handlers in Node.js.

Installation

shell
npm install @flowdsl/sdk
# or
yarn add @flowdsl/sdk

Core types

typescript
import {
  BaseNode,
  NodeInput,
  NodeOutput,
  NodeError,
  ErrorCode,
  NodeServer,
} from '@flowdsl/sdk'

BaseNode

typescript
abstract class BaseNode {
  abstract operationId: string

  async init(settings: Record<string, unknown>): Promise<void> {}

  abstract handle(input: NodeInput): Promise<NodeOutput>
}

NodeInput

typescript
interface NodeInput {
  packet(portName: string): Promise<Packet>
  context: ExecutionContext
}

Packet

typescript
interface Packet {
  data: Record<string, unknown>
  get(key: string, defaultValue?: unknown): unknown
  getString(key: string, defaultValue?: string): string
  getNumber(key: string, defaultValue?: number): number
  getBoolean(key: string, defaultValue?: boolean): boolean
  has(key: string): boolean
}

NodeOutput

typescript
class NodeOutput {
  send(portName: string, data: Record<string, unknown> | Packet): NodeOutput
}

Complete example

typescript
import { BaseNode, NodeInput, NodeOutput, NodeError, ErrorCode, NodeServer } from '@flowdsl/sdk'

class FilterNode extends BaseNode {
  operationId = 'filter_by_priority'
  private urgentPriorities = new Set(['P0', 'P1'])

  async init(settings: Record<string, unknown>): Promise<void> {
    const priorities = settings.urgentPriorities as string[] | undefined
    if (priorities) {
      this.urgentPriorities = new Set(priorities)
    }
  }

  async handle(input: NodeInput): Promise<NodeOutput> {
    const payload = await input.packet('in')
    const priority = payload.getString('priority', 'P2')

    if (this.urgentPriorities.has(priority)) {
      return new NodeOutput().send('urgent_out', payload.data)
    }
    return new NodeOutput().send('normal_out', payload.data)
  }
}

const server = new NodeServer({
  port: 8080,
  manifestFile: 'flowdsl-node.json',
})
server.register(new FilterNode())
server.listen()

Next steps

Copyright © 2026