diff --git a/ChangeLog b/ChangeLog
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2024-09-03 Laurent P. René de Cotret <laurent.decotret@outlook.com> 0.7.7
+
+* Bumped dependency bounds to support GHC 8.10.7 - GHC 9.10.1
+* Updated links to point to Distributed Haskell monorepo
+
 2024-04-03 David Simmons-Duffin <dsd@caltech.edu> 0.7.6
 
 * Bumped hashable upper bound.
diff --git a/Setup.hs b/Setup.hs
deleted file mode 100644
--- a/Setup.hs
+++ /dev/null
@@ -1,2 +0,0 @@
-import Distribution.Simple
-main = defaultMain
diff --git a/distributed-process.cabal b/distributed-process.cabal
--- a/distributed-process.cabal
+++ b/distributed-process.cabal
@@ -1,90 +1,95 @@
+cabal-version: 3.0
 Name:          distributed-process
-Version:       0.7.6
-Cabal-Version: >=1.10
+Version:       0.7.7
 Build-Type:    Simple
-License:       BSD3
+License:       BSD-3-Clause
 License-File:  LICENSE
 Copyright:     Well-Typed LLP, Tweag I/O Limited
 Author:        Duncan Coutts, Nicolas Wu, Edsko de Vries
-Maintainer:    Tim Watson <watson.timothy@gmail.com>
+maintainer:    The Distributed Haskell team
 Stability:     experimental
-Homepage:      http://haskell-distributed.github.com/
+Homepage:      https://haskell-distributed.github.io/
 Bug-Reports:   https://github.com/haskell-distributed/distributed-process/issues
 Synopsis:      Cloud Haskell: Erlang-style concurrency in Haskell
 Description:   This is an implementation of Cloud Haskell, as described in
                /Towards Haskell in the Cloud/ by Jeff Epstein, Andrew Black,
                and Simon Peyton Jones
