diff --git a/GHCJS/Marshal.hs b/GHCJS/Marshal.hs
--- a/GHCJS/Marshal.hs
+++ b/GHCJS/Marshal.hs
@@ -28,7 +28,12 @@
 import           Data.Attoparsec.Number (Number(..))
 import           Data.Bits ((.&.))
 import           Data.Char (chr, ord)
+#if MIN_VERSION_aeson (2,0,0)
+import qualified Data.Aeson.Key as K
+import qualified Data.Aeson.KeyMap as KM
+#else
 import qualified Data.HashMap.Strict as H
+#endif
 import           Data.Int (Int8, Int16, Int32)
 import qualified Data.JSString as JSS
 import qualified Data.JSString.Text as JSS
@@ -170,7 +175,11 @@
                     propVals <- forM props $ \p -> do
                         v <- MaybeT (fromJSVal =<< OI.getProp p (OI.Object r))
                         return (JSS.textFromJSString p, v)
+#if MIN_VERSION_aeson (2,0,0)
+                    return (AE.Object (KM.fromList (map (\(k, v) -> (K.fromText k, v)) propVals)))
+#else
                     return (AE.Object (H.fromList propVals))
+#endif
     {-# INLINE fromJSVal #-}
 instance (FromJSVal a, FromJSVal b) => FromJSVal (a,b) where
     fromJSVal r = runMaybeT $ (,) <$> jf r 0 <*> jf r 1
@@ -299,7 +308,12 @@
     convertValue (AE.Bool b)   = return (toJSBool b)
     convertValue (AE.Object o) = do
       obj@(OI.Object obj') <- OI.create
-      mapM_ (\(k,v) -> convertValue v >>= \v' -> OI.setProp (JSS.textToJSString k) v' obj) (H.toList o)
+      mapM_ (\(k,v) -> convertValue v >>= \v' -> OI.setProp (JSS.textToJSString k) v' obj)
+#if MIN_VERSION_aeson (2,0,0)
+        (map (\(k, v) -> (K.toText k, v)) (KM.toList o))
+#else
+        (H.toList o)
+#endif
       return obj'
 
 
diff --git a/ghcjs-base.cabal b/ghcjs-base.cabal
--- a/ghcjs-base.cabal
+++ b/ghcjs-base.cabal
@@ -1,6 +1,6 @@
 cabal-version:       3.0
 name:                ghcjs-base
-version:             0.2.0.3
+version:             0.2.1.0
 synopsis:            base library for GHCJS
 homepage:            http://github.com/ghcjs/ghcjs-base
 license:             MIT
@@ -145,15 +145,15 @@
                    binary               >= 0.8  && < 0.11,
                    bytestring           >= 0.10 && < 0.11,
                    text                 >= 1.1  && < 1.3,
-                   aeson                >= 0.8  && < 1.6,
+                   aeson                >= 0.8  && < 2.1,
                    scientific           >= 0.3  && < 0.4,
                    vector               >= 0.10 && < 0.13,
                    containers           >= 0.5  && < 0.7,
                    time                 >= 1.5  && < 1.10,
-                   hashable             >= 1.2  && < 1.4,
+                   hashable             >= 1.2  && < 1.5,
                    unordered-containers >= 0.2  && < 0.3,
                    attoparsec           >= 0.11 && < 0.15,
-                   transformers         >= 0.3  && < 0.6,
+                   transformers         >= 0.3  && < 0.7,
                    primitive            >= 0.5  && < 0.8,
                    deepseq              >= 1.3  && < 1.5,
                    dlist                >= 0.7  && < 1.1
