diff --git a/core/modules/field/field.module b/core/modules/field/field.module
index 686e3f5..eece866 100644
--- a/core/modules/field/field.module
+++ b/core/modules/field/field.module
@@ -424,6 +424,14 @@ function field_entity_field_info($entity_type) {
 }
 
 /**
+ * Implements hook_field_widget_info_alter().
+ */
+function field_field_widget_info_alter(&$info) {
+  // Add the Hidden widget to all field types.
+  $info['field_hidden']['field_types'] = array_keys(field_info_field_types());
+}
+
+/**
  * Applies language fallback rules to the fields attached to the given entity.
  *
  * Core language fallback rules simply check if fields have a field translation
diff --git a/core/modules/field/lib/Drupal/field/Plugin/field/widget/HiddenWidget.php b/core/modules/field/lib/Drupal/field/Plugin/field/widget/HiddenWidget.php
new file mode 100644
index 0000000..7ab76e4
--- /dev/null
+++ b/core/modules/field/lib/Drupal/field/Plugin/field/widget/HiddenWidget.php
@@ -0,0 +1,34 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\field\Plugin\field\widget\HiddenWidget.
+ */
+
+namespace Drupal\field\Plugin\field\widget;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+use Drupal\field\Plugin\Type\Widget\WidgetBase;
+
+/**
+ * Plugin implementation of the 'field_hidden' widget.
+ *
+ * @Plugin(
+ *   id = "field_hidden",
+ *   module = "field",
+ *   label = @Translation("- Hidden -"),
+ *   multiple_values = TRUE,
+ *   weight = 50
+ * )
+ */
+class HiddenWidget extends WidgetBase {
+
+  /**
+   * Implements Drupal\field\Plugin\Type\Widget\WidgetInterface::formElement().
+   */
+  public function formElement(array $items, $delta, array $element, $langcode, array &$form, array &$form_state) {
+    // The purpose of this widget is to be hidden, so nothing to do here.
+    return array();
+  }
+}
