diff --git a/form_api_example/form_api_example.module b/form_api_example/form_api_example.module
index 14f4210..42139c2 100644
--- a/form_api_example/form_api_example.module
+++ b/form_api_example/form_api_example.module
@@ -38,6 +38,8 @@
  * - Modal form creation
  *   - \Drupal\form_api_example\Controller\Page
  *   - \Drupal\form_api_example\Form\ModalForm
+ * - Displaying a form in a block
+ *   - \Drupal\form_api_example\Plugin\Block\SimpleFormBlock
  *
  * @} End of "defgroup field_example".
  */
diff --git a/form_api_example/src/Plugin/Block/SimpleFormBlock.php b/form_api_example/src/Plugin/Block/SimpleFormBlock.php
new file mode 100644
index 0000000..7f5b0ef
--- /dev/null
+++ b/form_api_example/src/Plugin/Block/SimpleFormBlock.php
@@ -0,0 +1,72 @@
+<?php
+
+namespace Drupal\form_api_example\Plugin\Block;
+
+use Drupal\Core\Block\BlockBase;
+use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
+use Drupal\Core\Form\FormBuilderInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+
+/**
+ * Provides a 'Example: Display a form' block.
+ *
+ * This example demonstrates the use of the form_builder service, an
+ * instance of \Drupal\Core\Form\FormBuilder, in order to retrieve and display
+ * a form.
+ *
+ * @Block(
+ *   id = "form_api_example_simple_form_block",
+ *   admin_label = @Translation("Example: Display a form")
+ * )
+ */
+class SimpleFormBlock extends BlockBase implements ContainerFactoryPluginInterface {
+
+  /**
+   * Form builder service.
+   *
+   * @var \Drupal\Core\Form\FormBuilderInterface
+   */
+  protected $form_builder;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, FormBuilderInterface $form_builder) {
+    parent::__construct($configuration, $plugin_id, $plugin_definition);
+    $this->form_builder = $form_builder;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
+    return new static(
+      $configuration,
+      $plugin_id,
+      $plugin_definition,
+      $container->get('form_builder')
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function build() {
+    $output = [
+      'description' => [
+        '#markup' => $this->t('Using form provided by Drupal\form_api_example\Form\SimpleForm'),
+      ],
+    ];
+
+    // Use the form builder service to retrieve a form by providing the full
+    // name of the class that implements the form you want to display. getForm()
+    // will return a render array representing the form that can be used anywhere
+    // render arrays are used.
+    //
+    // In this case the build() method of a block plugin is expected to return
+    // a render array so we add the form to the existing output and return it.
+    $output['form'] = $this->form_builder->getForm('Drupal\form_api_example\Form\SimpleForm');
+    return $output;
+  }
+
+}
diff --git a/form_api_example/templates/description.html.twig b/form_api_example/templates/description.html.twig
index 6740778..772cf34 100644
--- a/form_api_example/templates/description.html.twig
+++ b/form_api_example/templates/description.html.twig
@@ -28,4 +28,6 @@ Description text for the Fapi Example.
 <p><a href={{ ajax_demo }}>Ajax form</a></p>
 <p><a href={{ ajax_addmore }}>Add-more button</a></p>
 <p><a href={{ modal_form }}>Modal form</a></p>
+
+<p>This module also provides a block, "Example: Display a form" that demonstrates how to display a form in a block. This same technique can be used whenever you need to display a form that is not the primary content of a page.</p>
 {% endtrans %}
diff --git a/form_api_example/tests/src/Functional/SimpleFormBlockTest.php b/form_api_example/tests/src/Functional/SimpleFormBlockTest.php
new file mode 100644
index 0000000..d78c2dc
--- /dev/null
+++ b/form_api_example/tests/src/Functional/SimpleFormBlockTest.php
@@ -0,0 +1,52 @@
+<?php
+
+namespace Drupal\Tests\form_api_example\Functional;
+
+use Drupal\Core\Url;
+use Drupal\Tests\BrowserTestBase;
+
+/**
+ * Tests \Drupal\form_api_example\Plugin\Block\SimpleFormBlock.
+ *
+ * @group form_api_example
+ * @group examples
+ */
+class SimpleFormBlockTest extends BrowserTestBase {
+
+  public static $modules = ['block', 'form_api_example'];
+
+  /**
+   * Test of paths through the example wizard form.
+   */
+  public function testSimpleFormBlock() {
+    $assert = $this->assertSession();
+
+    // Create user.
+    $web_user = $this->drupalCreateUser(['administer blocks']);
+    // Login the admin user.
+    $this->drupalLogin($web_user);
+
+    $theme_name = \Drupal::config('system.theme')->get('default');
+
+    // Place the block.
+    $label = 'SimpleFormBlock-' . $this->randomString();
+    $settings = [
+      'label' => $label,
+      'id' => 'form_api_example_simple_form_block',
+      'theme' => $theme_name,
+    ];
+    $this->drupalPlaceBlock('form_api_example_simple_form_block', $settings);
+
+    // Verify the block is present.
+    $this->drupalGet('');
+    $assert->pageTextContains($label);
+    $assert->fieldExists('title');
+
+    // And that the form works.
+    $edit = [];
+    $edit['title'] = 'SimpleFormBlock title example';
+    $this->drupalPostForm(NULL, $edit, t('Submit'));
+    $assert->pageTextContains('You specified a title of SimpleFormBlock title example');
+  }
+
+}
