diff --git a/gnu/packages/ocaml.scm b/gnu/packages/ocaml.scm
index 7fad276b4e..1b12b4121a 100644
--- a/gnu/packages/ocaml.scm
+++ b/gnu/packages/ocaml.scm
@@ -191,10 +191,10 @@ (define-public camlboot
 This package produces a native @command{ocamlc} and a bytecode @command{ocamllex}.")
       (license license:expat))))
 
-(define-public ocaml-5.0
+(define-public ocaml-5.1
   (package
     (name "ocaml")
-    (version "5.0.0")
+    (version "5.1.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -203,7 +203,7 @@ (define-public ocaml-5.0
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1p0p8wldrnbr61wfy3x4122017g4k5gjvfwlg3mvlqn8r2fxn2m5"))))
+                "1x3a6cyibmmyhqxq2y6vvj1bj3rngqkvppilchsmsn76p8nh8hcr"))))
     (build-system gnu-build-system)
     (native-search-paths
      (list (search-path-specification
@@ -906,8 +906,8 @@ (define-public opam-installer
 OPAM.")
     (properties
      ;; opam-installer is used as a tool and not as a library, we can use the
-     ;; OCaml 4.14 compiled opam until opam is compatible with OCaml 5.0.
-     `((ocaml5.0-variant . ,(delay opam-installer))))))
+     ;; OCaml 4.14 compiled opam until opam is compatible with OCaml 5.1.
+     `((ocaml5.1-variant . ,(delay opam-installer))))))
 
 (define ocaml-opam-repository
   (package
@@ -1102,8 +1102,8 @@ (define-public opam
     (inputs (list ocaml-opam-client))
     (properties
      ;; OPAM is used as a tool and not as a library, we can use the OCaml 4.14
-     ;; compiled opam until opam is compatible with OCaml 5.0.
-     `((ocaml5.0-variant . ,(delay opam))))))
+     ;; compiled opam until opam is compatible with OCaml 5.1.
+     `((ocaml5.1-variant . ,(delay opam))))))
 
 (define-public ocaml-opam-monorepo
   (package
@@ -1382,6 +1382,36 @@ (define-public ocaml-menhir
     ;; are QPL licensed.
     (license (list license:gpl2+ license:qpl))))
 
+(define-public ocaml5.1-menhir
+  (package
+    (name "ocaml-menhir")
+    (version "20231231")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://gitlab.inria.fr/fpottier/menhir.git")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "12a1zxbkipa2i0k7ay0frfzyibpdvh3hr0rcq18kgsp924wp9q5x"))))
+    (build-system dune-build-system)
+    (inputs
+     (list ocaml))
+    (arguments
+     `(#:tests? #f)) ; No check target
+    (properties `((ocaml5.1-variant . ,(delay (strip-ocaml5.1-variant ocaml5.1-menhir)))))
+    (home-page "https://gallium.inria.fr/~fpottier/menhir/")
+    (synopsis "Parser generator")
+    (description "Menhir is a parser generator.  It turns high-level grammar
+specifications, decorated with semantic actions expressed in the OCaml
+programming language into parsers, again expressed in OCaml.  It is based on
+Knuth’s LR(1) parser construction technique.")
+    ;; The file src/standard.mly and all files listed in src/mnehirLib.mlpack
+    ;; that have an *.ml or *.mli extension are GPL licensed. All other files
+    ;; are QPL licensed.
+    (license (list license:gpl2+ license:qpl))))
+
 (define-public ocaml-bigarray-compat
   (package
     (name "ocaml-bigarray-compat")
@@ -1615,12 +1645,12 @@ (define-public ocaml4.09-findlib
     (native-inputs
      (list m4 ocaml-4.09))))
 
-(define-public ocaml5.0-findlib
+(define-public ocaml5.1-findlib
   (package
     (inherit ocaml-findlib)
-    (name "ocaml5.0-findlib")
+    (name "ocaml5.1-findlib")
     (native-inputs
-     (list m4 ocaml-5.0))))
+     (list m4 ocaml-5.1))))
 
 (define-public ocaml-ounit2
   (package
@@ -1953,8 +1983,8 @@ (define-public dune-bootstrap
 (define-public ocaml4.09-dune-bootstrap
   (package-with-ocaml4.09 dune-bootstrap))
 
-(define-public ocaml5.0-dune-bootstrap
-  (package-with-ocaml5.0 dune-bootstrap))
+(define-public ocaml5.1-dune-bootstrap
+  (package-with-ocaml5.1 dune-bootstrap))
 
 (define-public dune-configurator
   (package
@@ -1977,7 +2007,7 @@ (define-public dune-configurator
     (propagated-inputs
      (list ocaml-csexp))
     (properties `((ocaml4.09-variant . ,(delay ocaml4.09-dune-configurator))
-                  (ocaml5.0-variant . ,(delay ocaml5.0-dune-configurator))))
+                  (ocaml5.1-variant . ,(delay ocaml5.1-dune-configurator))))
     (synopsis "Dune helper library for gathering system configuration")
     (description "Dune-configurator is a small library that helps writing
 OCaml scripts that test features available on the system, in order to generate
@@ -2002,16 +2032,16 @@ (define-public ocaml4.09-dune-configurator
     (propagated-inputs
      `(("ocaml-csexp" ,ocaml4.09-csexp)))))
 
-(define-public ocaml5.0-dune-configurator
+(define-public ocaml5.1-dune-configurator
   (package
     (inherit dune-configurator)
-    (name "ocaml5.0-dune-configurator")
+    (name "ocaml5.1-dune-configurator")
     (arguments
      `(,@(package-arguments dune-configurator)
-       #:dune ,ocaml5.0-dune-bootstrap
-       #:ocaml ,ocaml-5.0
-       #:findlib ,ocaml5.0-findlib))
-    (propagated-inputs (list ocaml5.0-csexp))))
+       #:dune ,ocaml5.1-dune-bootstrap
+       #:ocaml ,ocaml-5.1
+       #:findlib ,ocaml5.1-findlib))
+    (propagated-inputs (list ocaml5.1-csexp))))
 
 (define-public dune
   (package
@@ -2020,7 +2050,7 @@ (define-public dune
      (list dune-configurator))
     (properties `((ocaml4.07-variant . ,(delay ocaml4.07-dune))
                   (ocaml4.09-variant . ,(delay ocaml4.09-dune))
-                  (ocaml5.0-variant . ,(delay ocaml5.0-dune))))))
+                  (ocaml5.1-variant . ,(delay ocaml5.1-dune))))))
 
 (define-public ocaml4.09-dune
   (package
@@ -2042,11 +2072,11 @@ (define-public ocaml4.07-dune
                (base32
                 "0l4x0x2fz135pljv88zj8y6w1ninsqw0gn1mdxzprd6wbxbyn8wr"))))))
 
-(define-public ocaml5.0-dune
+(define-public ocaml5.1-dune
   (package
-    (inherit ocaml5.0-dune-bootstrap)
+    (inherit ocaml5.1-dune-bootstrap)
     (propagated-inputs
-     (list ocaml5.0-dune-configurator))))
+     (list ocaml5.1-dune-configurator))))
 
 (define-public ocaml-pp
   (package
@@ -2172,7 +2202,7 @@ (define-public ocaml-csexp
     (propagated-inputs
      (list ocaml-result))
     (properties `((ocaml4.09-variant . ,(delay ocaml4.09-csexp))
-                  (ocaml5.0-variant . ,(delay ocaml5.0-csexp))))
+                  (ocaml5.1-variant . ,(delay ocaml5.1-csexp))))
     (home-page "https://github.com/ocaml-dune/csexp")
     (synopsis "Parsing and printing of S-expressions in Canonical form")
     (description "This library provides minimal support for Canonical
@@ -2201,17 +2231,17 @@ (define-public ocaml4.09-csexp
     (propagated-inputs
      `(("ocaml-result" ,ocaml4.09-result)))))
 
-(define-public ocaml5.0-csexp
+(define-public ocaml5.1-csexp
   (package
     (inherit ocaml-csexp)
-    (name "ocaml5.0-csexp")
+    (name "ocaml5.1-csexp")
     (arguments
-     `(#:ocaml ,ocaml-5.0
-       #:findlib ,ocaml5.0-findlib
+     `(#:ocaml ,ocaml-5.1
+       #:findlib ,ocaml5.1-findlib
        ,@(substitute-keyword-arguments (package-arguments ocaml-csexp)
-           ((#:dune _) ocaml5.0-dune-bootstrap))))
+           ((#:dune _) ocaml5.1-dune-bootstrap))))
     (propagated-inputs
-     `(("ocaml-result" ,ocaml5.0-result)))))
+     `(("ocaml-result" ,ocaml5.1-result)))))
 
 (define-public ocaml-migrate-parsetree
   (package
@@ -2332,7 +2362,7 @@ (define-public ocaml-result
     (arguments
      `(#:dune ,dune-bootstrap))
     (properties `((ocaml4.09-variant . ,(delay ocaml4.09-result))
-                  (ocaml5.0-variant . ,(delay ocaml5.0-result))))
+                  (ocaml5.1-variant . ,(delay ocaml5.1-result))))
     (home-page "https://github.com/janestreet/result")
     (synopsis "Compatibility Result module")
     (description "Uses the new result type defined in OCaml >= 4.03 while
@@ -2349,14 +2379,14 @@ (define-public ocaml4.09-result
        #:ocaml ,ocaml-4.09
        #:findlib ,ocaml4.09-findlib))))
 
-(define-public ocaml5.0-result
+(define-public ocaml5.1-result
   (package
     (inherit ocaml-result)
-    (name "ocaml5.0-result")
+    (name "ocaml5.1-result")
     (arguments
-     `(#:dune ,ocaml5.0-dune-bootstrap
-       #:ocaml ,ocaml-5.0
-       #:findlib ,ocaml5.0-findlib))))
+     `(#:dune ,ocaml5.1-dune-bootstrap
+       #:ocaml ,ocaml-5.1
+       #:findlib ,ocaml5.1-findlib))))
 
 (define-public ocaml-iso8601
   (package
@@ -3169,8 +3199,8 @@ (define ocaml-eio
 OCaml with fibers.")
     (license license:isc)))
 
-(define-public ocaml5.0-eio
-  (package-with-ocaml5.0 ocaml-eio))
+(define-public ocaml5.1-eio
+  (package-with-ocaml5.1 ocaml-eio))
 
 (define ocaml-eio-luv
   (package
@@ -3183,8 +3213,8 @@ (define ocaml-eio-luv
     (description "@code{Eio_luv} provides a cross-platform backend for
 @code{Ocaml Eio}'s APIs using luv (libuv)")))
 
-(define-public ocaml5.0-eio-luv
-  (package-with-ocaml5.0 ocaml-eio-luv))
+(define-public ocaml5.1-eio-luv
+  (package-with-ocaml5.1 ocaml-eio-luv))
 
 (define-public ocaml-uring
   (package
@@ -3236,8 +3266,8 @@ (define ocaml-eio-linux
 @code{Ocaml Eio} APIs, plus a low-level API that can be used directly
 (in non-portable code).")))
 
-(define-public ocaml5.0-eio-linux
-  (package-with-ocaml5.0 ocaml-eio-linux))
+(define-public ocaml5.1-eio-linux
+  (package-with-ocaml5.1 ocaml-eio-linux))
 
 (define ocaml-eio-main
   (package
@@ -3256,8 +3286,8 @@ (define ocaml-eio-main
     (description "@code{Eio_main} selects an appropriate backend (e.g.
 @samp{eio_linux} or @samp{eio_luv}), depending on your platform.")))
 
-(define-public ocaml5.0-eio-main
-  (package-with-ocaml5.0 ocaml-eio-main))
+(define-public ocaml5.1-eio-main
+  (package-with-ocaml5.1 ocaml-eio-main))
 
 (define-public ocaml-lwt
   (package
@@ -5707,7 +5737,7 @@ (define-public ocaml-ctypes
       ("integers" ,ocaml-integers)))
    (inputs
     (list libffi))
-   (properties `((ocaml5.0-variant . ,(delay ocaml5.0-ctypes))))
+   (properties `((ocaml5.1-variant . ,(delay ocaml5.1-ctypes))))
    (synopsis "Library for binding to C libraries using pure OCaml")
    (description "Ctypes is a library for binding to C libraries using pure
 OCaml.  The primary aim is to make writing C extensions as straightforward as
@@ -5718,12 +5748,12 @@ (define-public ocaml-ctypes
 without writing or generating any C!")
    (license license:expat)))
 
-(define-public ocaml5.0-ctypes
-  ;; Contains fix to support OCaml 5.0
+(define-public ocaml5.1-ctypes
+  ;; Contains fix to support OCaml 5.1
   ;; (https://github.com/ocamllabs/ocaml-ctypes/pull/709)
   (let ((commit "52ff621f47dbc1ee5a90c30af0ae0474549946b4")
         (revision "0"))
-    (package-with-ocaml5.0
+    (package-with-ocaml5.1
      (package
        (inherit ocaml-ctypes)
        (name "ocaml-ctypes")
@@ -6098,7 +6128,7 @@ (define-public ocaml-merlin-lib
     (arguments '(#:package "merlin-lib"
                  #:tests? #f))          ; no tests
     (propagated-inputs (list ocaml-csexp ocaml-menhir))
-    (properties `((ocaml5.0-variant . ,(delay ocaml5.0-merlin-lib))))
+    (properties `((ocaml5.1-variant . ,(delay ocaml5.1-merlin-lib))))
     (home-page "https://ocaml.github.io/merlin/")
     (synopsis "Merlin libraries")
     (description "These libraries provides access to low-level compiler
@@ -6110,7 +6140,7 @@ (define ocaml-merlin-lib-500
   (package
     (inherit ocaml-merlin-lib)
     (name "ocaml-merlin-lib")
-    (version "4.7.1-500")
+    (version "4.13.1-501")
     (source
      (origin
        (method git-fetch)
@@ -6120,11 +6150,11 @@ (define ocaml-merlin-lib-500
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "05a87i2dkzv800nwb6y7b2j45avg8gs3gzb5a98wrj1i5zjqwh01"))))
+         "05k07hfxxdcfzis7n2fsa2a2kd1f06dharkyyv8vixmrgzffn2c3"))))
     (properties '())))
 
-(define-public ocaml5.0-merlin-lib
-  (package-with-ocaml5.0 ocaml-merlin-lib-500))
+(define-public ocaml5.1-merlin-lib
+  (package-with-ocaml5.1 ocaml-merlin-lib-500))
 
 (define-public ocaml-dot-merlin-reader
   (package
@@ -6133,19 +6163,19 @@ (define-public ocaml-dot-merlin-reader
     (arguments '(#:package "dot-merlin-reader"
                  #:tests? #f))          ; no tests
     (propagated-inputs (list ocaml-merlin-lib))
-    (properties `((ocaml5.0-variant . ,(delay ocaml5.0-dot-merlin-reader))))
+    (properties `((ocaml5.1-variant . ,(delay ocaml5.1-dot-merlin-reader))))
     (synopsis "Reads config files for @code{ocaml-merlin}")
     (description "@code{ocaml-dot-merlin-reader} is an external reader for
 @code{ocaml-merlin} configurations.")))
 
-(define-public ocaml5.0-dot-merlin-reader
-  (package-with-ocaml5.0
+(define-public ocaml5.1-dot-merlin-reader
+  (package-with-ocaml5.1
    (package
      (inherit ocaml-merlin-lib-500)
      (name "ocaml-dot-merlin-reader")
      (arguments '(#:package "dot-merlin-reader"
                   #:tests? #f))         ; no tests
-     (propagated-inputs (list ocaml5.0-merlin-lib))
+     (propagated-inputs (list ocaml5.1-merlin-lib))
      (synopsis "Reads config files for @code{ocaml-merlin}")
      (description "@code{ocaml-dot-merlin-reader} is an external reader for
 @code{ocaml-merlin} configurations."))))
@@ -6163,7 +6193,7 @@ (define-public ocaml-merlin
              (when tests?
                (invoke "dune" "runtest" "-p" "merlin,dot-merlin-reader")))))))
     (propagated-inputs (list ocaml-merlin-lib ocaml-yojson))
-    (properties `((ocaml5.0-variant . ,(delay ocaml5.0-merlin))))
+    (properties `((ocaml5.1-variant . ,(delay ocaml5.1-merlin))))
     (native-inputs
      (list ocaml-dot-merlin-reader ; required for tests
            ocaml-ppxlib
@@ -6176,8 +6206,8 @@ (define-public ocaml-merlin
 Atom.")
     (license license:expat)))
 
-(define-public ocaml5.0-merlin
-  (package-with-ocaml5.0
+(define-public ocaml5.1-merlin
+  (package-with-ocaml5.1
    (package
      (inherit ocaml-merlin-lib-500)
      (name "ocaml-merlin")
@@ -6431,7 +6461,7 @@ (define-public ocaml-base
     (build-system dune-build-system)
     (propagated-inputs
      (list ocaml-sexplib0))
-    (properties `((ocaml5.0-variant . ,(delay ocaml5.0-base))))
+    (properties `((ocaml5.1-variant . ,(delay ocaml5.1-base))))
     (synopsis
      "Full standard library replacement for OCaml")
     (description
@@ -6446,12 +6476,12 @@ (define-public ocaml-base
 @url{https://github.com/janestreet/stdio, ocaml-stdio}.")
     (license license:expat)))
 
-(define-public ocaml5.0-base
+(define-public ocaml5.1-base
   ;; This version contains fixes for OCaml 5.0
   ;; (see https://github.com/ocaml/opam-repository/pull/21851)
   (let ((commit "423dbad212f55506767d758b1ceb2d6e0ee8e7f5")
         (revision "0"))
-   (package-with-ocaml5.0
+   (package-with-ocaml5.1
     (package
       (inherit ocaml-base)
       (name "ocaml-base")
@@ -6462,7 +6492,7 @@ (define-public ocaml5.0-base
          (uri (git-reference
                (url "https://github.com/kit-ty-kate/base")
                (commit commit)))
-         (file-name (git-file-name "ocaml5.0-base" version))
+         (file-name (git-file-name "ocaml5.1-base" version))
          (sha256
           (base32
            "15vsiv3q53l1bzrvqgspf3lp2104s9dzw62z3nl75f53jvjvsyf6"))))
@@ -7369,7 +7399,7 @@ (define-public ocaml-ppx-expect
            ocaml-migrate-parsetree
            ocaml-re))
     (properties `((upstream-name . "ppx_expect")
-                  (ocaml5.0-variant . ,(delay ocaml5.0-ppx-expect))))
+                  (ocaml5.1-variant . ,(delay ocaml5.1-ppx-expect))))
     (home-page "https://github.com/janestreet/ppx_expect")
     (synopsis "Cram like framework for OCaml")
     (description "Expect-test is a framework for writing tests in OCaml, similar
@@ -7379,12 +7409,12 @@ (define-public ocaml-ppx-expect
 to denote the expected output.")
     (license license:asl2.0)))
 
-(define-public ocaml5.0-ppx-expect
+(define-public ocaml5.1-ppx-expect
   ;; Contains fixes for OCaml 5.0
   ;; (https://github.com/janestreet/ppx_expect/pull/39/).
   (let ((commit "83edfc1ee779e8dcdd975e26715c2e688326befa")
         (revision "0"))
-    (package-with-ocaml5.0
+    (package-with-ocaml5.1
      (package
        (inherit ocaml-ppx-expect)
        (name "ocaml-ppx-expect")
@@ -9235,15 +9265,15 @@ (define-public ocaml-crowbar
            ocaml-uunf
            ocaml-uutf
            ocaml-pprint))
-    (properties `((ocaml5.0-variant . ,(delay ocaml5.0-crowbar))))
+    (properties `((ocaml5.1-variant . ,(delay ocaml5.1-crowbar))))
     (synopsis "Ocaml library for tests, let a fuzzer find failing cases")
     (description "Crowbar is a library for testing code, combining
 QuickCheck-style property-based testing and the magical bug-finding powers of
 @uref{http://lcamtuf.coredump.cx/afl/, afl-fuzz}.")
     (license license:expat)))
 
-(define-public ocaml5.0-crowbar
-  (package-with-ocaml5.0
+(define-public ocaml5.1-crowbar
+  (package-with-ocaml5.1
    (package
      (inherit ocaml-crowbar)
      ;; Tests require ocaml-calendar which does not work with OCaml 5.0
diff --git a/guix/build-system/ocaml.scm b/guix/build-system/ocaml.scm
index 582d00b4cd..607e6dca60 100644
--- a/guix/build-system/ocaml.scm
+++ b/guix/build-system/ocaml.scm
@@ -31,8 +31,8 @@ (define-module (guix build-system ocaml)
             strip-ocaml4.07-variant
             package-with-ocaml4.09
             strip-ocaml4.09-variant
-            package-with-ocaml5.0
-            strip-ocaml5.0-variant
+            package-with-ocaml5.1
+            strip-ocaml5.1-variant
             default-findlib
             default-ocaml
             lower
@@ -112,17 +112,17 @@ (define (default-ocaml4.09-dune)
   (let ((module (resolve-interface '(gnu packages ocaml))))
     (module-ref module 'ocaml4.09-dune)))
 
-(define (default-ocaml5.0)
+(define (default-ocaml5.1)
   (let ((ocaml (resolve-interface '(gnu packages ocaml))))
-    (module-ref ocaml 'ocaml-5.0)))
+    (module-ref ocaml 'ocaml-5.1)))
 
-(define (default-ocaml5.0-findlib)
+(define (default-ocaml5.1-findlib)
   (let ((module (resolve-interface '(gnu packages ocaml))))
-    (module-ref module 'ocaml5.0-findlib)))
+    (module-ref module 'ocaml5.1-findlib)))
 
-(define (default-ocaml5.0-dune)
+(define (default-ocaml5.1-dune)
   (let ((module (resolve-interface '(gnu packages ocaml))))
-    (module-ref module 'ocaml5.0-dune)))
+    (module-ref module 'ocaml5.1-dune)))
 
 (define* (package-with-explicit-ocaml ocaml findlib dune old-prefix new-prefix
                                        #:key variant-property)
@@ -212,18 +212,18 @@ (define (strip-ocaml4.09-variant p)
     (inherit p)
     (properties (alist-delete 'ocaml4.09-variant (package-properties p)))))
 
-(define package-with-ocaml5.0
-  (package-with-explicit-ocaml (delay (default-ocaml5.0))
-                               (delay (default-ocaml5.0-findlib))
-                               (delay (default-ocaml5.0-dune))
-                               "ocaml-" "ocaml5.0-"
-                               #:variant-property 'ocaml5.0-variant))
+(define package-with-ocaml5.1
+  (package-with-explicit-ocaml (delay (default-ocaml5.1))
+                               (delay (default-ocaml5.1-findlib))
+                               (delay (default-ocaml5.1-dune))
+                               "ocaml-" "ocaml5.1-"
+                               #:variant-property 'ocaml5.1-variant))
 
-(define (strip-ocaml5.0-variant p)
-  "Remove the 'ocaml5.0-variant' property from P."
+(define (strip-ocaml5.1-variant p)
+  "Remove the 'ocaml5.1-variant' property from P."
   (package
     (inherit p)
-    (properties (alist-delete 'ocaml5.0-variant (package-properties p)))))
+    (properties (alist-delete 'ocaml5.1-variant (package-properties p)))))
 
 (define* (lower name
                 #:key source inputs native-inputs outputs system target
