diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,3 +1,7 @@
+### 1.0.30
+
++ Use haskell-gi 0.27.
+
 ### 1.0.29
 
 + Depend on haskell-gi >= 0.26.9 (see [issue 439](https://github.com/haskell-gi/haskell-gi/issues/439))
diff --git a/GstApp.overrides b/GstApp.overrides
new file mode 100644
--- /dev/null
+++ b/GstApp.overrides
@@ -0,0 +1,36 @@
+namespace GstApp
+
+# GStreamer 1.28 introduced top-level callback types for use with
+# GstAppSinkSimpleCallbacks/GstAppSrcSimpleCallbacks, whose names
+# coincide with the callback types that we generate for signals
+# (<Object><Signal>Callback), for example the "eos" signal on AppSink
+# and the AppSinkEosCallback callback. This leads to conflicting
+# exports in GI.GstApp, so we rename the new callbacks (keeping the
+# existing names for the signal callbacks, for backwards
+# compatibility). These are no-ops for older versions of GStreamer.
+
+# AppSink
+set-attr GstApp/AppSinkEosCallback name AppSinkSimpleEosCallback
+set-attr GstApp/AppSinkSimpleCallbacks/set_eos/@parameters/eos_cb/@type name AppSinkSimpleEosCallback
+
+set-attr GstApp/AppSinkNewEventCallback name AppSinkSimpleNewEventCallback
+set-attr GstApp/AppSinkSimpleCallbacks/set_new_event/@parameters/new_event_cb/@type name AppSinkSimpleNewEventCallback
+
+set-attr GstApp/AppSinkNewPrerollCallback name AppSinkSimpleNewPrerollCallback
+set-attr GstApp/AppSinkSimpleCallbacks/set_new_preroll/@parameters/new_preroll_cb/@type name AppSinkSimpleNewPrerollCallback
+
+set-attr GstApp/AppSinkNewSampleCallback name AppSinkSimpleNewSampleCallback
+set-attr GstApp/AppSinkSimpleCallbacks/set_new_sample/@parameters/new_sample_cb/@type name AppSinkSimpleNewSampleCallback
+
+set-attr GstApp/AppSinkProposeAllocationCallback name AppSinkSimpleProposeAllocationCallback
+set-attr GstApp/AppSinkSimpleCallbacks/set_propose_allocation/@parameters/propose_allocation_cb/@type name AppSinkSimpleProposeAllocationCallback
+
+# AppSrc
+set-attr GstApp/AppSrcEnoughDataCallback name AppSrcSimpleEnoughDataCallback
+set-attr GstApp/AppSrcSimpleCallbacks/set_enough_data/@parameters/enough_data_cb/@type name AppSrcSimpleEnoughDataCallback
+
+set-attr GstApp/AppSrcNeedDataCallback name AppSrcSimpleNeedDataCallback
+set-attr GstApp/AppSrcSimpleCallbacks/set_need_data/@parameters/need_data_cb/@type name AppSrcSimpleNeedDataCallback
+
+set-attr GstApp/AppSrcSeekDataCallback name AppSrcSimpleSeekDataCallback
+set-attr GstApp/AppSrcSimpleCallbacks/set_seek_data/@parameters/seek_data_cb/@type name AppSrcSimpleSeekDataCallback
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
 # Documentation
 Autogenerated documentation for this package can be found at
 
-[https://hackage.haskell.org/package/gi-gstapp-1.0.29/docs/GI-GstApp.html](https://hackage.haskell.org/package/gi-gstapp-1.0.29/docs/GI-GstApp.html)
+[https://hackage.haskell.org/package/gi-gstapp-1.0.30/docs/GI-GstApp.html](https://hackage.haskell.org/package/gi-gstapp-1.0.30/docs/GI-GstApp.html)
 
 For general documentation on using [haskell-gi](https://github.com/haskell-gi/haskell-gi) based bindings, see [the project page](https://github.com/haskell-gi/haskell-gi) or [the Wiki](https://github.com/haskell-gi/haskell-gi/wiki).
diff --git a/Setup.hs b/Setup.hs
--- a/Setup.hs
+++ b/Setup.hs
@@ -1,19 +1,21 @@
 {-# LANGUAGE OverloadedStrings #-}
 
-import Data.GI.CodeGen.CabalHooks (setupBinding, TaggedOverride(..))
+import Data.GI.CodeGen.CabalHooks (setupBinding, TaggedOverride(..), TaggedPkgConfigVersions(..))
 
+import qualified GI.GLib.Config as GLib
 import qualified GI.GObject.Config as GObject
 import qualified GI.Gst.Config as Gst
 import qualified GI.GstBase.Config as GstBase
 
 
 main :: IO ()
-main = setupBinding name version pkgName pkgVersion verbose overridesFile inheritedOverrides outputDir
+main = setupBinding name version pkgName pkgVersion verbose overridesFile inheritedOverrides depVersions outputDir
   where name = "GstApp"
         version = "1.0"
         pkgName = "gi-gstapp"
-        pkgVersion = "1.0.29"
-        overridesFile = Nothing
+        pkgVersion = "1.0.30"
+        overridesFile = Just "GstApp.overrides"
         verbose = False
         outputDir = Nothing
-        inheritedOverrides = [TaggedOverride "inherited:GObject" GObject.overrides, TaggedOverride "inherited:Gst" Gst.overrides, TaggedOverride "inherited:GstBase" GstBase.overrides]
+        inheritedOverrides = [TaggedOverride "inherited:GLib" GLib.overrides, TaggedOverride "inherited:GObject" GObject.overrides, TaggedOverride "inherited:Gst" Gst.overrides, TaggedOverride "inherited:GstBase" GstBase.overrides]
+        depVersions = [TaggedPkgConfigVersions "GLib" GLib.pkgConfigVersions, TaggedPkgConfigVersions "GObject" GObject.pkgConfigVersions, TaggedPkgConfigVersions "Gst" Gst.pkgConfigVersions, TaggedPkgConfigVersions "GstBase" GstBase.pkgConfigVersions]
diff --git a/gi-gstapp.cabal b/gi-gstapp.cabal
--- a/gi-gstapp.cabal
+++ b/gi-gstapp.cabal
@@ -1,5 +1,5 @@
 name:                 gi-gstapp
-version:              1.0.29
+version:              1.0.30
 synopsis:             GStreamerApp bindings
 description:          Bindings for GStreamerApp, autogenerated by haskell-gi.
 homepage:             https://github.com/haskell-gi/haskell-gi
@@ -11,12 +11,12 @@
 build-type:           Custom
 cabal-version:        2.0
 
-extra-source-files: README.md ChangeLog.md stack.yaml
+extra-source-files: README.md ChangeLog.md stack.yaml GstApp.overrides
 
 custom-setup
       setup-depends: base >= 4.11 && < 5,
                      Cabal >= 1.24 && < 4,
-                     haskell-gi >= 0.26.9 && < 0.27,
+                     haskell-gi >= 0.27 && < 0.28,
                      gi-gstbase == 1.0.*,
                      gi-gst == 1.0.*,
                      gi-gobject == 2.0.*,
@@ -31,7 +31,7 @@
       pkgconfig-depends: gstreamer-app-1.0
       build-depends: base >= 4.8 && <5,
                      haskell-gi-base >= 0.26 && < 0.27,
-                     haskell-gi >= 0.26.9 && < 0.27,
+                     haskell-gi >= 0.27 && < 0.28,
                      haskell-gi-overloading < 1.1,
                      gi-gstbase == 1.0.*,
                      gi-gst == 1.0.*,
@@ -55,14 +55,22 @@
 
       exposed-modules: GI.GstApp.Config,
                        GI.GstApp,
+                       GI.GstApp.Callbacks,
                        GI.GstApp.Enums,
                        GI.GstApp.Objects,
                        GI.GstApp.Objects.AppSink,
-                       GI.GstApp.Objects.AppSrc
+                       GI.GstApp.Objects.AppSrc,
+                       GI.GstApp.Structs,
+                       GI.GstApp.Structs.AppSinkSimpleCallbacks,
+                       GI.GstApp.Structs.AppSrcSimpleCallbacks
 
       autogen-modules: GI.GstApp.Config,
                        GI.GstApp,
+                       GI.GstApp.Callbacks,
                        GI.GstApp.Enums,
                        GI.GstApp.Objects,
                        GI.GstApp.Objects.AppSink,
-                       GI.GstApp.Objects.AppSrc
+                       GI.GstApp.Objects.AppSrc,
+                       GI.GstApp.Structs,
+                       GI.GstApp.Structs.AppSinkSimpleCallbacks,
+                       GI.GstApp.Structs.AppSrcSimpleCallbacks
