diff --git a/src/browser/html/window.zig b/src/browser/html/window.zig
index 6ce63027..df6e30ce 100644
--- a/src/browser/html/window.zig
+++ b/src/browser/html/window.zig
@@ -190,7 +190,6 @@ pub const Window = struct {
         return page.loop.cancel(kv.value.loop_id);
     }
 
-    // TODO handle callback arguments.
     pub fn _setTimeout(self: *Window, cbk: Function, delay: ?u32, page: *Page) !u32 {
         return self.createTimeout(cbk, delay, page, .{});
     }
@@ -210,6 +209,10 @@ pub const Window = struct {
         return page.loop.cancel(kv.value.loop_id);
     }
 
+    pub fn _queueMicrotask(self: *Window, cbk: Function, page: *Page) !u32 {
+        return self.createTimeout(cbk, 0, page, .{});
+    }
+
     pub fn _matchMedia(_: *const Window, media: []const u8, page: *Page) !MediaQueryList {
         return .{
             .matches = false, // TODO?
@@ -468,4 +471,9 @@ test "Browser.HTML.Window" {
         .{ "scroll", "true" },
         .{ "scrollend", "true" },
     }, .{});
+
+    try runner.testCases(&.{
+        .{ "var qm = false; window.queueMicrotask(() => {qm = true });", null },
+        .{ "qm", "true" },
+    }, .{});
 }