diff --git a/utils/jsffi/dyld.mjs b/utils/jsffi/dyld.mjs
index e068f54239a2642db7f838ecf2558a6116665ad2..7c6f7688d4f831d49187404b24044034273e4bf3 100755
--- a/utils/jsffi/dyld.mjs
+++ b/utils/jsffi/dyld.mjs
@@ -277,7 +277,7 @@ const isNode = Boolean(globalThis?.process?.versions?.node);
 // factor out browser-only/node-only logic into different modules. For
 // now, just make these global let bindings optionally initialized if
 // isNode and be careful to not use them in browser-only logic.
-let fs, http, path, require, stream, wasi, ws;
+let fs, http, path, require, stream, util, wasi, ws, zlib;
 
 if (isNode) {
   require = (await import("node:module")).createRequire(import.meta.url);
@@ -286,7 +286,9 @@ if (isNode) {
   http = require("http");
   path = require("path");
   stream = require("stream");
+  util = require("util");
   wasi = require("wasi");
+  zlib = require("zlib");
 
   // Optional npm dependencies loaded via NODE_PATH
   try {
@@ -558,8 +560,17 @@ args.rpc.opened.then(() => main(args));
           return;
         }
 
+        res.setHeader("Content-Encoding", "br");
+
         res.writeHead(200);
-        res.end(buf);
+        res.end(
+          await util.promisify(zlib.brotliCompress)(buf, {
+            params: {
+              [zlib.constants.BROTLI_PARAM_QUALITY]:
+                zlib.constants.BROTLI_MIN_QUALITY,
+            },
+          })
+        );
         return;
       }