diff --git a/docs/manual/extending/extensions/hooks/index.rst b/docs/manual/extending/extensions/hooks/index.rst
index c9f845995e51156645752ae37d521c3a0a713b59..464cf10fd22765d7d01b21a16cb47872e12c094f 100644
--- a/docs/manual/extending/extensions/hooks/index.rst
+++ b/docs/manual/extending/extensions/hooks/index.rst
@@ -29,6 +29,7 @@ The following hooks are available for use by extensions.
    review-request-fieldsets-hook
    review-request-fields-hook
    review-ui-hook
+   signal-hook
    template-hook
    url-hook
    user-page-sidebar-items-hook
diff --git a/docs/manual/extending/extensions/hooks/signal-hook.rst b/docs/manual/extending/extensions/hooks/signal-hook.rst
new file mode 100644
index 0000000000000000000000000000000000000000..42263a8530bf13384a65683f01e8e68b5d2e73fc
--- /dev/null
+++ b/docs/manual/extending/extensions/hooks/signal-hook.rst
@@ -0,0 +1,38 @@
+.. _signal-hook:
+
+==========
+SignalHook
+==========
+
+:py:class:`reviewboard.extensions.hooks.SignalHook` allows extensions to
+easily connect to signals_ without worrying about manually disconnecting
+when the extension is disabled.
+
+To connect to a signal, the extension needs to instantiate
+:py:class:`SignalHook` and pass in the signal to connect to, the callback
+function, and an optional sender_.
+
+.. _signals: https://docs.djangoproject.com/en/dev/topics/signals/
+.. _sender:
+   https://docs.djangoproject.com/en/dev/topics/signals/#connecting-to-signals-sent-by-specific-senders
+
+
+Example
+=======
+
+.. code-block:: python
+
+    import logging
+
+    from reviewboard.extensions.base import Extension
+    from reviewboard.extensions.hooks import SignalHook
+    from reviewboard.reviews.signals import review_request_published
+
+
+    class SampleExtension(Extension):
+        def initialize(self):
+            SignalHook(self, review_request_published, self.on_published)
+
+        def on_published(self, review_request=None, **kwargs):
+            logging.info('Review request %s was published!',
+                         review_request.display_id)
