diff --git a/examples.module b/examples.module
index e866557..799542e 100644
--- a/examples.module
+++ b/examples.module
@@ -41,6 +41,7 @@ function examples_toolbar() {
     'dbtng_example' => 'dbtng_example',
     'email_example' => 'email_example.description',
     'field_example' => 'field_example.description',
+    'form_example' => 'form_example.description',
     'js_example' => 'js_example.info',
     'node_type_example' => 'config_node_type_example.description',
     'page_example' => 'page_example_description',
diff --git a/form_example/form_example.info.yml b/form_example/form_example.info.yml
new file mode 100644
index 0000000..fa3e8ce
--- /dev/null
+++ b/form_example/form_example.info.yml
@@ -0,0 +1,7 @@
+name: Form Example
+type: module
+description: Sample implementations that demonstrate the Drupal Forms API
+package: Example modules
+core: 8.x
+dependencies:
+  - examples
diff --git a/form_example/form_example.links.menu.yml b/form_example/form_example.links.menu.yml
new file mode 100644
index 0000000..680fb6c
--- /dev/null
+++ b/form_example/form_example.links.menu.yml
@@ -0,0 +1,9 @@
+# Define default links for this module.
+form_example.description:
+  title: Form Examples
+  description: Form examples using Drupal Form API.
+  route_name: form_example.description
+form_example.simple_form:
+  title: Simple Form Example
+  description: A simple form example with submit processing.
+  route_name: form_example.simple_form
diff --git a/form_example/form_example.module b/form_example/form_example.module
new file mode 100644
index 0000000..9e7f225
--- /dev/null
+++ b/form_example/form_example.module
@@ -0,0 +1,19 @@
+<?php
+
+/**
+ * @file
+ * Examples demonstrating the Drupal Form API.
+ */
+
+/**
+ * @defgroup field_example Example: Field Types API
+ * @ingroup examples
+ * @{
+ * Examples demonstrating the Drupal Form API.
+ *
+ * The Form Example module is a part of the Examples for Developers Project
+ * and provides various Drupal Form API Examples. You can download and
+ * experiment with this code at the
+ * @link http://drupal.org/project/examples Examples for Developers project page. @endlink
+ * @} End of "defgroup field_example".
+ */
diff --git a/form_example/form_example.routing.yml b/form_example/form_example.routing.yml
new file mode 100644
index 0000000..a318f1c
--- /dev/null
+++ b/form_example/form_example.routing.yml
@@ -0,0 +1,26 @@
+# This routing.yml file makes both the form example description page and the
+# included sample forms available at specific URL's on your site. A route
+# maps a URL path to a controller. For page controllers it defines the
+# function or method that will be called when the page is accessed.  For form
+# controllers the content is determined by the buildForm method defined by the
+# form controller implementation.
+
+# Access to these paths are not restricted. This is notated as _access: 'TRUE'.
+
+# Menu items corresponding to these URLs are defined separately in the
+# form_example.links.menu.yml file.
+form_example.description:
+  path: 'examples/form_example'
+  defaults:
+    _controller:  '\Drupal\form_example\Controller\Page::description'
+    _title: 'Form Examples'
+  requirements:
+    _access: 'TRUE'
+form_example.simple_form:
+  path: 'examples/form_example/simple_form'
+  defaults:
+    _form:  '\Drupal\form_example\Form\SimpleForm'
+    _title: 'Simple Form Example'
+# TODO: Determine an appropriate right to check for this example.
+  requirements:
+    _access: 'TRUE'
diff --git a/form_example/src/Controller/Page.php b/form_example/src/Controller/Page.php
new file mode 100644
index 0000000..14f724c
--- /dev/null
+++ b/form_example/src/Controller/Page.php
@@ -0,0 +1,32 @@
+<?php
+
+/**
+ * @file
+ * Contains Drupal\form_example\Controller\Page.
+ */
+
+namespace Drupal\form_example\Controller;
+use Drupal\Core\Controller\ControllerBase;
+use Drupal\Core\Url;
+
+/**
+ * Simple page controller for drupal.
+ */
+class Page extends ControllerBase {
+  /**
+   * Lists the examples provided by form_example.
+   */
+  public function description() {
+    $content['intro'] = array(
+      '#markup' => '<p>' . $this->t('Form examples to demonstrate comment UI solutions using the Drupal Form API.') . '</p>',
+    );
+    $content['links'] = array(
+      '#theme' => 'item_list',
+      '#items' => array(
+        $this->l($this->t('Simple Form'), new Url('form_example.simple_form')),
+      ),
+    );
+    return $content;
+  }
+
+}
diff --git a/form_example/src/Form/SimpleForm.php b/form_example/src/Form/SimpleForm.php
new file mode 100644
index 0000000..8353b54
--- /dev/null
+++ b/form_example/src/Form/SimpleForm.php
@@ -0,0 +1,115 @@
+<?php
+
+/**
+ * @file
+ * Contains Drupal\form_example\Form\SimpleForm.
+ */
+
+namespace Drupal\form_example\Form;
+
+
+use Drupal\Core\Form\FormBase;
+use Drupal\Core\Form\FormStateInterface;
+
+/**
+ * Implements the SimpleForm form controller.
+ *
+ * This class extends FormBase which is the simplest form base class used in
+ * Drupal.
+ *
+ * @see \Drupal\Core\Form\FormBase
+ * @see \Drupal\Core\Form\ConfigFormBase
+ */
+class SimpleForm extends FormBase {
+
+  /**
+   * Build the simple form.
+   *
+   * A build form method constructs an array that defines how markup and
+   * other form elements are included in an HTML form.
+   *
+   * @param array $form
+   *   Default form array structure.
+   * @param FormStateInterface $form_state
+   *   Object containing current form state.
+   *
+   * @return array
+   *   The render array defining the elements of the form.
+   */
+  public function buildForm(array $form, FormStateInterface $form_state) {
+
+    $form['title'] = array(
+      '#type' => 'textfield',
+      '#title' => $this->t('Title'),
+      '#required' => TRUE,
+    );
+
+    // Group submit handlers in an actions element with a key of "actions" so
+    // that it gets styled correctly, and so that other modules may add actions
+    // to the form.
+    $form['actions'] = array(
+      '#type' => 'actions',
+    );
+
+    // Add a submit button that handles the submission of the form.
+    $form['actions']['submit'] = array(
+      '#type' => 'submit',
+      '#value' => $this->t('Submit'),
+    );
+
+    return $form;
+  }
+
+  /**
+   * Getter method for Form ID.
+   *
+   * The form ID is used in implementations of hook_form_alter() to allow other
+   * modules to alter the render array built by this form controller.  it must
+   * be unique site wide. It normally starts with the providing module's name.
+   *
+   * @return string
+   *   The unique ID of the form defined by this class.
+   */
+  public function getFormId() {
+    return 'form_example_simple_form';
+  }
+
+  /**
+   * Implements form validation.
+   *
+   * The validateForm method is the default method called to validate input on
+   * a form.
+   *
+   * @param array $form
+   *   The render array of the currently built form.
+   * @param FormStateInterface $form_state
+   *   Object describing the current state of the form.
+   */
+  public function validateForm(array &$form, FormStateInterface $form_state) {
+    $title = $form_state->getValue('title');
+    if (strlen($title) < 5) {
+      // Set an error for the form element with a key of "title"
+      $form_state->setErrorByName('title', $this->t('The must be at least 5 characters long'));
+    }
+  }
+
+  /**
+   * Implements a form submit handler.
+   *
+   * The submitForm method is the default method called for any submit elements.
+   *
+   * @param array $form
+   *   The render array of the currently built form.
+   * @param FormStateInterface $form_state
+   *   Object describing the current state of the form.
+   */
+  public function submitForm(array &$form, FormStateInterface $form_state) {
+    /*
+     * This would normally be replaced by code that actually does something
+     * with the title.
+     */
+    $title = $form_state->getValue('title');
+    drupal_set_message(t('You specified a title of %title.', ['%title' => $title]));
+  }
+
+}
diff --git a/form_example/src/Tests/SimpleFormTest.php b/form_example/src/Tests/SimpleFormTest.php
new file mode 100644
index 0000000..51db61d
--- /dev/null
+++ b/form_example/src/Tests/SimpleFormTest.php
@@ -0,0 +1,61 @@
+<?php
+
+/**
+ * @file
+ * Test for the Simple Form Test.
+ */
+
+namespace Drupal\form_example\Tests;
+
+use Drupal\simpletest\WebTestBase;
+
+/**
+ * Ensure that the form_example forms work properly.
+ *
+ * @see Drupal\simpletest\WebTestBase
+ *
+ * SimpleTest uses group annotations to help you organize your tests.
+ *
+ * @group form_example
+ *
+ * @ingroup form_example
+ */
+class SimpleFormTest extends WebTestBase {
+
+  /**
+   * Our module dependencies.
+   *
+   * @var array List of test dependencies.
+   */
+  static public $modules = array('form_example');
+
+  /**
+   * The installation profile to use with this test.
+   *
+   * @var string Installation profile required for test.
+   */
+  protected $profile = 'minimal';
+
+  /**
+   * Test example forms provided by form_example.
+   *
+   * Enable SimpleTest Example and see if it can successfully return its main
+   * page and if there is a link to the simpletest_example in the Tools menu.
+   */
+  public function testSimpleFormExample() {
+    // Test for a link to the simpletest_example in the Tools menu.
+    $this->drupalGet('');
+    $this->assertResponse(200, 'The Home page is available.');
+    $this->assertLinkByHref('examples/form_example/simple_form');
+
+    // Verify that anonymous can access the simpletest_examples page.
+    $this->drupalGet('examples/form_example/simple_form');
+    $this->assertResponse(200, 'The Simple Form Example page is available.');
+
+    // Post a title.
+    $edit = ['title' => 'My Custom Title'];
+    $this->drupalPostForm('/examples/form_example/simple_form', $edit, t('Submit'));
+    $this->assertText('You specified a title of My Custom Title.');
+  }
+
+}
