diff --git a/docs/library/index.rst b/docs/library/index.rst
index 81cae65a7d35f5942ddbe64a8ba71996ba810af3..aba69d28b43dc1897fa71d29695e2f7650eaf05b 100644
--- a/docs/library/index.rst
+++ b/docs/library/index.rst
@@ -38,6 +38,7 @@ it will fallback to loading the built-in ``ujson`` module.
 .. toctree::
    :maxdepth: 1
 
+   uhashlib.rst
    uheapq.rst
    ujson.rst
    usocket.rst
diff --git a/docs/library/uhashlib.rst b/docs/library/uhashlib.rst
new file mode 100644
index 0000000000000000000000000000000000000000..708e3d7bc9cc2ba7fd56f30f76f1a3bd670d40bb
--- /dev/null
+++ b/docs/library/uhashlib.rst
@@ -0,0 +1,37 @@
+:mod:`uhashlib` -- hashing algorithm
+====================================
+
+.. module:: uhashlib
+   :synopsis: hashing algorithm
+
+This module implements binary data hashing algorithms. Currently, it
+implements SHA256 algorithm. Choosing SHA256 was a deliberate choice,
+as a modern, cryptographically secure algorithm. This means that a
+single algorithm can cover both usecases of "any hash algorithm" and
+security-related usage, and thus save space omitting legacy algorithms
+like MD5 or SHA1.
+
+Constructors
+------------
+
+.. class:: uhashlib.sha256([data])
+
+   Create a hasher object and optionally feed ``data`` into it.
+
+
+Methods
+-------
+
+.. method:: sha256.update(data)
+
+   Feed more binary data into hash.
+
+.. method:: sha256.digest()
+
+   Return hash for all data passed thru hash, as a bytes object. After this
+   method is called, more data cannot be fed into hash any longer.
+
+.. method:: sha256.hexdigest()
+
+   This method is NOT implemented. Use ``ubinascii.hexlify(sha256.digest())``
+   to achieve similar effect.