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.4
+cabal-version: 2.2
 name: jsaddle-dom
-version: 0.9.3.2
+version: 0.9.4.0
 build-type: Custom
 license: MIT
 license-file: LICENSE
@@ -14,8 +14,8 @@
 
 custom-setup
   setup-depends:
-    base  >=4.5 && <4.13,
-    Cabal >=2.4 && <2.5
+    base  >=4.5 && <4.14,
+    Cabal >=2.4 && <3.1
 
 source-repository head
     type: git
@@ -36,6 +36,7 @@
         JSDOM.Custom.AudioContext
         JSDOM.Custom.Database
         JSDOM.Custom.DOMError
+        JSDOM.Custom.FormData
         JSDOM.Custom.Geolocation
         JSDOM.Custom.Navigator
         JSDOM.Custom.NavigatorUserMediaError
@@ -636,6 +637,7 @@
     reexported-modules: JSDOM.Custom.AudioContext as JSDOM.AudioContext,
                         JSDOM.Custom.Database as JSDOM.Database,
                         JSDOM.Custom.DOMError as JSDOM.DOMError,
+                        JSDOM.Custom.FormData as JSDOM.FormData,
                         JSDOM.Custom.Geolocation as JSDOM.Geolocation,
                         JSDOM.Custom.Navigator as JSDOM.Navigator,
                         JSDOM.Custom.NavigatorUserMediaError as JSDOM.NavigatorUserMediaError,
@@ -765,7 +767,6 @@
                         JSDOM.Generated.FocusEvent as JSDOM.FocusEvent,
                         JSDOM.Generated.FontFace as JSDOM.FontFace,
                         JSDOM.Generated.FontFaceSet as JSDOM.FontFaceSet,
-                        JSDOM.Generated.FormData as JSDOM.FormData,
                         JSDOM.Generated.GainNode as JSDOM.GainNode,
                         JSDOM.Generated.Gamepad as JSDOM.Gamepad,
                         JSDOM.Generated.GamepadButton as JSDOM.GamepadButton,
@@ -1218,11 +1219,11 @@
                         JSDOM.Generated.XSLTProcessor as JSDOM.XSLTProcessor
     build-depends:
         base >=4.7.0.0 && <5,
-        base-compat >=0.9.0 && <0.11,
+        base-compat >=0.9.0 && <0.12,
         exceptions >=0.8 && <0.11,
         transformers >=0.2 && <0.6,
         text >=0.11.0.6 && <1.3,
         jsaddle >=0.9.3.0 && <0.10,
-        lens >=4.12.3 && <4.18
+        lens >=4.12.3 && <4.19
     default-language: Haskell2010
     hs-source-dirs: src
diff --git a/src/JSDOM/Custom/FormData.hs b/src/JSDOM/Custom/FormData.hs
new file mode 100644
--- /dev/null
+++ b/src/JSDOM/Custom/FormData.hs
@@ -0,0 +1,19 @@
+module JSDOM.Custom.FormData(
+    module Generated,
+    newFormData
+) where
+
+import Prelude ()
+import Prelude.Compat
+
+import JSDOM.Types
+import Data.Maybe (mapMaybe)
+import Language.Javascript.JSaddle (toJSVal, jsg, new)
+
+import JSDOM.Generated.FormData as Generated hiding (newFormData)
+
+
+-- | <https://developer.mozilla.org/en-US/docs/Web/API/FormData Mozilla FormData documentation> 
+newFormData :: (MonadDOM m) => Maybe HTMLFormElement -> m FormData
+newFormData form
+  = liftDOM (FormData <$> new (jsg "FormData") (mapMaybe (fmap toJSVal) [form]))
