diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,14 @@
 
 The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
 
+## 0.3.1.0 - 2022-04-08
+
+### Added
+
+ - `addTemporaryRoot`: add a store gc root for the duration of the process.
+
+ - `isValidPath`: a simple alternative to `queryPathInfo` for simple needs.
+
 ## 0.3.0.1 - 2022-03-21
 
 ### Removed
diff --git a/hercules-ci-cnix-store.cabal b/hercules-ci-cnix-store.cabal
--- a/hercules-ci-cnix-store.cabal
+++ b/hercules-ci-cnix-store.cabal
@@ -1,7 +1,7 @@
 cabal-version: 2.4
 
 name:           hercules-ci-cnix-store
-version:        0.3.0.1
+version:        0.3.1.0
 synopsis:       Haskell bindings for Nix's libstore
 category:       Nix
 homepage:       https://docs.hercules-ci.com
diff --git a/src/Hercules/CNix/Store.hs b/src/Hercules/CNix/Store.hs
--- a/src/Hercules/CNix/Store.hs
+++ b/src/Hercules/CNix/Store.hs
@@ -260,6 +260,15 @@
     store.ensurePath(storePath);
   } |]
 
+addTemporaryRoot :: Store -> StorePath -> IO ()
+addTemporaryRoot (Store store) storePath = do
+  [C.throwBlock| void {
+    ReceiveInterrupts _;
+    Store &store = **$(refStore* store);
+    StorePath &storePath = *$fptr-ptr:(nix::StorePath *storePath);
+    store.addTempRoot(storePath);
+  } |]
+
 clearPathInfoCache :: Store -> IO ()
 clearPathInfoCache (Store store) =
   [C.throwBlock| void {
@@ -804,6 +813,17 @@
       std::string s = std::string($bs-ptr:bs, $bs-len:bs);
       return new StorePath(store.followLinksToStorePath(s));
     }|]
+
+-- | Whether a path exists and is registered.
+isValidPath :: Store -> StorePath -> IO Bool
+isValidPath (Store store) path =
+  [C.throwBlock| bool {
+    ReceiveInterrupts _;
+    Store &store = **$(refStore* store);
+    StorePath &path = *$fptr-ptr:(nix::StorePath *path);
+    return store.isValidPath(path);
+  }|]
+    <&> (/= 0)
 
 queryPathInfo ::
   Store ->
