diff --git a/pkgs/development/ocaml-modules/opam-core/default.nix b/pkgs/development/ocaml-modules/opam-core/default.nix
new file mode 100644
index 000000000000..22c1ecdf7032
--- /dev/null
+++ b/pkgs/development/ocaml-modules/opam-core/default.nix
@@ -0,0 +1,20 @@
+{ lib, buildDunePackage, unzip
+, opam, ocamlgraph, re, cppo }:
+
+buildDunePackage rec {
+  pname = "opam-core";
+
+  inherit (opam) src version;
+
+  nativeBuildInputs = [ unzip cppo ];
+  propagatedBuildInputs = [ ocamlgraph re ];
+
+  # get rid of check for curl at configure time
+  # opam-core does not call curl at run time
+  configureFlags = [ "--disable-checks" ];
+
+  meta = opam.meta // {
+    description = "Small standard library extensions, and generic system interaction modules used by opam";
+    maintainers = with lib.maintainers; [ sternenseemann ];
+  };
+}
diff --git a/pkgs/top-level/ocaml-packages.nix b/pkgs/top-level/ocaml-packages.nix
index 3294099ca5dd..41ca0fc3db56 100644
--- a/pkgs/top-level/ocaml-packages.nix
+++ b/pkgs/top-level/ocaml-packages.nix
@@ -676,6 +676,10 @@ let
 
     omd = callPackage ../development/ocaml-modules/omd { };
 
+    opam-core = callPackage ../development/ocaml-modules/opam-core {
+      inherit (pkgs) opam unzip;
+    };
+
     opam-file-format = callPackage ../development/ocaml-modules/opam-file-format { };
 
     opium = callPackage ../development/ocaml-modules/opium { };