diff --git a/CHANGES.markdown b/CHANGES.markdown
--- a/CHANGES.markdown
+++ b/CHANGES.markdown
@@ -1,3 +1,9 @@
+0.6.2 (5 March 2025)
+--------------------
+
+- Support `random-1.3`.  Thanks to @bgamari and @lehins for help
+  making the necessary updates.
+
 0.6.1 (22 October 2024)
 -----------------------
 
diff --git a/Control/Monad/Random/Class.hs b/Control/Monad/Random/Class.hs
--- a/Control/Monad/Random/Class.hs
+++ b/Control/Monad/Random/Class.hs
@@ -366,7 +366,7 @@
       -- Subtract from 1 to match the way uniform Double values are
       -- generated, and hence match the old behavior of this function.
       let p = s * (1 - toRational (w :: Word64) / toRational (maxBound :: Word64))
-      return . Just . fst . head . dropWhile ((< p) . snd) $ cums
+      return . fmap fst . F.find ((>= p) . snd) $ cums
 
 -- | Sample a value uniformly from a nonempty collection of elements.
 uniform :: (F.Foldable t, MonadRandom m) => t a -> m a
@@ -386,12 +386,12 @@
 -- The old implementation of `fromListMay`, for comparison.  See
 -- https://github.com/byorgey/MonadRandom/issues/53 and
 -- https://byorgey.github.io/blog/posts/2024/10/14/MonadRandom-version-bump.html
-fromListMayOld :: MonadRandom m => [(a, Rational)] -> m (Maybe a)
-fromListMayOld xs = do
+_fromListMayOld :: MonadRandom m => [(a, Rational)] -> m (Maybe a)
+_fromListMayOld xs = do
   let s = fromRational (sum (map snd xs)) :: Double
       cums = scanl1 (\ ~(_, q) ~(y, s') -> (y, s' + q)) xs
   if s <= 0
     then return Nothing
     else do
       p <- liftM toRational $ getRandomR (0, s)
-      return . Just . fst . head . dropWhile ((< p) . snd) $ cums
+      return . fmap fst . F.find ((>= p) . snd) $ cums
diff --git a/Control/Monad/Trans/Random/Lazy.hs b/Control/Monad/Trans/Random/Lazy.hs
--- a/Control/Monad/Trans/Random/Lazy.hs
+++ b/Control/Monad/Trans/Random/Lazy.hs
@@ -282,7 +282,11 @@
   uniformWord16 = applyRandT genWord16
   uniformWord32 = applyRandT genWord32
   uniformWord64 = applyRandT genWord64
+#if MIN_VERSION_random(1,3,0)
+  uniformByteArrayM pinned sz = applyRandT $ uniformByteArray pinned sz
+#else
   uniformShortByteString n = applyRandT (genShortByteString n)
+#endif
 
 -- |
 --
diff --git a/Control/Monad/Trans/Random/Strict.hs b/Control/Monad/Trans/Random/Strict.hs
--- a/Control/Monad/Trans/Random/Strict.hs
+++ b/Control/Monad/Trans/Random/Strict.hs
@@ -289,7 +289,11 @@
   uniformWord16 = applyRandT genWord16
   uniformWord32 = applyRandT genWord32
   uniformWord64 = applyRandT genWord64
+#if MIN_VERSION_random(1,3,0)
+  uniformByteArrayM pinned sz = applyRandT $ uniformByteArray pinned sz
+#else
   uniformShortByteString n = applyRandT (genShortByteString n)
+#endif
 
 -- |
 --
diff --git a/MonadRandom.cabal b/MonadRandom.cabal
--- a/MonadRandom.cabal
+++ b/MonadRandom.cabal
@@ -1,5 +1,5 @@
 name:                MonadRandom
-version:             0.6.1
+version:             0.6.2
 synopsis:            Random-number generation monad.
 description:         Support for computations which consume random values.
 license:             BSD3
@@ -11,7 +11,7 @@
 build-type:          Simple
 cabal-version:       >=1.10
 extra-source-files:  CHANGES.markdown
-tested-with:         GHC ==7.10.3 || ==8.0.2 || ==8.2.2 || ==8.4.4 || ==8.6.5 || ==8.8.4 || ==8.10.7 || ==9.0.2 || ==9.2.8 || ==9.4.8 || ==9.6.5 || ==9.8.2 || ==9.10.1
+tested-with:         GHC ==7.10.3 || ==8.0.2 || ==8.2.2 || ==8.4.4 || ==8.6.5 || ==8.8.4 || ==8.10.7 || ==9.0.2 || ==9.2.8 || ==9.4.8 || ==9.6.6 || ==9.8.2 || ==9.10.1 || ==9.12.1
 
 source-repository head
   type:     git
@@ -32,7 +32,7 @@
     transformers-compat >=0.4 && <0.8,
     mtl                 >=2.2.1 && <2.3 || >= 2.3.1 && < 2.4,
     primitive           >=0.6 && <0.10,
-    random              >=1.0.1 && <1.3
+    random              >=1.0.1 && <1.4
   ghc-options:         -Wall
   default-language:    Haskell2010
   other-extensions:    Safe
