diff --git a/password_policy.module b/password_policy.module
index f985682..bd4017e 100644
--- a/password_policy.module
+++ b/password_policy.module
@@ -411,3 +411,50 @@ function password_policy_cron() {
 function password_policy_load($id) {
   return PasswordPolicy::load($id);
 }
+
+/**
+ * Implements hook_help().
+ */
+function password_policy_help($route_name, \Drupal\Core\Routing\RouteMatchInterface $route_match) {
+  switch ($route_name) {
+    case 'help.page.password_policy':
+      $output = '';
+      $output .= '<h3>' . t('About') . '</h3>';
+      $output .= '<p>' . t('This is a Drupal 8 module for the Password Policy module. This is comprised of constraints and policies.') . '</p>';
+      $output .= '<p>' . t('Constraints are different ways that you can restrict a password. A policy is an instance of a constraint that define specific parameters for the constraint.') . '</p>';
+      $output .= '<p>' . t("Policies are applied through Drupal's role-based permissions system.") . '</p>';
+      $output .= '<p>' . t('Password Policy comes bundled with a password expiration feature. Policies define a time-based expiration logic (based on days) and administrators have the ability to manually expire all passwords by role.') . '</p>';
+
+      $output .= '<h3>' . t('Installation') . '</h3>';
+      $output .= '<dl>';
+      $output .= '<dt>' . t('Enable the module via <a href=":drush_install_module">drush command</a> or the <a href=":extend_link">extend menu</a>.', [':extend_link' => '/admin/modules', ':drush_install_module' => 'https://www.drupal.org/docs/8/extending-drupal-8/installing-modules-from-the-command-line']) . '</dt>';
+      $output .= '</dl>';
+
+      $output .= '<h3>' . t('Plugins') . '</h3>';
+      $output .= '<p>' . t('All plugins are installed as separate modules. The only policies that are out of the box is the Password Reset feature.') . '</p>';
+      $output .= '<ul>';
+      $output .= '<li>' . t('Password Expiration (time-based or manually forced, built in feature of Password Policy)') . '</li>';
+      $output .= '<li>' . t('Password Length (submodule of Password Policy)') . '</li>';
+      $output .= '<li>' . t('<a href="@zxcvbn_link">Zxcvbn Plugin</a>', ['@zxcvbn_link' => 'https://github.com/nerdstein/password_policy_zxcvbn']) . '</li>';
+      $output .= '</ul>';
+
+      $output .= '<h3>' . t('Configure') . '</h3>';
+      $output .= '<ul>';
+      $output .= '<li>' . t('Enable all plugin modules') . '</li>';
+      $output .= '<li>' . t("Go to Password Policy's <a href='@config_page'>configuration page</a>", ['@config_page' => '/admin/config/security/password-policy']) . '</li>';
+      $output .= '<li>' . t('Add policies by clicking on the tab for each plugin') . '</li>';
+      $output .= '<li>' . t('Go to the  <a href="@permission_page">permissions page</a>', ['@permission_page' => '/admin/people/permissions']) . '</li>';
+      $output .= '<li>' . t('Select which roles the policies applies to') . '</li>';
+      $output .= '</ul>';
+
+      $output .= '<h3>' . t('Architecture') . '</h3>';
+      $output .= '<ul>';
+      $output .= '<li>' . t("Password Policy provides a plugin manager that defines an interface for constraints and the constraint's policies") . '</li>';
+      $output .= '<li>' . t('Policies are implemented as permissions and enforced on the user form') . '</li>';
+      $output .= '<li>' . t('Password expiration implements an event subscriber and forces a user to his/her user form upon expiration') . '</li>';
+      $output .= '<li>' . t('Password time-based expiration leverages cron for tagging accounts as expired') . '</li>';
+      $output .= '</ul>';
+
+      return $output;
+  }
+}
