WORKFLOW_SERIALIZE

A symbol used to define custom serialization for user-defined class instances. The static method should accept an instance and return serializable data.

Usage

import { WORKFLOW_SERIALIZE, WORKFLOW_DESERIALIZE } from "@workflow/serde";

class Point {
  constructor(public x: number, public y: number) {}

  static [WORKFLOW_SERIALIZE](instance: Point) {
    return { x: instance.x, y: instance.y };
  }

  static [WORKFLOW_DESERIALIZE](data: { x: number; y: number }) {
    return new Point(data.x, data.y);
  }
}

API Signature

static [WORKFLOW_SERIALIZE](instance: T): SerializableData

Parameters

NameTypeDescription
instanceTThe class instance to serialize.

Returns

The method should return serializable data. This can be:

  • Primitives (string, number, boolean, null, undefined, bigint)
  • Plain objects with serializable values
  • Arrays of serializable values
  • Built-in serializable types (Date, Map, Set, RegExp, URL, etc.)
  • Other custom classes that implement serialization

Requirements

The method must be implemented as a static method on the class. Instance methods are not supported.

  • Both WORKFLOW_SERIALIZE and WORKFLOW_DESERIALIZE must be implemented together
  • The returned data must itself be serializable
  • The SWC compiler plugin automatically detects and registers classes that implement these symbols

This method runs inside the workflow context and is subject to the same constraints as "use workflow" functions:

  • No Node.js-specific APIs (like fs, path, crypto, etc.)
  • No non-deterministic operations (like Math.random() or Date.now())
  • No external network calls

Keep this method simple and focused on extracting data from the instance.

On this page

GitHubEdit this page on GitHub