diff --git a/src/Plugin/Field/FieldFormatter/ViewsReferenceLabelFormatter.php b/src/Plugin/Field/FieldFormatter/ViewsReferenceLabelFormatter.php
new file mode 100644
index 0000000..0826033
--- /dev/null
+++ b/src/Plugin/Field/FieldFormatter/ViewsReferenceLabelFormatter.php
@@ -0,0 +1,151 @@
+<?php
+
+namespace Drupal\viewsreference\Plugin\Field\FieldFormatter;
+
+use Drupal\Core\Extension\ModuleHandlerInterface;
+use Drupal\Core\Field\FieldDefinitionInterface;
+use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
+use Drupal\Core\Url;
+use Drupal\views\Views;
+use Drupal\Core\Field\FieldItemListInterface;
+use Drupal\Core\Field\FormatterBase;
+use Drupal\Core\Form\FormStateInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+
+/**
+ * Field formatter for Viewsreference Field.
+ *
+ * @FieldFormatter(
+ *   id = "viewsreference_label_formatter",
+ *   label = @Translation("Label"),
+ *   description = @Translation("Display the label of the referenced view."),
+ *   field_types = {"viewsreference"}
+ * )
+ */
+class ViewsReferenceLabelFormatter extends FormatterBase implements ContainerFactoryPluginInterface {
+
+  /**
+   * Module handler.
+   *
+   * @var \Drupal\Core\Extension\ModuleHandlerInterface
+   */
+  protected $moduleHandler;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function __construct(string $plugin_id, $plugin_definition, FieldDefinitionInterface $field_definition, array $settings, $label, $view_mode, array $third_party_settings, ModuleHandlerInterface $module_handler) {
+    parent::__construct($plugin_id, $plugin_definition, $field_definition, $settings, $label, $view_mode, $third_party_settings);
+    $this->moduleHandler = $module_handler;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
+    return new static(
+      $plugin_id,
+      $plugin_definition,
+      $configuration['field_definition'],
+      $configuration['settings'],
+      $configuration['label'],
+      $configuration['view_mode'],
+      $configuration['third_party_settings'],
+      $container->get('module_handler')
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function defaultSettings() {
+    return [
+        'link' => TRUE,
+      ] + parent::defaultSettings();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function settingsForm(array $form, FormStateInterface $form_state) {
+    $elements['link'] = [
+      '#title' => t('Link label to the referenced view'),
+      '#type' => 'checkbox',
+      '#default_value' => $this->getSetting('link'),
+    ];
+
+    return $elements;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function settingsSummary() {
+    $summary = [];
+    $summary[] = $this->getSetting('link') ? t('Link to the referenced view') : t('No link');
+    return $summary;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function viewElements(FieldItemListInterface $items, $langcode) {
+    $elements = [];
+    $output_as_link = $this->getSetting('link');
+    if (!$this->moduleHandler->moduleExists('views_ui')) {
+      $output_as_link = FALSE;
+    }
+
+    foreach ($items as $delta => $item) {
+      $view_id = $item->getValue()['target_id'];
+      $display_id = $item->getValue()['display_id'];
+      $view = Views::getView($view_id);
+      // Add an extra check because the view could have been deleted.
+      if (!is_object($view)) {
+        $elements[$delta] = ['#plain_text' => $this->t('Missing view: %view_id', ['%view_id' => $view_id])];
+        continue;
+      }
+
+      if ($view->setDisplay($display_id)) {
+        $label = $this->t('@view_name - @display_title', [
+          '@view_name' => $view->getTitle(),
+          '@display_title' => $view->getDisplay()->display['display_title'],
+        ]);
+        $uri = Url::fromUri('internal:/admin/structure/views/view/' . $view_id . '/edit/' . $display_id);
+      }
+      // The view display could have been removed.
+      else {
+        $label = $this->t('@view_name - Missing display: %display_id', [
+          '@view_name' => $view->getTitle(),
+          '%display_id' => $display_id,
+        ]);
+        $uri = Url::fromUri('internal:/admin/structure/views/view/' . $view_id . '/edit/');
+      }
+
+      if ($output_as_link) {
+        $elements[$delta] = [
+          '#type' => 'link',
+          '#title' => $label,
+          '#url' => $uri,
+          '#options' => $uri->getOptions(),
+          '#attributes' => [
+            'target' => '_blank',
+          ],
+        ];
+
+        if (!empty($items[$delta]->_attributes)) {
+          $elements[$delta]['#options'] += ['attributes' => []];
+          $elements[$delta]['#options']['attributes'] += $items[$delta]->_attributes;
+          // Unset field item attributes since they have been included in the
+          // formatter output and shouldn't be rendered in the field template.
+          unset($items[$delta]->_attributes);
+        }
+      }
+      else {
+        $elements[$delta] = ['#plain_text' => $label];
+      }
+    }
+    return $elements;
+  }
+
+}
