diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,3 +1,8 @@
+# 1.3.13   [2021-03-10]
+
+  - dependencies: Support (and require) hledger-lib-1.21
+  - dependencies: Support megaparsec-9
+
 # 1.3.12   [2020-08-31]
 
   - dependencies: Fix tests build with hledger-lib-1.19
diff --git a/hledger-iadd.cabal b/hledger-iadd.cabal
--- a/hledger-iadd.cabal
+++ b/hledger-iadd.cabal
@@ -1,5 +1,5 @@
 name:                hledger-iadd
-version:             1.3.12
+version:             1.3.13
 synopsis:            A terminal UI as drop-in replacement for hledger add
 description:         This is a terminal UI as drop-in replacement for hledger add.
                      .
@@ -61,7 +61,7 @@
                      , Data.Time.Ext
   default-language:    Haskell2010
   build-depends:       base >= 4.9 && < 5
-                     , hledger-lib >= 1.14 && < 1.20
+                     , hledger-lib >= 1.20.99 && < 1.22
                      , brick >= 0.27
                      , vty >= 5.4
                      , text
@@ -71,7 +71,7 @@
                      , transformers >= 0.3
                      , time >= 1.5
                      , vector
-                     , megaparsec >= 7.0 && <8.1
+                     , megaparsec >= 7.0 && <9.1
                      , containers
                      , optparse-applicative
                      , directory
@@ -88,7 +88,7 @@
   default-language:    Haskell2010
   build-depends:       base >= 4.9 && < 5
                      , hledger-iadd
-                     , hledger-lib >= 1.14 && < 1.20
+                     , hledger-lib >= 1.20.99 && < 1.22
                      , brick >= 0.27
                      , vty >= 5.4
                      , text
@@ -102,7 +102,7 @@
                      , xdg-basedir
                      , unordered-containers
                      , free >= 4.12.4
-                     , megaparsec >= 7.0 && <8.1
+                     , megaparsec >= 7.0 && <9.1
   ghc-options:         -threaded -Wall -fdefer-typed-holes -fno-warn-name-shadowing
 
 test-suite spec
@@ -116,7 +116,7 @@
   default-language:   Haskell2010
   build-depends:      base >= 4.9 && < 5
                     , hledger-iadd
-                    , hledger-lib >= 1.14 && < 1.20
+                    , hledger-lib >= 1.20.99 && < 1.22
                     , text
                     , transformers >= 0.3
                     , time >= 1.5
@@ -124,7 +124,7 @@
                     , hspec
                     , QuickCheck
                     , free >= 4.12.4
-                    , megaparsec >= 7.0 && <8.1
+                    , megaparsec >= 7.0 && <9.1
                     , text-zipper >= 0.10
   build-tool-depends: hspec-discover:hspec-discover ==2.*
   ghc-options:        -threaded -Wall -fdefer-typed-holes -fno-warn-name-shadowing
diff --git a/src/Model.hs b/src/Model.hs
--- a/src/Model.hs
+++ b/src/Model.hs
@@ -98,7 +98,7 @@
 context :: HL.Journal -> MatchAlgo -> DateFormat -> Text -> Step -> IO [Text]
 context _ _ dateFormat entryText (DateQuestion _) = parseDateWithToday dateFormat entryText >>= \case
   Left _ -> return []
-  Right date -> return [T.pack $ HL.showDate date]
+  Right date -> return [HL.showDate date]
 context j matchAlgo _ entryText (DescriptionQuestion _ _) = return $
   let descs = HL.journalDescriptions j
   in sortBy (descUses j) $ filter (matches matchAlgo entryText) descs
diff --git a/src/View.hs b/src/View.hs
--- a/src/View.hs
+++ b/src/View.hs
@@ -82,4 +82,4 @@
 
 
 showTransaction :: HL.Transaction -> Text
-showTransaction = T.stripEnd . T.pack . HL.showTransactionUnelided
+showTransaction = T.stripEnd . HL.showTransaction
diff --git a/src/main/Main.hs b/src/main/Main.hs
--- a/src/main/Main.hs
+++ b/src/main/Main.hs
@@ -340,13 +340,13 @@
   where zipper = gotoEOL (textZipper [content] (Just 1))
 
 addToJournal :: HL.Transaction -> FilePath -> IO ()
-addToJournal trans path = appendFile path (moveEmptyLine $ HL.showTransactionUnelided trans)
+addToJournal trans path = appendFile path (T.unpack $ moveEmptyLine $ HL.showTransaction trans)
   where
     -- showTransactionUnelided adds an empty line to the end of the transaction. We want
     -- the empty line to be at the start instead, to allow it to be added to a
     -- journal that doesn't end with a newline.
-    moveEmptyLine :: String -> String
-    moveEmptyLine = unlines . ("":) . init . lines
+    moveEmptyLine :: Text -> Text
+    moveEmptyLine = T.unlines . ("":) . init . T.lines
 
 --------------------------------------------------------------------------------
 -- Command line and config parsing
