diff --git a/src/snek/static/polyfills/Promise.withResolvers.js b/src/snek/static/polyfills/Promise.withResolvers.js
new file mode 100644
index 0000000..03f0185
--- /dev/null
+++ b/src/snek/static/polyfills/Promise.withResolvers.js
@@ -0,0 +1,8 @@
+Promise.withResolvers = Promise.withResolvers || function() {
+    let resolve, reject;
+    let promise = new Promise((res, rej) => {
+        resolve = res;
+        reject = rej;
+    });
+    return { promise, resolve, reject };
+}
\ No newline at end of file
diff --git a/src/snek/templates/app.html b/src/snek/templates/app.html
index a8bb473..1533153 100644
--- a/src/snek/templates/app.html
+++ b/src/snek/templates/app.html
@@ -6,6 +6,7 @@
     <link rel="manifest" href="/manifest.json" />
   <title>Snek</title>
   <style>{{highlight_styles}}</style>
+  <script src="/polyfills/Promise.withResolvers.js" type="module"></script>
   <!-- 
   <script src="/push.js"></script>
   -->
diff --git a/src/snek/templates/base.html b/src/snek/templates/base.html
index df0796c..d2f8de7 100644
--- a/src/snek/templates/base.html
+++ b/src/snek/templates/base.html
@@ -12,7 +12,8 @@
 
     <title>{% block title %}Snek chat by Molodetz{% endblock %}</title>
 
-    <script src="/app.js"  type="module"></script>
+    <script src="/polyfills/Promise.withResolvers.js" type="module"></script>
+    <script src="/app.js" type="module"></script>
     <script src="/message-list.js" type="module"></script>
     <style>{{ highlight_styles }}</style>
     <link rel="stylesheet" href="/style.css">