diff --git a/manifest.dhall b/manifest.dhall
index 38dd78f1b8969acb428100b01ebbf08664271d38..30bcb1a8dc1cf334ca872a9e8f07d615553393dc 100644
--- a/manifest.dhall
+++ b/manifest.dhall
@@ -274,6 +274,7 @@ in  [ callHackage "Cabal" "3.8.1.0"
     , callHackage "fin" "0.2.1"
     , callHackage "fixed" "0.3"
     , callHackage "foldl" "1.4.12"
+    , callHackage "foreign-store" "0.2"
     , callHackage "foundation" "0.0.29"
     , callHackage "free" "5.1.9"
     , callHackage "friendly-time" "0.4.1"
diff --git a/overlay.nix b/overlay.nix
index 704005224bb36b1063014f69cd4655b3b58d4dd9..58df2d07e3b57fe2ff9be104e4bb5f4dcb17ca7d 100644
--- a/overlay.nix
+++ b/overlay.nix
@@ -361,6 +361,8 @@ self: with pkgs.haskell.lib; {
 
   foldl = self.callPackage (./pkgs/foldl.nix) { };
 
+  foreign-store = self.callPackage (./pkgs/foreign-store.nix) { };
+
   foundation = self.callPackage (./pkgs/foundation.nix) { };
 
   free = self.callPackage (./pkgs/free.nix) { };
diff --git a/pkgs/foreign-store.nix b/pkgs/foreign-store.nix
new file mode 100644
index 0000000000000000000000000000000000000000..2a5e108a616e504e101442f845256a1e3ecc41dd
--- /dev/null
+++ b/pkgs/foreign-store.nix
@@ -0,0 +1,21 @@
+{ mkDerivation, base, lib }:
+mkDerivation {
+  pname = "foreign-store";
+  version = "0.2";
+  sha256 = "06718a214d068eaa494cc82376f23b2059a141b01048cd7efcf2176a6c3383dc";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [ base ];
+  enableLibraryProfiling = false;
+  enableExecutableProfiling = false;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "https://github.com/chrisdone/foreign-store";
+  description = "Store a stable pointer in a foreign context to be retrieved later";
+  license = lib.licenses.bsd3;
+  broken = false;
+}