diff --git a/ghcide.cabal b/ghcide.cabal
--- a/ghcide.cabal
+++ b/ghcide.cabal
@@ -2,7 +2,7 @@
 build-type:         Simple
 category:           Development
 name:               ghcide
-version:            2.10.0.0
+version:            2.11.0.0
 license:            Apache-2.0
 license-file:       LICENSE
 author:             Digital Asset and Ghcide contributors
@@ -73,11 +73,11 @@
     , Glob
     , haddock-library              >=1.8      && <1.12
     , hashable
-    , hie-bios                     ^>=0.14.0
+    , hie-bios                     ^>=0.15.0
     , hie-compat                   ^>=0.3.0.0
-    , hiedb                        ^>= 0.6.0.0
-    , hls-graph                    == 2.10.0.0
-    , hls-plugin-api               == 2.10.0.0
+    , hiedb                        ^>= 0.6.0.2
+    , hls-graph                    == 2.11.0.0
+    , hls-plugin-api               == 2.11.0.0
     , implicit-hie                 >= 0.1.4.0 && < 0.1.5
     , lens
     , lens-aeson
diff --git a/session-loader/Development/IDE/Session.hs b/session-loader/Development/IDE/Session.hs
--- a/session-loader/Development/IDE/Session.hs
+++ b/session-loader/Development/IDE/Session.hs
@@ -698,7 +698,15 @@
             let ncfp = toNormalizedFilePath' (toAbsolutePath file)
             cachedHieYamlLocation <- HM.lookup ncfp <$> readVar filesMap
             hieYaml <- cradleLoc file
-            sessionOpts (join cachedHieYamlLocation <|> hieYaml, file) `Safe.catch` \e ->
+            let
+              -- Each one of deps will be registered as a FileSystemWatcher in the GhcSession action
+              -- so that we can get a workspace/didChangeWatchedFiles notification when a dep changes.
+              -- The GlobPattern of a FileSystemWatcher can be absolute or relative.
+              -- We use the absolute one because it is supported by more LSP clients.
+              -- Here we make sure deps are absolute and later we use those absolute deps as GlobPattern.
+              absolutePathsCradleDeps (eq, deps)
+                = (eq, fmap toAbsolutePath deps)
+            (absolutePathsCradleDeps <$> sessionOpts (join cachedHieYamlLocation <|> hieYaml, file))  `Safe.catch` \e ->
                 return (([renderPackageSetupException file e], Nothing), maybe [] pure hieYaml)
 
     returnWithVersion $ \file -> do
diff --git a/session-loader/Development/IDE/Session/Diagnostics.hs b/session-loader/Development/IDE/Session/Diagnostics.hs
--- a/session-loader/Development/IDE/Session/Diagnostics.hs
+++ b/session-loader/Development/IDE/Session/Diagnostics.hs
@@ -28,7 +28,7 @@
   Depicts the cradle error in a user-friendly way.
 -}
 renderCradleError :: CradleError -> Cradle a -> NormalizedFilePath -> FileDiagnostic
-renderCradleError (CradleError deps _ec ms) cradle nfp =
+renderCradleError cradleError cradle nfp =
   let noDetails =
         ideErrorWithSource (Just "cradle") (Just DiagnosticSeverity_Error) nfp (T.unlines $ map T.pack userFriendlyMessage) Nothing
   in
@@ -36,7 +36,9 @@
      then noDetails & fdLspDiagnosticL %~ \diag -> diag{_data_ = Just $ Aeson.toJSON CradleErrorDetails{cabalProjectFiles=absDeps}}
      else noDetails
   where
-    absDeps = fmap (cradleRootDir cradle </>) deps
+    ms = cradleErrorStderr cradleError
+
+    absDeps = fmap (cradleRootDir cradle </>) (cradleErrorDependencies cradleError)
     userFriendlyMessage :: [String]
     userFriendlyMessage
       | HieBios.isCabalCradle cradle = fromMaybe ms $ fileMissingMessage <|> mkUnknownModuleMessage
diff --git a/src/Development/IDE/GHC/CPP.hs b/src/Development/IDE/GHC/CPP.hs
--- a/src/Development/IDE/GHC/CPP.hs
+++ b/src/Development/IDE/GHC/CPP.hs
@@ -30,7 +30,7 @@
 import qualified GHC.SysTools.Cpp                as Pipeline
 #endif
 
-#if MIN_VERSION_ghc(9,11,0)
+#if MIN_VERSION_ghc(9,10,2)
 import qualified GHC.SysTools.Tasks              as Pipeline
 #endif
 
@@ -56,7 +56,7 @@
 #if MIN_VERSION_ghc(9,5,0)
     let cpp_opts = Pipeline.CppOpts
                  { cppLinePragmas = True
-#if MIN_VERSION_ghc(9,11,0)
+#if MIN_VERSION_ghc(9,10,2)
                  , sourceCodePreprocessor = Pipeline.SCPHsCpp
 #elif MIN_VERSION_ghc(9,10,0)
                  , useHsCpp = True
diff --git a/src/Development/IDE/GHC/Compat/Core.hs b/src/Development/IDE/GHC/Compat/Core.hs
--- a/src/Development/IDE/GHC/Compat/Core.hs
+++ b/src/Development/IDE/GHC/Compat/Core.hs
@@ -702,7 +702,7 @@
 loadDLL :: HscEnv -> String -> IO (Maybe String)
 loadDLL env str = do
     res <- GHCi.loadDLL (GHCi.hscInterp env) str
-#if MIN_VERSION_ghc(9,11,0) || (MIN_VERSION_ghc(9, 8, 3) && !MIN_VERSION_ghc(9, 9, 0))
+#if MIN_VERSION_ghc(9,11,0) || (MIN_VERSION_ghc(9, 8, 3) && !MIN_VERSION_ghc(9, 9, 0)) || (MIN_VERSION_ghc(9, 10, 2) && !MIN_VERSION_ghc(9, 11, 0))
     pure $
       case res of
         Left err_msg -> Just err_msg
