diff --git a/dev-ml/uopt/Manifest b/dev-ml/uopt/Manifest
new file mode 100644
index 0000000000000..4e83cef130a49
--- /dev/null
+++ b/dev-ml/uopt/Manifest
@@ -0,0 +1 @@
+DIST uopt-0.17.0.tar.gz 5880 BLAKE2B d1e18fafad21ad98d7d5a7f2c39121c6b097a3f295616a6ebc33c438452f2c35e1d6040a5bf893d3d4e889e3783283f36c7571b3b676f5dd81517b2a2ede49a3 SHA512 ccee93d326f3ceb9d844b3470f27d7f1eb7fd20818be564557293373c544ac2dc6d1db48f1972f5525a11c7976711eb903dd4be0afd17c9b0118dc62be193811
diff --git a/dev-ml/uopt/metadata.xml b/dev-ml/uopt/metadata.xml
new file mode 100644
index 0000000000000..0357c74bd81b0
--- /dev/null
+++ b/dev-ml/uopt/metadata.xml
@@ -0,0 +1,11 @@
+
+
+
+
+ ml@gentoo.org
+ ML
+
+
+ janestreet/uopt
+
+
diff --git a/dev-ml/uopt/uopt-0.17.0.ebuild b/dev-ml/uopt/uopt-0.17.0.ebuild
new file mode 100644
index 0000000000000..5788d919c172d
--- /dev/null
+++ b/dev-ml/uopt/uopt-0.17.0.ebuild
@@ -0,0 +1,23 @@
+# Copyright 2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit dune
+
+DESCRIPTION="An [option]-like type that incurs no allocation"
+HOMEPAGE="https://github.com/janestreet/uopt"
+SRC_URI="https://github.com/janestreet/${PN}/archive/refs/tags/v${PV}.tar.gz -> ${P}.tar.gz"
+
+LICENSE="MIT"
+SLOT="0/$(ver_cut 1-2)"
+KEYWORDS="~amd64 ~arm64 ~ppc ~ppc64"
+IUSE="+ocamlopt"
+
+RDEPEND="
+ >=dev-lang/ocaml-5
+ dev-ml/base:${SLOT}[ocamlopt?]
+ dev-ml/ppx_jane:${SLOT}[ocamlopt?]
+"
+DEPEND="${RDEPEND}"
+BDEPEND=">=dev-ml/dune-3.11"
diff --git a/profiles/package.mask b/profiles/package.mask
index d746ceefb7f95..b835fbdd79751 100644
--- a/profiles/package.mask
+++ b/profiles/package.mask
@@ -289,6 +289,7 @@ dev-ml/ppx_diff:0/0.17
dev-ml/int_repr:0/0.17
dev-ml/base_bigstring:0/0.17
dev-ml/core:0/0.17
+dev-ml/uopt:0/0.17
# Arthur Zamarin (2024-06-08)
# EAPI=6, waiting for a version bump, not maintained for many years.