diff --git a/packages/desktop-client/src/browser-server.js b/packages/desktop-client/src/browser-server.js
index eb19fc5585b8ab0951b8c7ae938a2107d0f6af2b..98159b3dd8d5732d15167b861b91312f92f3d98c 100644
--- a/packages/desktop-client/src/browser-server.js
+++ b/packages/desktop-client/src/browser-server.js
@@ -10,6 +10,14 @@ self.addEventListener('message', e => {
       let version = msg.version;
       let hash = msg.hash;
 
+      if (!self.SharedArrayBuffer) {
+        self.postMessage({
+          type: 'app-init-failure',
+          SharedArrayBufferMissing: true
+        });
+        return;
+      }
+
       // eslint-disable-next-line
       importScripts(`${process.env.PUBLIC_URL}/kcab/kcab.worker.${hash}.js`);
 
diff --git a/packages/desktop-client/src/components/FatalError.js b/packages/desktop-client/src/components/FatalError.js
index 2b038ffb1585ae186e5b32da3e6c6bcf2626f490..025d9a7f56e9a7258318189d995576fffabf83f4 100644
--- a/packages/desktop-client/src/components/FatalError.js
+++ b/packages/desktop-client/src/components/FatalError.js
@@ -27,6 +27,20 @@ class FatalError extends React.Component {
           private browsing.
         </Text>
       );
+    } else if (error.SharedArrayBufferMissing) {
+      // SharedArrayBuffer isn't available
+      msg = (
+        <Text>
+          Actual requires access to <code>SharedArrayBuffer</code> in order to
+          function properly. If you’re seeing this error, either your browser
+          does not support <code>SharedArrayBuffer</code>, or your server is not
+          sending the appropriate headers, or you are not using HTTPS. See{' '}
+          <a href="https://actualbudget.github.io/docs/Troubleshooting/SharedArrayBuffer">
+            our troubleshooting documentation
+          </a>{' '}
+          for more information.
+        </Text>
+      );
     } else {
       // This indicates the backend failed to initialize. Show the
       // user something at least so they aren't looking at a blank