diff --git a/manifest.dhall b/manifest.dhall
index 8bdf89e367bf6144858afdb03f86308a956455a1..3208c62cb3388ceb009af1ccfad261332b35e7e7 100644
--- a/manifest.dhall
+++ b/manifest.dhall
@@ -293,6 +293,7 @@ in  [ callHackage "Cabal" "3.8.1.0"
     , callHackage "pandoc" "2.19.2"
     , callHackage "parallel" "3.2.2.0"
     , callHackage "pcg-random" "0.1.3.7"
+    , callHackage "pcre2" "2.2.1"
     , callHackage "persistent" "2.14.3.0"
     , callHackage "pg-transact" "0.3.2.0"
     , callCabal2nix
diff --git a/overlay.nix b/overlay.nix
index de22bb48767ccc63b7483ad38e4890ac3e0eae1a..757766c6bd4dfe673cbb521a61ca1f4c1fd745a6 100644
--- a/overlay.nix
+++ b/overlay.nix
@@ -349,6 +349,8 @@ final: prev: with pkgs.haskell.lib; {
 
     pcg-random = prev.callPackage (./pkgs/pcg-random.nix) { };
 
+    pcre2 = prev.callPackage (./pkgs/pcre2.nix) { };
+
     persistent = prev.callPackage (./pkgs/persistent.nix) { };
 
     pg-transact = prev.callPackage (./pkgs/pg-transact.nix) { };
diff --git a/pkgs/pcre2.nix b/pkgs/pcre2.nix
new file mode 100644
index 0000000000000000000000000000000000000000..b86fa555479f3241802bbf6cc8d018462c418a58
--- /dev/null
+++ b/pkgs/pcre2.nix
@@ -0,0 +1,27 @@
+{ mkDerivation, base, containers, criterion, hspec, lib, microlens
+, microlens-platform, mtl, pcre-light, regex-pcre-builtin
+, template-haskell, text
+}:
+mkDerivation {
+  pname = "pcre2";
+  version = "2.2.1";
+  sha256 = "d48d8669d68f2858d825fb08b3730cfeb49eed964b093b39e78052fd1f510870";
+  libraryHaskellDepends = [
+    base containers microlens mtl template-haskell text
+  ];
+  testHaskellDepends = [
+    base containers hspec microlens microlens-platform mtl
+    template-haskell text
+  ];
+  benchmarkHaskellDepends = [
+    base containers criterion microlens microlens-platform mtl
+    pcre-light regex-pcre-builtin template-haskell text
+  ];
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  hyperlinkSource = false;
+  homepage = "https://github.com/sjshuck/hs-pcre2#readme";
+  description = "Regular expressions via the PCRE2 C library (included)";
+  license = lib.licenses.asl20;
+}
\ No newline at end of file