diff --git a/manifest.dhall b/manifest.dhall
index 97c9797761fd3211dcba6ac5b70f2bd7956bc4ae..581a02a3ddce4b1a5819daa153ecaa738022c457 100644
--- a/manifest.dhall
+++ b/manifest.dhall
@@ -215,6 +215,7 @@ in  [ callHackage "Cabal" "3.8.1.0"
         "https://github.com/haskell/double-conversion"
         (None Text)
         (None Text)
+    , callHackage "echo" "0.1.4"
     , callCabal2nix
         "ed25519"
         "https://gitlab.homotopic.tech/horizon/adopted/ed25519"
diff --git a/overlay.nix b/overlay.nix
index 5ffc8a945112d8f7e095e1e9e9552d5dade25aa6..3200078e6348a1f375d9e2f0fa16afa3f837d272 100644
--- a/overlay.nix
+++ b/overlay.nix
@@ -249,6 +249,8 @@ self: with pkgs.haskell.lib; {
 
   double-conversion = self.callPackage (./pkgs/double-conversion.nix) { };
 
+  echo = self.callPackage (./pkgs/echo.nix) { };
+
   ed25519 = self.callPackage (./pkgs/ed25519.nix) { };
 
   edit-distance = self.callPackage (./pkgs/edit-distance.nix) { };
diff --git a/pkgs/echo.nix b/pkgs/echo.nix
new file mode 100644
index 0000000000000000000000000000000000000000..db8e9e9e84481acbb7f9b7003e05d57c5252bfa0
--- /dev/null
+++ b/pkgs/echo.nix
@@ -0,0 +1,21 @@
+{ mkDerivation, base, lib, process }:
+mkDerivation {
+  pname = "echo";
+  version = "0.1.4";
+  sha256 = "c9fe1bf2904825a65b667251ec644f197b71dc5c209d2d254be5de3d496b0e43";
+  isLibrary = true;
+  isExecutable = true;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [ base process ];
+  enableLibraryProfiling = false;
+  enableExecutableProfiling = false;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "https://github.com/RyanGlScott/echo";
+  description = "A cross-platform, cross-console way to handle echoing terminal input";
+  license = lib.licenses.bsd3;
+  broken = false;
+}