diff --git a/horizon.dhall b/horizon.dhall
index 70be7024e8d0ca478f8891a6917013a9ac26f417..206b988e80edf866621941cbbb63499b4da5cde9 100644
--- a/horizon.dhall
+++ b/horizon.dhall
@@ -86,6 +86,8 @@ let packages =
       , bytes = H.callHackage "bytes" "0.17.2"
       , bytestring-strict-builder =
           H.callHackage "bytestring-strict-builder" "0.4.5.6"
+      , bytestring-tree-builder =
+          H.callHackage "bytestring-tree-builder" "0.2.7.10"
       , c2hs = H.callHackage "c2hs" "0.28.8"
       , cabal-install = H.callHackage "cabal-install" "3.8.1.0"
       , cabal-install-solver = H.callHackage "cabal-install-solver" "3.8.1.0"
@@ -348,6 +350,7 @@ let packages =
       , haskell-src = H.callHackage "haskell-src" "1.0.4"
       , hasql = H.callHackage "hasql" "1.6.3"
       , hasql-th = H.callHackage "hasql-th" "0.4.0.18"
+      , hasql-transaction = H.callHackage "hasql-transaction" "1.0.1.2"
       , hdaemonize = H.callHackage "hdaemonize" "0.5.6"
       , heaps = H.callHackage "heaps" "0.4"
       , headed-megaparsec = H.callHackage "headed-megaparsec" "0.2.1.1"
diff --git a/horizon.lock b/horizon.lock
index a80fca9f59de1a72eca4a7f89e896c1655753660..4facacb238add88799579f7e5b40691dc4a40174 100644
--- a/horizon.lock
+++ b/horizon.lock
@@ -262,6 +262,10 @@
   , mapValue =
       "2faa9baaba5c12368ff6f53edbc548241b414089a037d66067088882602b4ffa"
   }
+, { mapKey = "bytestring-tree-builder"
+  , mapValue =
+      "0f4a7b167f0c5bd67969996be5fd56bc270ec90aa5f19fad72af2f35aca2bc12"
+  }
 , { mapKey = "c2hs"
   , mapValue =
       "6d6262823310cf14a23c4fb5e0374a16a29b0ca6f667e9d0510f17383c3951b0"
@@ -1054,6 +1058,10 @@
   , mapValue =
       "3044c356f1d3d408da4205d71925a830f81857571b753f6ee745423b75471279"
   }
+, { mapKey = "hasql-transaction"
+  , mapValue =
+      "d4a5470b3b869fb04e496de9ef6477a27a53242ff7cbf27d9d21443b83cf609e"
+  }
 , { mapKey = "hdaemonize"
   , mapValue =
       "ab4f90bf1de28057460801b3eb68e3785e2e5bba6227df52d511bf7c209905f1"
diff --git a/overlay.nix b/overlay.nix
index ec79068e026be8409a60efe0ea83efbc0807d283..4d1d19fbe12702dc2e77c11991180c9b53fb391b 100644
--- a/overlay.nix
+++ b/overlay.nix
@@ -133,6 +133,8 @@ final: prev: with pkgs.haskell.lib; {
 
   bytestring-strict-builder = final.callPackage (./pkgs/bytestring-strict-builder.nix) { };
 
+  bytestring-tree-builder = final.callPackage (./pkgs/bytestring-tree-builder.nix) { };
+
   c2hs = final.callPackage (./pkgs/c2hs.nix) { };
 
   cabal-install = final.callPackage (./pkgs/cabal-install.nix) { };
@@ -529,6 +531,8 @@ final: prev: with pkgs.haskell.lib; {
 
   hasql-th = final.callPackage (./pkgs/hasql-th.nix) { };
 
+  hasql-transaction = final.callPackage (./pkgs/hasql-transaction.nix) { };
+
   hdaemonize = final.callPackage (./pkgs/hdaemonize.nix) { };
 
   headed-megaparsec = final.callPackage (./pkgs/headed-megaparsec.nix) { };
diff --git a/pkgs/bytestring-tree-builder.nix b/pkgs/bytestring-tree-builder.nix
new file mode 100644
index 0000000000000000000000000000000000000000..7a61dd8504a05584e23a4e7ca622188e9ecd4771
--- /dev/null
+++ b/pkgs/bytestring-tree-builder.nix
@@ -0,0 +1,31 @@
+{ mkDerivation, QuickCheck, base, base-prelude, bytestring
+, criterion, deepseq, lib, quickcheck-instances, tasty, tasty-hunit
+, tasty-quickcheck, text
+}:
+mkDerivation {
+  pname = "bytestring-tree-builder";
+  version = "0.2.7.10";
+  sha256 = "29282a224cd60c5c15a21deca658eb764325512ee96be8bc27638764aebd363d";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [ base bytestring text ];
+  testHaskellDepends = [
+    base-prelude bytestring QuickCheck quickcheck-instances tasty
+    tasty-hunit tasty-quickcheck
+  ];
+  benchmarkHaskellDepends = [
+    base-prelude bytestring criterion deepseq
+  ];
+  enableLibraryProfiling = true;
+  enableExecutableProfiling = true;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "https://github.com/nikita-volkov/bytestring-tree-builder";
+  description = "A very efficient ByteString builder implementation based on the binary tree";
+  license = lib.licenses.mit;
+  broken = false;
+}
\ No newline at end of file
diff --git a/pkgs/hasql-transaction.nix b/pkgs/hasql-transaction.nix
new file mode 100644
index 0000000000000000000000000000000000000000..83ffb87fda7eac24d37cfe962a6faa2fe3d97119
--- /dev/null
+++ b/pkgs/hasql-transaction.nix
@@ -0,0 +1,28 @@
+{ mkDerivation, async, base, bytestring, bytestring-tree-builder
+, contravariant, contravariant-extras, hasql, lib, mtl, rerebase
+, transformers
+}:
+mkDerivation {
+  pname = "hasql-transaction";
+  version = "1.0.1.2";
+  sha256 = "3aa77a1c0682b762be2f3033ce63e1b8284d548fde2badd55ab6e627b3ec1b73";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [
+    base bytestring bytestring-tree-builder contravariant
+    contravariant-extras hasql mtl transformers
+  ];
+  testHaskellDepends = [ async contravariant-extras hasql rerebase ];
+  enableLibraryProfiling = true;
+  enableExecutableProfiling = true;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "https://github.com/nikita-volkov/hasql-transaction";
+  description = "Composable abstraction over retryable transactions for Hasql";
+  license = lib.licenses.mit;
+  broken = false;
+}
\ No newline at end of file