node-js-module-in-workflow

This error occurs when you try to import or use Node.js core modules (like fs, http, crypto, path, etc.) directly inside a workflow function.


Error Message

Cannot use Node.js module "fs" in workflow functions. Move this module to a step function.

Why This Happens

Workflow functions run in a sandboxed environment without full Node.js runtime access. This restriction is important for maintaining determinism - the ability to replay workflows exactly and resume from where they left off after suspensions or failures.

Node.js modules have side effects and non-deterministic behavior that could break workflow replay guarantees.


Quick Fix

Move any code using Node.js modules to a step function. Step functions have full Node.js runtime access.

For example, when trying to read a file in a workflow function, you should move the code to a step function.

Before:

import * as fs from 'fs';

export async function processFileWorkflow(filePath: string) {
  "use workflow";

  // This will cause an error - Node.js module in workflow context
  const content = fs.readFileSync(filePath, 'utf-8'); 
  return content;
}

After:

import * as fs from 'fs';

export async function processFileWorkflow(filePath: string) {
  "use workflow";

  // Call step function that has Node.js access
  const content = await read(filePath); 
  return content;
}

async function read(filePath: string) {
  "use step";

  // Node.js modules are allowed in step functions
  return fs.readFileSync(filePath, 'utf-8'); 
}

Common Node.js Modules

These common Node.js core modules cannot be used in workflow functions:

  • File system: fs, path
  • Network: http, https, net, dns, fetch
  • Process: child_process, cluster
  • Crypto: crypto (use Web Crypto API instead)
  • Operating system: os
  • Streams: stream (use Web Streams API instead)

You can use Web Platform APIs in workflow functions (like Headers, crypto.randomUUID(), Response, etc.), since these are available in the sandboxed environment.