diff --git a/core/modules/field_ui/field_ui.links.task.yml b/core/modules/field_ui/field_ui.links.task.yml
index 7248d07..c094bf8 100644
--- a/core/modules/field_ui/field_ui.links.task.yml
+++ b/core/modules/field_ui/field_ui.links.task.yml
@@ -7,6 +7,21 @@ field_ui.fields:
   class: \Drupal\Core\Menu\LocalTaskDefault
   deriver: \Drupal\field_ui\Plugin\Derivative\FieldUiLocalTask
 
+field_ui.field_types:
+  title: 'Field types'
+  route_name: field_ui.field_types
+  base_route: entity.field_storage_config.collection
+
+field_ui.field_widgets:
+  title: 'Field widgets'
+  route_name: field_ui.field_widgets
+  base_route: entity.field_storage_config.collection
+
+field_ui.field_formatters:
+  title: 'Field formatters'
+  route_name: field_ui.field_formatters
+  base_route: entity.field_storage_config.collection
+
 entity.entity_view_mode.edit_form:
   title: 'Edit'
   route_name: entity.entity_view_mode.edit_form
diff --git a/core/modules/field_ui/field_ui.routing.yml b/core/modules/field_ui/field_ui.routing.yml
index 98db1e0..66ca686 100644
--- a/core/modules/field_ui/field_ui.routing.yml
+++ b/core/modules/field_ui/field_ui.routing.yml
@@ -6,6 +6,30 @@ entity.field_storage_config.collection:
   requirements:
     _permission: 'administer content types'
 
+field_ui.field_types:
+  path: '/admin/reports/fields/field-types'
+  defaults:
+    _controller: '\Drupal\field_ui\Controller\FieldPluginsListsController::fieldTypes'
+    _title: 'Field types'
+  requirements:
+    _permission: 'administer content types'
+
+field_ui.field_widgets:
+  path: '/admin/reports/fields/field-widgets'
+  defaults:
+    _controller: '\Drupal\field_ui\Controller\FieldPluginsListsController::fieldWidgets'
+    _title: 'Field widgets'
+  requirements:
+    _permission: 'administer content types'
+
+field_ui.field_formatters:
+  path: '/admin/reports/fields/field-formatters'
+  defaults:
+    _controller: '\Drupal\field_ui\Controller\FieldPluginsListsController::fieldFormatters'
+    _title: 'Field formatters'
+  requirements:
+    _permission: 'administer content types'
+
 field_ui.display_mode:
   path: '/admin/structure/display-modes'
   defaults:
