diff --git a/utils/jsffi/dyld.mjs b/utils/jsffi/dyld.mjs
index aee3bf7f25b395dc924a20a50c04a733f96c6004..5113e05057fecee879fbb6b54dc500aa13b16d72 100755
--- a/utils/jsffi/dyld.mjs
+++ b/utils/jsffi/dyld.mjs
@@ -93,7 +93,7 @@ import fs from "node:fs";
 import path from "node:path";
 import stream from "node:stream";
 import { WASI } from "node:wasi";
-import { JSValManager } from "./prelude.mjs";
+import { JSValManager, setImmediate } from "./prelude.mjs";
 import { parseRecord, parseSections } from "./post-link.mjs";
 
 // Make a consumer callback from a buffer. See Parser class
diff --git a/utils/jsffi/prelude.mjs b/utils/jsffi/prelude.mjs
index 91015283caa7562bdb574e78ced468fde57bf4c9..7af91e52adde0bc1db3ba364a2ee38c4da366712 100644
--- a/utils/jsffi/prelude.mjs
+++ b/utils/jsffi/prelude.mjs
@@ -39,7 +39,7 @@ export class JSValManager {
 // To benchmark different setImmediate() implementations in the
 // browser, use https://github.com/jphpsf/setImmediate-shim-demo as a
 // starting point.
-const setImmediate = await (async () => {
+export const setImmediate = await (async () => {
   // node, bun, or other scripts might have set this up in the browser
   if (globalThis.setImmediate) {
     return globalThis.setImmediate;