diff --git a/manifest.dhall b/manifest.dhall
index a41a93f6dd09291c6195f848f3c59428be1b50a0..a3a854bde16d3648c0c1cb779fb9fd384b53bc77 100644
--- a/manifest.dhall
+++ b/manifest.dhall
@@ -144,6 +144,7 @@ in  [ callHackage "Cabal" "3.8.1.0"
     , callHackage "config-ini" "0.2.5.0"
     , callHackage "connection" "0.3.1"
     , callHackage "constraints" "0.13.4"
+    , callHackage "criterion" "1.5.13.0"
     , callHackage "cursor" "0.3.2.0"
     , callCabal2nix
         "cursor-dirforest"
diff --git a/overlay.nix b/overlay.nix
index 2342ed5c25bd2cc296bf37cbf3f9d76f31940783..4340ed071bafbdccee2947cf37827d71a469aa49 100644
--- a/overlay.nix
+++ b/overlay.nix
@@ -155,6 +155,8 @@ final: prev: with pkgs.haskell.lib; {
 
   constraints = prev.callPackage (./pkgs/constraints.nix) { };
 
+  criterion = prev.callPackage (./pkgs/criterion.nix) { };
+
   cryptohash-sha1 = prev.callPackage (./pkgs/cryptohash-sha1.nix) { };
 
   cryptonite = prev.callPackage (./pkgs/cryptonite.nix) { };
diff --git a/pkgs/criterion.nix b/pkgs/criterion.nix
new file mode 100644
index 0000000000000000000000000000000000000000..21afb169754c94d31a310bfbe6d8529a15282a49
--- /dev/null
+++ b/pkgs/criterion.nix
@@ -0,0 +1,112 @@
+{ mkDerivation
+, aeson
+, ansi-wl-pprint
+, base
+, base-compat
+, base-compat-batteries
+, binary
+, binary-orphans
+, bytestring
+, cassava
+, code-page
+, containers
+, criterion-measurement
+, deepseq
+, directory
+, exceptions
+, filepath
+, Glob
+, HUnit
+, js-chart
+, lib
+, microstache
+, mtl
+, mwc-random
+, optparse-applicative
+, parsec
+, QuickCheck
+, statistics
+, tasty
+, tasty-hunit
+, tasty-quickcheck
+, text
+, time
+, transformers
+, transformers-compat
+, vector
+, vector-algorithms
+}:
+mkDerivation {
+  pname = "criterion";
+  version = "1.5.13.0";
+  sha256 = "e2a8545eb62340ecb3c93b156495cd76cd0ef7d63c026904297f0afe1aa579a7";
+  revision = "2";
+  editedCabalFile = "09s70kqkp1j78idaqrpnz8v870vy6xyclnpz9g4x70cr4r67lqkd";
+  isLibrary = true;
+  isExecutable = true;
+  enableSeparateDataOutput = true;
+  libraryHaskellDepends = [
+    aeson
+    ansi-wl-pprint
+    base
+    base-compat-batteries
+    binary
+    binary-orphans
+    bytestring
+    cassava
+    code-page
+    containers
+    criterion-measurement
+    deepseq
+    directory
+    exceptions
+    filepath
+    Glob
+    js-chart
+    microstache
+    mtl
+    mwc-random
+    optparse-applicative
+    parsec
+    statistics
+    text
+    time
+    transformers
+    transformers-compat
+    vector
+    vector-algorithms
+  ];
+  executableHaskellDepends = [
+    base
+    base-compat-batteries
+    optparse-applicative
+  ];
+  testHaskellDepends = [
+    aeson
+    base
+    base-compat
+    base-compat-batteries
+    bytestring
+    deepseq
+    directory
+    HUnit
+    QuickCheck
+    statistics
+    tasty
+    tasty-hunit
+    tasty-quickcheck
+    vector
+  ];
+  enableLibraryProfiling = false;
+  enableExecutableProfiling = false;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "http://www.serpentine.com/criterion";
+  description = "Robust, reliable performance measurement and analysis";
+  license = lib.licenses.bsd3;
+  mainProgram = "criterion-report";
+  broken = false;
+}