diff --git a/pkgs/applications/office/zotero/default.nix b/pkgs/applications/office/zotero/default.nix
new file mode 100644
index 000000000000..4afd250a549f
--- /dev/null
+++ b/pkgs/applications/office/zotero/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, fetchurl, bash, xulrunner }:
+
+assert (stdenv.system == "x86_64-linux" || stdenv.system == "i686-linux");
+
+let
+  version = "4.0.19";
+  arch = if stdenv.system == "x86_64-linux"
+           then "linux-x86_64"
+           else "linux-i686";
+in
+stdenv.mkDerivation {
+  name = "zotero-${version}";
+
+  src = fetchurl {
+    url = "https://download.zotero.org/standalone/${version}/Zotero-${version}_${arch}.tar.bz2";
+    sha256 = if stdenv.system == "x86_64-linux"
+               then "0xihvk7ms1vvzmxvpw8hs15pl1vvmf3zd72nwyaqhg469kwcz9s1"
+               else "1z4q8nzl90snb03ywk0cp64nv3cgasj9fvbcw2d4bgl2zlgwzpy9";
+  };
+
+  # Strip the bundled xulrunner
+  prePatch = ''rm -fr run-zotero.sh zotero xulrunner/'';
+
+  inherit bash xulrunner;
+  installPhase = ''
+    ensureDir "$out/libexec/zotero"
+    cp -vR * "$out/libexec/zotero/"
+
+    ensureDir "$out/bin"
+    substituteAll "${./zotero.sh}" "$out/bin/zotero"
+    chmod +x "$out/bin/zotero"
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = "https://www.zotero.org";
+    description = "Collect, organize, cite, and share your research sources";
+    license = licenses.agpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ttuegel ];
+  };
+}
diff --git a/pkgs/applications/office/zotero/zotero.sh b/pkgs/applications/office/zotero/zotero.sh
new file mode 100644
index 000000000000..c80d5e8189ea
--- /dev/null
+++ b/pkgs/applications/office/zotero/zotero.sh
@@ -0,0 +1,3 @@
+#!@bash@/bin/bash
+
+exec "@xulrunner@/bin/xulrunner" "@out@/libexec/zotero/application.ini" "${@}"
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index c2cf120490b0..12af77d2899e 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -9453,6 +9453,8 @@ let
 
   zgrviewer = callPackage ../applications/graphics/zgrviewer {};
 
+  zotero = callPackage ../applications/office/zotero { };
+
   zynaddsubfx = callPackage ../applications/audio/zynaddsubfx { };