diff --git a/gnu/packages/databases.scm b/gnu/packages/databases.scm
index c8d12f43b5..063292c68a 100644
--- a/gnu/packages/databases.scm
+++ b/gnu/packages/databases.scm
@@ -74,15 +74,17 @@
   #:use-module (gnu packages cyrus-sasl)
   #:use-module (gnu packages dbm)
   #:use-module (gnu packages emacs)
+  #:use-module (gnu packages erlang)
   #:use-module (gnu packages flex)
   #:use-module (gnu packages gcc)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnupg)
+  #:use-module (gnu packages gnuzilla)
   #:use-module (gnu packages guile)
-  #:use-module (gnu packages time)
   #:use-module (gnu packages golang)
   #:use-module (gnu packages jemalloc)
+  #:use-module (gnu packages icu4c)
   #:use-module (gnu packages language)
   #:use-module (gnu packages libevent)
   #:use-module (gnu packages linux)
@@ -110,6 +112,7 @@
   #:use-module (gnu packages tcl)
   #:use-module (gnu packages terminals)
   #:use-module (gnu packages textutils)
+  #:use-module (gnu packages time)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages valgrind)
   #:use-module (gnu packages web)
@@ -3403,3 +3406,89 @@ The drivers officially supported by @code{libdbi} are:
 PostreSQL, SQLite, ODBC and MySQL.")
     (home-page "http://soci.sourceforge.net/")
     (license license:boost1.0)))
+
+(define-public couchdb
+  (package
+    (name "couchdb")
+    (version "3.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+              "mirror://apache/couchdb/source/" version
+              "/apache-couchdb-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1nbz2vafzhp9jv8xna8cfnf99jwn22xs4ydzm426qx7yf0dbn2fi"))
+       (modules '((guix build utils)))
+       ;; TODO: Unbundle fonts, others from share/docs/html/_static, share/www, share/server
+       ;; Remove pre-built binary, will be rebuilt.
+       (snippet '(begin (delete-file "bin/rebar") #t))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:make-flags '("release"
+                      "CC=gcc")
+       #:configure-flags (list "--skip-deps"
+                               "--spidermonkey-version"
+                               ,(version-major (package-version mozjs-60)))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-paths
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "src/couch/rebar.config.script"
+               (("/usr/include/mozjs-60")
+                (string-append (assoc-ref inputs "mozjs") "/include/mozjs-60")))
+             (substitute* "Makefile"
+               ;; Disable python-black code formatting.
+               (("check: all python-black") "check: all")
+               ;; Disable venv creation and package installation.
+               (("python3 -m venv .venv") "true")
+               (("\\.venv/bin/python3 -m pip install -r requirements.txt") "true")
+               ;; Do not test elixir, depends on `mix` and several external dependencies.
+               (("@\\$\\(MAKE\\) elixir") "")
+               ;; Use system python.
+               (("\\.venv/bin/python3") (which "python3")))
+             #t))
+         (replace 'configure
+           (lambda* (#:key (configure-flags '()) #:allow-other-keys)
+             (apply invoke "./configure" configure-flags)))
+         (replace 'install
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             ;; CouchDB tries to bundle erts, use our own copy.
+             (let ((out          (assoc-ref outputs "out"))
+                   (erts-version "10.3.5.9"))
+               (delete-file-recursively
+                 (string-append "rel/couchdb/erts-" erts-version))
+               (substitute* '("rel/couchdb/bin/couchdb"
+                              "rel/couchdb/bin/remsh")
+                 (("ROOTDIR=\\$\\{ERTS_BIN_DIR%/\\*\\}")
+                  (string-append "ROOTDIR=" out))
+                 (("BINDIR=\"[^\"]+\"")
+                  (string-append
+                    "BINDIR=" (assoc-ref inputs "erlang")
+                    "/lib/erlang/erts-" erts-version "/bin")))
+               (copy-recursively "rel/couchdb" out))
+             #t)))))
+    (native-inputs
+     ;; for tests
+     `(("curl" ,curl)
+       ("python" ,python)
+       ("python-hypothesis" ,python-hypothesis)
+       ("python-nose" ,python-nose)
+       ("python-requests" ,python-requests)
+       ;; for documentation
+       ("python-sphinx" ,python-sphinx)))
+    (inputs
+     `(("erlang" ,erlang)
+       ("icu4c" ,icu4c)
+       ("mozjs" ,mozjs-60)
+       ("openssl" ,openssl)))
+    (home-page "https://couchdb.apache.org/")
+    (synopsis "Document-oriented NoSQL database, implemented in Erlang")
+    (description "CouchDB is a database that completely embraces the web.  Store
+your data with JSON documents.  Access your documents with your web browser, via
+HTTP.  Query, combine, and transform your documents with JavaScript.  CouchDB
+works well with modern web and mobile apps.  You can distribute your data,
+efficiently using CouchDB’s incremental replication.  CouchDB supports
+master-master setups with automatic conflict detection.")
+    (license license:asl2.0)))
