diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,25 @@
 CHANGELOG
 =========
 
+Version 0.2.3.0
+---------------
+
+*May 16, 2019*
+
+<https://github.com/mstksg/hakyll-dhall/releases/tag/v0.2.3.0>
+
+*   Compatibility with *dhall-1.22* and *dhall-1.23*; however, support for
+    *dhall-1.21* or lower is dropped.
+
+Version 0.2.2.2
+---------------
+
+*November 25, 2018*
+
+<https://github.com/mstksg/hakyll-dhall/releases/tag/v0.2.2.2>
+
+*   Compatibility with *dhall-1.19*.
+
 Version 0.2.2.2
 ---------------
 
diff --git a/hakyll-dhall.cabal b/hakyll-dhall.cabal
--- a/hakyll-dhall.cabal
+++ b/hakyll-dhall.cabal
@@ -1,13 +1,13 @@
 cabal-version: 1.12
 
--- This file has been generated from package.yaml by hpack version 0.31.0.
+-- This file has been generated from package.yaml by hpack version 0.31.1.
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: 71ed27b0b23bc5be30c2812fb6e555b961beb211f959d6ada0f612daf17420c1
+-- hash: 527273a80edbd480ea9814bed3eef0477743d6d989902d5e6a22547b01dfe821
 
 name:           hakyll-dhall
-version:        0.2.2.2
+version:        0.2.3.0
 synopsis:       Dhall compiler for Hakyll
 description:    Hakyll compiler and loader for Dhall files.  Functions are intended to track
                 all local dependencies within the project directory, so rebuilds are
@@ -53,7 +53,7 @@
     , cborg
     , containers
     , data-default-class
-    , dhall >=1.17
+    , dhall >=1.22
     , filepath
     , hakyll >=4.10
     , lens-family-core
@@ -72,7 +72,7 @@
   ghc-options: -Wall -Wcompat -Wredundant-constraints -threaded -rtsopts -with-rtsopts=-N
   build-depends:
       base >=4.7 && <5
-    , dhall >=1.17
+    , dhall >=1.22
     , hakyll >=4.10
     , hakyll-dhall
   default-language: Haskell2010
diff --git a/src/Hakyll/Web/Dhall.hs b/src/Hakyll/Web/Dhall.hs
--- a/src/Hakyll/Web/Dhall.hs
+++ b/src/Hakyll/Web/Dhall.hs
@@ -1,5 +1,4 @@
 {-# LANGUAGE AllowAmbiguousTypes #-}
-{-# LANGUAGE CPP                 #-}
 {-# LANGUAGE ConstraintKinds     #-}
 {-# LANGUAGE DeriveDataTypeable  #-}
 {-# LANGUAGE DeriveGeneric       #-}
@@ -75,7 +74,7 @@
 import           Control.Monad.Trans.State.Strict
 import           Data.Default.Class
 import           Data.IORef
-import           Data.Maybe
+import           Data.Maybe                            as M
 import           Data.Typeable                         (Typeable)
 import           Dhall
 import           Dhall.Binary
@@ -113,41 +112,18 @@
 newtype DExpr a = DExpr { getDExpr :: Expr Src a }
     deriving (Generic, Typeable)
 
-instance (DefaultDhallResolver a, PP.Pretty a) => Bi.Binary (DExpr a) where
+instance (PP.Pretty a, ToTerm a, FromTerm a) => Bi.Binary (DExpr a) where
     put = Bi.putBuilder
         . CBOR.toBuilder
         . CBOR.encodeTerm
-#if MIN_VERSION_dhall(1,18,0)
-        . encodeWithVersion defaultStandardVersion
-#else
-        . encode V_1_0
-#endif
-        . fmap toImport
+        . encode
         . getDExpr
-      where
-        toImport = case defaultDhallResolver @a of
-                     DRRaw  _ -> id
-                     DRFull _ -> absurd
     get = do
         bs     <- Bi.getRemainingLazyByteString
         (_, t) <- either (fail . show) pure $
                     CBOR.deserialiseFromBytes CBOR.decodeTerm bs
-        e      <- either (fail . show) pure $
-#if MIN_VERSION_dhall(1,18,0)
-                    decodeWithVersion t
-#else
-                    decode t
-#endif
-        DExpr <$> traverse fromImport e
-      where
-        fromImport i = case defaultDhallResolver @a of
-          DRRaw  _ -> pure i
-          DRFull _ -> fail $
-            "Unexpected import in deserialization of `DExpr X`: "
-              ++ T.unpack (iStr i)
-        iStr = PP.renderStrict
-             . PP.layoutSmart layoutOpts
-             . PP.pretty @Import
+        M.maybe (fail "dhall decode failure") (pure . DExpr) $
+            decode t
 
 -- | Automatically "pretty prints" in multi-line form.  For more
 -- fine-grained results, see 'dhallPrettyCompilerWith' and family.