diff --git a/core/modules/field_ui/src/Controller/FieldPluginsListsController.php b/core/modules/field_ui/src/Controller/FieldPluginsListsController.php
new file mode 100644
index 0000000..7a318d8
--- /dev/null
+++ b/core/modules/field_ui/src/Controller/FieldPluginsListsController.php
@@ -0,0 +1,214 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\field_ui\Controller\FieldTypePluginListController.
+ */
+
+namespace Drupal\field_ui\Controller;
+
+use Drupal\Component\Utility\SortArray;
+use Drupal\Core\Controller\ControllerBase;
+use Drupal\Core\Field\FieldTypePluginManagerInterface;
+use Drupal\Core\Field\FormatterPluginManager;
+use Drupal\Core\Field\WidgetPluginManager;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+
+/**
+ * Provides list of field type plugins.
+ */
+class FieldPluginsListsController extends ControllerBase {
+
+  /**
+   * The field type plugin manager.
+   *
+   * @var \Drupal\Core\Field\FieldTypePluginManagerInterface
+   */
+  protected $fieldTypePluginManager;
+
+  /**
+   * The field widget plugin manager.
+   *
+   * @var \Drupal\Core\Field\WidgetPluginManager
+   */
+  protected $fieldWidgetPluginManager;
+
+  /**
+   * The field formatter plugin manager.
+   *
+   * @var \Drupal\Core\Field\FormatterPluginManager
+   */
+  protected $fieldFormatterPluginManager;
+
+  /**
+   * Construct ChiefController object.
+   *
+   * @param \Drupal\dialer\DialerManagerInterface $dialer_manager
+   */
+  public function __construct(FieldTypePluginManagerInterface $field_type_plugin_manager, WidgetPluginManager $field_widget_plugin_manager, FormatterPluginManager $field_formatter_plugin_manager) {
+    $this->fieldTypePluginManager = $field_type_plugin_manager;
+    $this->fieldWidgetPluginManager = $field_widget_plugin_manager;
+    $this->fieldFormatterPluginManager = $field_formatter_plugin_manager;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container) {
+    return new static(
+      $container->get('plugin.manager.field.field_type'),
+      $container->get('plugin.manager.field.widget'),
+      $container->get('plugin.manager.field.formatter')
+    );
+  }
+
+  /**
+   * Provides a list of field type plugins.
+   *
+   * @return array
+   *   A list of field type plugins.
+   */
+  public function fieldTypes() {
+    $field_types = $this->fieldTypePluginManager->getDefinitions();
+    $field_widgets = $this->fieldWidgetPluginManager->getDefinitions();
+    $field_formatters = $this->fieldFormatterPluginManager->getDefinitions();
+
+    uasort($field_types, function ($a, $b) {
+      return SortArray::sortByKeyString($a, $b, 'provider');
+    });
+
+    uasort($field_widgets, function ($a, $b) {
+      return SortArray::sortByKeyString($a, $b, 'id');
+    });
+
+    uasort($field_formatters, function ($a, $b) {
+      return SortArray::sortByKeyString($a, $b, 'id');
+    });
+
+    $index = [
+      'widgets' => [],
+      'formatters' => [],
+    ];
+
+    foreach (['widgets' => $field_widgets, 'formatters' => $field_formatters] as $type => $plugins) {
+      foreach ($plugins as $plugin) {
+        foreach ($plugin['field_types'] as $field_type) {
+          $index[$type][$field_type][] = $plugin['id'];
+        }
+      }
+    }
+
+    $header = [
+      $this->t('ID'),
+      $this->t('Label'),
+      $this->t('UI'),
+      $this->t('Provider'),
+      $this->t('Default widget'),
+      $this->t('Widgets'),
+      $this->t('Default formatter'),
+      $this->t('Formatters'),
+    ];
+
+    $rows = [];
+    foreach ($field_types as $field_type) {
+      $rows[] = [
+        $field_type['id'],
+        $field_type['label'],
+        $field_type['no_ui'] ? $this->t('No') : $this->t('Yes'),
+        $field_type['provider'],
+        $field_type['default_widget'],
+        implode(', ', $index['widgets'][$field_type['id']]),
+        $field_type['default_formatter'],
+        implode(', ', $index['formatters'][$field_type['id']]),
+      ];
+    }
+
+    return [
+      '#type' => 'table',
+      '#header' => $header,
+      '#rows' => $rows,
+    ];
+  }
+
+  /**
+   * Shows widgets table.
+   *
+   * @return array
+   */
+  public function fieldWidgets() {
+    $plugins = $this->fieldWidgetPluginManager->getDefinitions();
+    return $this->getTable($plugins);
+  }
+
+  /**
+   * Shows formatters table.
+   *
+   * @return array
+   */
+  public function fieldFormatters() {
+    $plugins = $plugins = $this->fieldFormatterPluginManager->getDefinitions();
+    return $this->getTable($plugins);
+  }
+
+  /**
+   * Helper function that do all the dirty work to generate widget and
+   * formatters tables.
+   *
+   * @param array $plugins
+   *   The array of plugins definitions.
+   * @return array
+   *   The build array with table of plugins.
+   */
+  private function getTable($plugins) {
+    $field_types = $this->fieldTypePluginManager->getDefinitions();
+    switch ($plugin_type) {
+      case 'widget':
+
+        break;
+      case 'formatter':
+
+        break;
+    }
+
+    uasort($plugins, function ($a, $b) {
+      return SortArray::sortByKeyString($a, $b, 'provider');
+    });
+
+    uasort($field_types, function ($a, $b) {
+      return SortArray::sortByKeyString($a, $b, 'id');
+    });
+
+    $index = [];
+    foreach ($plugins as $plugin_id => $plugin) {
+      if (!isset($index[$plugin_id])) {
+        $index[$plugin_id] = [];
+      }
+      $index[$plugin_id] += $plugin['field_types'];
+      $index[$plugin_id] = array_unique($index[$plugin_id]);
+    }
+
+    $header = [
+      $this->t('ID'),
+      $this->t('Label'),
+      $this->t('Provider'),
+      $this->t('Field types'),
+    ];
+
+    $rows = [];
+    foreach ($plugins as $plugin) {
+      $rows[] = [
+        $plugin['id'],
+        $plugin['label'],
+        $plugin['provider'],
+        implode(', ', $index[$plugin['id']]),
+      ];
+    }
+
+    return [
+      '#type' => 'table',
+      '#header' => $header,
+      '#rows' => $rows,
+    ];
+  }
+
+}
