diff --git a/jsaddle-dom.cabal b/jsaddle-dom.cabal
--- a/jsaddle-dom.cabal
+++ b/jsaddle-dom.cabal
@@ -1,6 +1,6 @@
 cabal-version: 2.2
 name: jsaddle-dom
-version: 0.9.4.1
+version: 0.9.5.0
 build-type: Custom
 license: MIT
 license-file: LICENSE
@@ -14,8 +14,8 @@
 
 custom-setup
   setup-depends:
-    base  >=4.5 && <4.15,
-    Cabal >=2.4 && <3.3
+    base  >=4.5 && <4.17,
+    Cabal >=2.4 && <3.7
 
 source-repository head
     type: git
diff --git a/src/JSDOM.hs b/src/JSDOM.hs
--- a/src/JSDOM.hs
+++ b/src/JSDOM.hs
@@ -3,7 +3,9 @@
 {-# LANGUAGE RecursiveDo #-}
 #endif
 module JSDOM (
-  currentWindow
+  globalThis
+, globalThisUnchecked
+, currentWindow
 , currentWindowUnchecked
 , currentDocument
 , currentDocumentUnchecked
@@ -20,7 +22,7 @@
 
 #ifdef ghcjs_HOST_OS
 import JSDOM.Types
-       (FromJSVal(..), MonadDOM, liftDOM, Document(..), Window(..), JSM)
+       (FromJSVal(..), MonadDOM, liftDOM, GlobalThis(..), Document(..), Window(..), JSM)
 import Language.Javascript.JSaddle.Object (jsg)
 import JavaScript.Web.AnimationFrame (AnimationFrameHandle, inAnimationFrame)
 #else
@@ -32,7 +34,7 @@
 import Language.Javascript.JSaddle.Monad (askJSM)
 import JSDOM.Types
        (Callback(..), RequestAnimationFrameCallback(..), FromJSVal(..),
-        MonadDOM, liftDOM, Document(..), Window(..), JSM, JSContextRef(..))
+        MonadDOM, liftDOM, GlobalThis(..), Document(..), Window(..), JSM, JSContextRef(..))
 import JSDOM.Generated.RequestAnimationFrameCallback
        (newRequestAnimationFrameCallbackSync)
 import JSDOM.Generated.Window (requestAnimationFrame)
@@ -41,6 +43,12 @@
 import Language.Javascript.JSaddle
        (syncPoint, syncAfter, waitForAnimationFrame,
         nextAnimationFrame, catch, bracket)
+
+globalThis :: MonadDOM m => m (Maybe GlobalThis)
+globalThis = liftDOM $ jsg ("globalThis" :: String) >>= fromJSVal
+
+globalThisUnchecked :: MonadDOM m => m GlobalThis
+globalThisUnchecked = liftDOM $ jsg ("globalThis" :: String) >>= fromJSValUnchecked
 
 currentWindow :: MonadDOM m => m (Maybe Window)
 currentWindow = liftDOM $ jsg ("window" :: String) >>= fromJSVal
diff --git a/src/JSDOM/Types.hs b/src/JSDOM/Types.hs
--- a/src/JSDOM/Types.hs
+++ b/src/JSDOM/Types.hs
@@ -133,6 +133,8 @@
   -- * Used for better error messages
   , HasCallStack
 
+  , GlobalThis(GlobalThis), unGlobalThis, noGlobalThis
+
   -- * Interface types from IDL files
 
 -- AUTO GENERATION STARTS HERE
@@ -1242,13 +1244,13 @@
 instance IsFunction Function
 
 -- Promise
-newtype PromiseRejected = PromiseRejected { rejectionReason :: JSVal } deriving (Typeable)
+newtype PromiseRejected = PromiseRejected { rejectionReason :: String } deriving (Typeable)
 noPromiseRejected :: Maybe PromiseRejected
 noPromiseRejected = Nothing
 {-# INLINE noPromiseRejected #-}
 
 instance Show PromiseRejected where
-    show _ = "A promise was rejected"
+    show (PromiseRejected reason) = "A promise was rejected: " ++ reason
 instance Exception PromiseRejected
 
 readPromise :: JSVal -> JSM JSVal
@@ -1261,7 +1263,12 @@
     freeFunction success
     freeFunction error
     case result of
-        Left reason -> liftIO . throwIO $ PromiseRejected reason
+        Left reason -> do
+          reason' <- fromJSVal reason
+          let reason'' = case reason' of
+                Just t -> T.unpack t
+                Nothing -> "Unknown reason"
+          liftIO . throwIO $ PromiseRejected reason''
         Right x -> return x
 
 -- Callbacks
@@ -2123,6 +2130,42 @@
 noGLclampf :: Maybe GLclampf
 noGLclampf = Nothing
 {-# INLINE noGLclampf #-}
+
+-- This type is used to access the `globalThis` (see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/globalThis)
+newtype GlobalThis = GlobalThis { unGlobalThis :: JSVal }
+
+instance PToJSVal GlobalThis where
+  pToJSVal = unGlobalThis
+  {-# INLINE pToJSVal #-}
+
+instance PFromJSVal GlobalThis where
+  pFromJSVal = GlobalThis
+  {-# INLINE pFromJSVal #-}
+
+instance ToJSVal GlobalThis where
+  toJSVal = return . unGlobalThis
+  {-# INLINE toJSVal #-}
+
+instance FromJSVal GlobalThis where
+  fromJSVal v = fmap GlobalThis <$> maybeNullOrUndefined v
+  {-# INLINE fromJSVal #-}
+  fromJSValUnchecked = return . GlobalThis
+  {-# INLINE fromJSValUnchecked #-}
+
+instance IsGObject GlobalThis where
+  typeGType _ = error "Unable to get the JavaScript type of GlobalThis"
+
+instance MakeObject GlobalThis where
+  makeObject = makeObject . unGlobalThis
+
+instance IsEventTarget GlobalThis
+instance IsWindowOrWorkerGlobalScope GlobalThis
+instance IsGlobalPerformance GlobalThis
+instance IsGlobalEventHandlers GlobalThis
+instance IsGlobalCrypto GlobalThis
+noGlobalThis :: Maybe GlobalThis
+noGlobalThis = Nothing
+{-# INLINE noGlobalThis #-}
 
 -- AUTO GENERATION STARTS HERE
 -- The remainder of this file is generated from IDL files using domconv-webkit-jsffi
