diff --git a/dhall-lsp-server.cabal b/dhall-lsp-server.cabal
--- a/dhall-lsp-server.cabal
+++ b/dhall-lsp-server.cabal
@@ -1,5 +1,5 @@
 name:           dhall-lsp-server
-Version:        1.0.16
+Version:        1.0.17
 cabal-version:  1.12
 synopsis:       Language Server Protocol (LSP) server for Dhall
 homepage:       https://github.com/dhall-lang/dhall-haskell/tree/master/dhall-lsp-server#readme
@@ -52,14 +52,15 @@
     , dhall                >= 1.38.0   && < 1.41
     , dhall-json           >= 1.4      && < 1.8
     , filepath             >= 1.4.2    && < 1.5
-    , haskell-lsp          >= 0.19.0.0 && < 0.25
+    , haskell-lsp          >= 0.21.0.0 && < 0.25
     , rope-utf16-splay     >= 0.3.1.0  && < 0.4
     , hslogger             >= 1.2.10   && < 1.4
-    , lens                 >= 4.16.1   && < 5.1
-    , megaparsec           >= 7.0.2    && < 9.2
+    , lens                 >= 4.16.1   && < 5.2
+    -- megaparsec follows SemVer: https://github.com/mrkkrp/megaparsec/issues/469#issuecomment-927918469
+    , megaparsec           >= 7.0.2    && < 10
     , mtl                  >= 2.2.2    && < 2.3
     , network-uri          >= 2.6.1.0  && < 2.7
-    , prettyprinter        >= 1.5.1    && < 1.8
+    , prettyprinter        >= 1.7.0    && < 1.8
     , text                 >= 1.2.3.0  && < 1.3
     , transformers         >= 0.5.5.0  && < 0.6
     , unordered-containers >= 0.2.9.0  && < 0.3
@@ -91,7 +92,7 @@
         base                           ,
         directory  >= 1.3.1.5 && < 1.4 ,
         filepath                 < 1.5 ,
-        doctest    >= 0.7.0   && < 0.19,
+        doctest    >= 0.7.0            ,
         QuickCheck
     Other-Extensions: OverloadedStrings RecordWildCards
     Default-Language: Haskell2010
@@ -104,7 +105,7 @@
     Build-Depends:
         base                                   ,
         haskell-lsp-types >= 0.19.0  && < 0.25 ,
-        hspec             >= 2.7     && < 2.9  ,
+        hspec             >= 2.7     && < 2.10 ,
         lsp-test          >= 0.9     && < 0.13 ,
         tasty             >= 0.11.2  && < 1.5  ,
         tasty-hspec       >= 1.1     && < 1.3  ,
diff --git a/src/Dhall/LSP/Backend/Diagnostics.hs b/src/Dhall/LSP/Backend/Diagnostics.hs
--- a/src/Dhall/LSP/Backend/Diagnostics.hs
+++ b/src/Dhall/LSP/Backend/Diagnostics.hs
@@ -32,12 +32,12 @@
 import Control.Monad.Trans.Writer (Writer, execWriter, tell)
 import Data.Text                  (Text)
 
-import qualified Data.List.NonEmpty                    as NonEmpty
-import qualified Data.Text                             as Text
-import qualified Data.Text.Prettyprint.Doc.Render.Text as Pretty.Text
+import qualified Data.List.NonEmpty        as NonEmpty
+import qualified Data.Text                 as Text
 import qualified Dhall.Pretty
-import qualified Dhall.TypeCheck                       as TypeCheck
-import qualified Text.Megaparsec                       as Megaparsec
+import qualified Dhall.TypeCheck           as TypeCheck
+import qualified Prettyprinter.Render.Text as Pretty.Text
+import qualified Text.Megaparsec           as Megaparsec
 
 -- | A (line, col) pair representing a position in a source file; 0-based.
 type Position = (Int, Int)
diff --git a/src/Dhall/LSP/Backend/Formatting.hs b/src/Dhall/LSP/Backend/Formatting.hs
--- a/src/Dhall/LSP/Backend/Formatting.hs
+++ b/src/Dhall/LSP/Backend/Formatting.hs
@@ -7,9 +7,9 @@
 import Dhall.Pretty (CharacterSet (..))
 import Dhall.Src    (Src)
 
-import qualified Data.Text.Prettyprint.Doc             as Pretty
-import qualified Data.Text.Prettyprint.Doc.Render.Text as Pretty
 import qualified Dhall.Pretty
+import qualified Prettyprinter             as Pretty
+import qualified Prettyprinter.Render.Text as Pretty
 
 -- | Pretty-print the given Dhall expression.
 formatExpr :: Pretty.Pretty b => Maybe CharacterSet -> Expr Src b -> Text
diff --git a/src/Dhall/LSP/Backend/Parsing.hs b/src/Dhall/LSP/Backend/Parsing.hs
--- a/src/Dhall/LSP/Backend/Parsing.hs
+++ b/src/Dhall/LSP/Backend/Parsing.hs
@@ -22,14 +22,11 @@
     , makeFunctionBinding
     )
 import Dhall.Parser
-import Dhall.Parser.Expression
-    ( importHash_
-    , importType_
-    , localOnly
-    )
+import Dhall.Parser.Expression (importHash_, importType_, localOnly)
 import Dhall.Parser.Token      hiding (text)
 import Text.Megaparsec
-    ( anySingle
+    ( SourcePos (..)
+    , anySingle
     , eof
     , lookAhead
     , notFollowedBy
@@ -37,7 +34,6 @@
     , takeRest
     , try
     )
-import Text.Megaparsec         (SourcePos (..))
 
 import qualified Text.Megaparsec as Megaparsec
 
diff --git a/src/Dhall/LSP/Handlers.hs b/src/Dhall/LSP/Handlers.hs
--- a/src/Dhall/LSP/Handlers.hs
+++ b/src/Dhall/LSP/Handlers.hs
@@ -557,9 +557,7 @@
        where
         _label = completeText
         _kind = Nothing
-#if MIN_VERSION_haskell_lsp(0,21,0)
         _tags = mempty
-#endif
         _detail = fmap pretty completeType
         _documentation = Nothing
         _deprecated = Nothing
diff --git a/src/Dhall/LSP/State.hs b/src/Dhall/LSP/State.hs
--- a/src/Dhall/LSP/State.hs
+++ b/src/Dhall/LSP/State.hs
@@ -14,7 +14,7 @@
     , (.:)
     , (.:?)
     )
-import Data.Default                     (Default(def))
+import Data.Default                     (Default (def))
 import Data.Dynamic                     (Dynamic)
 import Data.Map.Strict                  (Map, empty)
 import Data.Text                        (Text)