-               (<http://research.microsoft.com/en-us/um/people/simonpj/papers/parallel/>),
+               (<https://simon.peytonjones.org/haskell-cloud/>),
                although some of the details are different. The precise message
                passing semantics are based on /A unified semantics for future Erlang/
                by Hans Svensson, Lars-&#xc5;ke Fredlund and Clara Benac Earle.
 
                You will probably also want to install a Cloud Haskell backend such
                as distributed-process-simplelocalnet.
-Tested-With:   GHC==7.10.3 GHC==8.0.2 GHC==8.2.2 GHC==8.4.4
+tested-with:   GHC==8.10.7 GHC==9.0.2 GHC==9.2.8 GHC==9.4.5 GHC==9.6.4 GHC==9.8.2 GHC==9.10.1
 Category:      Control
-extra-source-files: ChangeLog
+extra-doc-files: ChangeLog
 
-Source-Repository head
+common warnings
+    ghc-options: -Wall
+                 -Wcompat
+                 -Widentities
+                 -Wincomplete-uni-patterns
+                 -Wincomplete-record-updates
+                 -Wredundant-constraints
+                 -fhide-source-paths
+                 -Wpartial-fields
+
+source-repository head
   Type:     git
   Location: https://github.com/haskell-distributed/distributed-process
-  SubDir:   distributed-process
+  SubDir:   packages/distributed-process
 
 flag th
   description: Build with Template Haskell support
   default: True
 
-flag old-locale
- description: If false then depend on time >= 1.5.
-              .
-              If true then depend on time < 1.5 together with old-locale.
- default: False
-
 Library
-  Build-Depends:     base >= 4.9 && < 5,
-                     binary >= 0.6.3 && < 0.10,
-                     hashable >= 1.2.0.5 && < 1.5,
+  import:            warnings
+  Build-Depends:     base >= 4.14 && < 5,
+                     binary >= 0.8 && < 0.10,
+                     hashable >= 1.2.0.5 && < 1.6,
                      network-transport >= 0.4.1.0 && < 0.6,
                      stm >= 2.4 && < 2.6,
                      transformers >= 0.2 && < 0.7,
                      mtl >= 2.0 && < 2.4,
                      data-accessor >= 0.2 && < 0.3,
-                     bytestring >= 0.9 && < 0.13,
+                     bytestring >= 0.10 && < 0.13,
                      random >= 1.0 && < 1.3,
                      distributed-static >= 0.2 && < 0.4,
                      rank1dynamic >= 0.1 && < 0.5,
                      syb >= 0.3 && < 0.8,
-                     exceptions >= 0.5,
-                     containers >= 0.5 && < 0.7,
-                     deepseq >= 1.3.0.1 && < 1.6
-  Exposed-modules:   Control.Distributed.Process,
-                     Control.Distributed.Process.Closure,
-                     Control.Distributed.Process.Debug,
-                     Control.Distributed.Process.Internal.BiMultiMap,
-                     Control.Distributed.Process.Internal.Closure.BuiltIn,
-                     Control.Distributed.Process.Internal.Closure.Explicit,
-                     Control.Distributed.Process.Internal.CQueue,
-                     Control.Distributed.Process.Internal.Messaging,
-                     Control.Distributed.Process.Internal.Primitives,
-                     Control.Distributed.Process.Internal.Spawn,
-                     Control.Distributed.Process.Internal.StrictContainerAccessors,
-                     Control.Distributed.Process.Internal.StrictList,
-                     Control.Distributed.Process.Internal.StrictMVar,
-                     Control.Distributed.Process.Internal.Types,
-                     Control.Distributed.Process.Internal.WeakTQueue,
-                     Control.Distributed.Process.Management,
-                     Control.Distributed.Process.Node,
-                     Control.Distributed.Process.Serializable,
+                     exceptions >= 0.10,
+                     containers >= 0.6 && < 0.8,
+                     deepseq >= 1.4 && < 1.6,
+                     time >= 1.9
+  Exposed-modules:   Control.Distributed.Process
+                     Control.Distributed.Process.Closure
+                     Control.Distributed.Process.Debug
+                     Control.Distributed.Process.Internal.BiMultiMap
+                     Control.Distributed.Process.Internal.Closure.BuiltIn
+                     Control.Distributed.Process.Internal.Closure.Explicit
+                     Control.Distributed.Process.Internal.CQueue
+                     Control.Distributed.Process.Internal.Messaging
+                     Control.Distributed.Process.Internal.Primitives
+                     Control.Distributed.Process.Internal.Spawn
+                     Control.Distributed.Process.Internal.StrictContainerAccessors
+                     Control.Distributed.Process.Internal.StrictList
+                     Control.Distributed.Process.Internal.StrictMVar
+                     Control.Distributed.Process.Internal.Types
+                     Control.Distributed.Process.Internal.WeakTQueue
+                     Control.Distributed.Process.Management
+                     Control.Distributed.Process.Node
+                     Control.Distributed.Process.Serializable
                      Control.Distributed.Process.UnsafePrimitives
-                     Control.Distributed.Process.Management.Internal.Agent,
-                     Control.Distributed.Process.Management.Internal.Bus,
-                     Control.Distributed.Process.Management.Internal.Types,
-                     Control.Distributed.Process.Management.Internal.Trace.Primitives,
-                     Control.Distributed.Process.Management.Internal.Trace.Remote,
-                     Control.Distributed.Process.Management.Internal.Trace.Types,
+                     Control.Distributed.Process.Management.Internal.Agent
+                     Control.Distributed.Process.Management.Internal.Bus
+                     Control.Distributed.Process.Management.Internal.Types
+                     Control.Distributed.Process.Management.Internal.Trace.Primitives
+                     Control.Distributed.Process.Management.Internal.Trace.Remote
+                     Control.Distributed.Process.Management.Internal.Trace.Types
                      Control.Distributed.Process.Management.Internal.Trace.Tracer
   default-language:  Haskell2010
-  ghc-options:       -Wall
   HS-Source-Dirs:    src
   other-extensions:  BangPatterns
                      CPP
@@ -106,10 +111,6 @@
                      TypeSynonymInstances
                      UnboxedTuples
                      UndecidableInstances
-  if flag(old-locale)
-     Build-Depends:   time < 1.5, old-locale >= 1.0 && <1.1
-  else
-     Build-Depends:   time >= 1.5
   if flag(th)
      other-extensions: TemplateHaskell
      Build-Depends: template-haskell >= 2.6
@@ -119,56 +120,57 @@
 -- Tests are in distributed-process-test package, for convenience.
 
 benchmark distributed-process-throughput
+  import:           warnings
   Type:             exitcode-stdio-1.0
-  Build-Depends:    base >= 4.9 && < 5,
+  Build-Depends:    base >= 4.14 && < 5,
                     distributed-process,
-                    network-transport-tcp >= 0.3 && <= 0.81,
-                    bytestring >= 0.9 && < 0.13,
-                    binary >= 0.6.3 && < 0.10
+                    network-transport-tcp >= 0.3 && <= 0.9,
+                    bytestring >= 0.10 && < 0.13,
+                    binary >= 0.8 && < 0.10
   Main-Is:          benchmarks/Throughput.hs
   default-language: Haskell2010
-  ghc-options:      -Wall
 
 benchmark distributed-process-latency
+  import:           warnings
   Type:             exitcode-stdio-1.0
-  Build-Depends:    base >= 4.9 && < 5,
+  Build-Depends:    base >= 4.14 && < 5,
                     distributed-process,
-                    network-transport-tcp >= 0.3 && <= 0.81,
-                    bytestring >= 0.9 && < 0.13,
-                    binary >= 0.6.3 && < 0.10
+                    network-transport-tcp >= 0.3 && <= 0.9,
+                    bytestring >= 0.10 && < 0.13,
+                    binary >= 0.8 && < 0.10
   Main-Is:          benchmarks/Latency.hs
   default-language: Haskell2010
-  ghc-options:      -Wall
 
 benchmark distributed-process-channels
+  import:           warnings
   Type:             exitcode-stdio-1.0
-  Build-Depends:    base >= 4.9 && < 5,
+  Build-Depends:    base >= 4.14 && < 5,
                     distributed-process,
-                    network-transport-tcp >= 0.3 && <= 0.81,
-                    bytestring >= 0.9 && < 0.13,
-                    binary >= 0.6.3 && < 0.10
+                    network-transport-tcp >= 0.3 && <= 0.9,
+                    bytestring >= 0.10 && < 0.13,
+                    binary >= 0.8 && < 0.10
   Main-Is:          benchmarks/Channels.hs
   default-language: Haskell2010
-  ghc-options:      -Wall
 
 benchmark distributed-process-spawns
+  import:           warnings
   Type:             exitcode-stdio-1.0
-  Build-Depends:    base >= 4.9 && < 5,
+  Build-Depends:    base >= 4.14 && < 5,
                     distributed-process,
-                    network-transport-tcp >= 0.3 && <= 0.81,
-                    bytestring >= 0.9 && < 0.13,
-                    binary >= 0.6.3 && < 0.10
+                    network-transport-tcp >= 0.3 && <= 0.9,
+                    bytestring >= 0.10 && < 0.13,
+                    binary >= 0.8 && < 0.10
   Main-Is:          benchmarks/Spawns.hs
   default-language: Haskell2010
-  ghc-options:      -Wall
 
 benchmark distributed-process-ring
+  import:           warnings
   Type:             exitcode-stdio-1.0
-  Build-Depends:    base >= 4.9 && < 5,
+  Build-Depends:    base >= 4.14 && < 5,
                     distributed-process,
-                    network-transport-tcp >= 0.3 && <= 0.81,
-                    bytestring >= 0.9 && < 0.13,
-                    binary >= 0.6.3 && < 0.10
+                    network-transport-tcp >= 0.3 && <= 0.9,
+                    bytestring >= 0.10 && < 0.13,
+                    binary >= 0.8 && < 0.10
   Main-Is:          benchmarks/ProcessRing.hs
   default-language: Haskell2010
-  ghc-options:      -Wall -threaded -O2 -rtsopts
+  ghc-options:      -threaded -O2 -rtsopts
diff --git a/src/Control/Distributed/Process.hs b/src/Control/Distributed/Process.hs
--- a/src/Control/Distributed/Process.hs
+++ b/src/Control/Distributed/Process.hs
@@ -322,11 +322,7 @@
   )
 import qualified Control.Monad.Catch as Catch
 
-#if MIN_VERSION_base(4,6,0)
 import Prelude
-#else
-import Prelude hiding (catch)
-#endif
 import qualified Control.Exception as Exception (onException)
 import Data.Accessor ((^.))
 import Data.Foldable (forM_)
diff --git a/src/Control/Distributed/Process/Internal/CQueue.hs b/src/Control/Distributed/Process/Internal/CQueue.hs
--- a/src/Control/Distributed/Process/Internal/CQueue.hs
+++ b/src/Control/Distributed/Process/Internal/CQueue.hs
@@ -288,11 +288,7 @@
 -- | Weak reference to a CQueue
 mkWeakCQueue :: CQueue a -> IO () -> IO (Weak (CQueue a))
 mkWeakCQueue m@(CQueue (StrictMVar (MVar m#)) _ _) f = IO $ \s ->
-#if MIN_VERSION_base(4,9,0)
   case mkWeak# m# m (unIO f) s of (# s1, w #) -> (# s1, Weak w #)
-#else
-  case mkWeak# m# m f s of (# s1, w #) -> (# s1, Weak w #)
-#endif
 
 queueSize :: CQueue a -> IO Int
 queueSize (CQueue _ _ size) = readTVarIO size
diff --git a/src/Control/Distributed/Process/Internal/Primitives.hs b/src/Control/Distributed/Process/Internal/Primitives.hs
--- a/src/Control/Distributed/Process/Internal/Primitives.hs
+++ b/src/Control/Distributed/Process/Internal/Primitives.hs
@@ -124,19 +124,11 @@
   , sendCtrlMsg
   ) where
 
-#if ! MIN_VERSION_base(4,6,0)
-import Prelude hiding (catch)
-#endif
-
 import Data.Binary (Binary(..), Put, Get, decode)
 import Data.Time.Clock (getCurrentTime, UTCTime(..))
 import Data.Time.Calendar (Day(..))
 import Data.Time.Format (formatTime)
-#if MIN_VERSION_time(1,5,0)
 import Data.Time.Format (defaultTimeLocale)
-#else
-import System.Locale (defaultTimeLocale)
-#endif
 import System.Timeout (timeout)
 import Control.Monad (when, void)
 import Control.Monad.Reader (ask)
diff --git a/src/Control/Distributed/Process/Internal/StrictMVar.hs b/src/Control/Distributed/Process/Internal/StrictMVar.hs
--- a/src/Control/Distributed/Process/Internal/StrictMVar.hs
+++ b/src/Control/Distributed/Process/Internal/StrictMVar.hs
@@ -71,8 +71,4 @@
 
 mkWeakMVar :: StrictMVar a -> IO () -> IO (Weak (StrictMVar a))
 mkWeakMVar q@(StrictMVar (MVar m#)) f = IO $ \s ->
-#if MIN_VERSION_base(4,9,0)
   case mkWeak# m# q (unIO f) s of (# s', w #) -> (# s', Weak w #)
-#else
-  case mkWeak# m# q f s of (# s', w #) -> (# s', Weak w #)
-#endif
diff --git a/src/Control/Distributed/Process/Internal/Types.hs b/src/Control/Distributed/Process/Internal/Types.hs
--- a/src/Control/Distributed/Process/Internal/Types.hs
+++ b/src/Control/Distributed/Process/Internal/Types.hs
@@ -118,9 +118,6 @@
 import Control.Monad.Catch (MonadThrow(..), MonadCatch(..), MonadMask(..))
 import qualified Network.Transport as NT (EndPoint, EndPointAddress, Connection)
 import Control.Applicative
-#if !MIN_VERSION_base(4,13,0) && MIN_VERSION_base(4,9,0)
-import Control.Monad.Fail (MonadFail)
-#endif
 import Control.Monad.Fix (MonadFix)
 import Control.Monad.Reader (MonadReader(..), ReaderT, runReaderT)
 import Control.Monad.IO.Class (MonadIO(..))
@@ -356,9 +353,7 @@
   deriving ( Applicative
            , Functor
            , Monad
-#if MIN_VERSION_base(4,9,0)
            , MonadFail
-#endif
            , MonadFix
            , MonadIO
            , MonadReader LocalProcess
@@ -372,14 +367,13 @@
     lproc <- ask
     liftIO $ catch (runLocalProcess lproc p) (runLocalProcess lproc . h)
 instance MonadMask Process where
-#if MIN_VERSION_exceptions(0,10,0)
   generalBracket acquire release inner = do
     lproc <- ask
     liftIO $
       generalBracket (runLocalProcess lproc acquire)
                      (\a e -> runLocalProcess lproc $ release a e)
                      (runLocalProcess lproc . inner)
-#endif
+
   mask p = do
       lproc <- ask
       liftIO $ mask $ \restore ->
@@ -477,11 +471,7 @@
   deriving (Typeable)
 
 instance NFData Message where
-#if MIN_VERSION_bytestring(0,10,0)
   rnf (EncodedMessage _ e) = rnf e `seq` ()
-#else
-  rnf (EncodedMessage _ e) = BSL.length e `seq` ()
-#endif
   rnf (UnencodedMessage _ a) = e `seq` ()
     where e = BSL.length (encode a)
 
diff --git a/src/Control/Distributed/Process/Internal/WeakTQueue.hs b/src/Control/Distributed/Process/Internal/WeakTQueue.hs
--- a/src/Control/Distributed/Process/Internal/WeakTQueue.hs
+++ b/src/Control/Distributed/Process/Internal/WeakTQueue.hs
@@ -100,8 +100,4 @@
 
 mkWeakTQueue :: TQueue a -> IO () -> IO (Weak (TQueue a))
 mkWeakTQueue q@(TQueue _read (TVar write#)) f = IO $ \s ->
-#if MIN_VERSION_base(4,9,0)
   case mkWeak# write# q (unIO f) s of (# s', w #) -> (# s', Weak w #)
-#else
-  case mkWeak# write# q f s of (# s', w #) -> (# s', Weak w #)
-#endif
diff --git a/src/Control/Distributed/Process/Management/Internal/Trace/Tracer.hs b/src/Control/Distributed/Process/Management/Internal/Trace/Tracer.hs
--- a/src/Control/Distributed/Process/Management/Internal/Trace/Tracer.hs
+++ b/src/Control/Distributed/Process/Management/Internal/Trace/Tracer.hs
@@ -77,10 +77,6 @@
 import Debug.Trace (traceEventIO)
 import Prelude
 
-#if ! MIN_VERSION_base(4,6,0)
-import Prelude hiding (catch)
-#endif
-
 import System.Environment (getEnv)
 import System.IO
   ( Handle
@@ -91,11 +87,7 @@
   , hPutStrLn
   , hSetBuffering
   )
-#if MIN_VERSION_time(1,5,0)
 import Data.Time.Format (defaultTimeLocale)
-#else
-import System.Locale (defaultTimeLocale)
-#endif
 import System.Mem.Weak
   ( Weak
   )
diff --git a/src/Control/Distributed/Process/Node.hs b/src/Control/Distributed/Process/Node.hs
--- a/src/Control/Distributed/Process/Node.hs
+++ b/src/Control/Distributed/Process/Node.hs
@@ -38,11 +38,7 @@
   , foldlWithKey
   )
 import Data.Time.Format (formatTime)
-#if MIN_VERSION_time(1,5,0)
 import Data.Time.Format (defaultTimeLocale)
-#else
-import System.Locale (defaultTimeLocale)
-#endif
 import Data.Set (Set)
 import qualified Data.Set as Set
   ( empty
