diff --git a/core/modules/text/lib/Drupal/text/Plugin/Field/FieldFormatter/TextPlainFormatter.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/StringFormatter.php
similarity index 68%
rename from core/modules/text/lib/Drupal/text/Plugin/Field/FieldFormatter/TextPlainFormatter.php
rename to core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/StringFormatter.php
index 6c15bf5..f0bb645 100644
--- a/core/modules/text/lib/Drupal/text/Plugin/Field/FieldFormatter/TextPlainFormatter.php
+++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/StringFormatter.php
@@ -2,31 +2,29 @@
 
 /**
  * @file
- * Contains \Drupal\text\Plugin\field\formatter\TextPlainFormatter.
+ * Contains \Drupal\Core\Field\Plugin\field\formatter\StringFormatter.
  */
 
-namespace Drupal\text\Plugin\Field\FieldFormatter;
+namespace Drupal\Core\Field\Plugin\Field\FieldFormatter;
 
 use Drupal\Core\Field\FormatterBase;
 use Drupal\Core\Field\FieldItemListInterface;
 
 /**
- * Plugin implementation of the 'text_plain' formatter.
+ * Plugin implementation of the 'string' formatter.
  *
  * @FieldFormatter(
- *   id = "text_plain",
+ *   id = "string",
  *   label = @Translation("Plain text"),
  *   field_types = {
- *     "text",
- *     "text_long",
- *     "text_with_summary"
+ *     "string"
  *   },
  *   edit = {
  *     "editor" = "plain_text"
  *   }
  * )
  */
-class TextPlainFormatter extends FormatterBase {
+class StringFormatter extends FormatterBase {
 
   /**
    * {@inheritdoc}
diff --git a/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/EmailItem.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/EmailItem.php
index 9e68719..0b4c7a6 100644
--- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/EmailItem.php
+++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/EmailItem.php
@@ -18,7 +18,8 @@
  *   id = "email",
  *   label = @Translation("E-mail"),
  *   description = @Translation("An entity field containing an e-mail value."),
- *   configurable = FALSE
+ *   configurable = FALSE,
+ *   default_formatter = "string"
  * )
  */
 class EmailItem extends FieldItemBase {
diff --git a/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/StringItem.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/StringItem.php
index c5f6c77..4ed2121 100644
--- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/StringItem.php
+++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/StringItem.php
@@ -21,7 +21,9 @@
  *   settings = {
  *     "max_length" = "255"
  *   },
- *   configurable = FALSE
+ *   configurable = FALSE,
+ *   default_widget = "string",
+ *   default_formatter = "string"
  * )
  */
 class StringItem extends FieldItemBase {
diff --git a/core/modules/text/lib/Drupal/text/Plugin/Field/FieldWidget/TextfieldWidget.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/StringWidget.php
similarity index 59%
copy from core/modules/text/lib/Drupal/text/Plugin/Field/FieldWidget/TextfieldWidget.php
copy to core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/StringWidget.php
index b35e633..524e89d 100644
--- a/core/modules/text/lib/Drupal/text/Plugin/Field/FieldWidget/TextfieldWidget.php
+++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/StringWidget.php
@@ -2,23 +2,22 @@
 
 /**
  * @file
- * Contains \Drupal\text\Plugin\Field\FieldWidget\TextfieldWidget.
+ * Contains \Drupal\Core\Field\Plugin\Field\FieldWidget\StringWidget.
  */
 
-namespace Drupal\text\Plugin\Field\FieldWidget;
+namespace Drupal\Core\Field\Plugin\Field\FieldWidget;
 
 use Drupal\Core\Field\FieldItemListInterface;
 use Drupal\Core\Field\WidgetBase;
-use Symfony\Component\Validator\ConstraintViolationInterface;
 
 /**
- * Plugin implementation of the 'text_textfield' widget.
+ * Plugin implementation of the 'string' widget.
  *
  * @FieldWidget(
- *   id = "text_textfield",
- *   label = @Translation("Text field"),
+ *   id = "string",
+ *   label = @Translation("String field"),
  *   field_types = {
- *     "text"
+ *     "string"
  *   },
  *   settings = {
  *     "size" = "60",
@@ -26,7 +25,7 @@
  *   }
  * )
  */
-class TextfieldWidget extends WidgetBase {
+class StringWidget extends WidgetBase {
 
   /**
    * {@inheritdoc}
@@ -67,7 +66,7 @@ public function settingsSummary() {
    * {@inheritdoc}
    */
   public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, array &$form_state) {
-    $main_widget = $element + array(
+    $element['value'] = $element + array(
       '#type' => 'textfield',
       '#default_value' => isset($items[$delta]->value) ? $items[$delta]->value : NULL,
       '#size' => $this->getSetting('size'),
@@ -76,28 +75,6 @@ public function formElement(FieldItemListInterface $items, $delta, array $elemen
       '#attributes' => array('class' => array('text-full')),
     );
 
-    if ($this->getFieldSetting('text_processing')) {
-      $element = $main_widget;
-      $element['#type'] = 'text_format';
-      $element['#format'] = isset($items[$delta]->format) ? $items[$delta]->format : NULL;
-      $element['#base_type'] = $main_widget['#type'];
-    }
-    else {
-      $element['value'] = $main_widget;
-    }
-
-    return $element;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function errorElement(array $element, ConstraintViolationInterface $violation, array $form, array &$form_state) {
-    if ($violation->arrayPropertyPath == array('format') && isset($element['format']['#access']) && !$element['format']['#access']) {
-      // Ignore validation errors for formats if formats may not be changed,
-      // i.e. when existing formats become invalid. See filter_process_format().
-      return FALSE;
-    }
     return $element;
   }
 
diff --git a/core/modules/email/email.module b/core/modules/email/email.module
index f74da6f..39aa055 100644
--- a/core/modules/email/email.module
+++ b/core/modules/email/email.module
@@ -35,12 +35,6 @@ function email_field_info_alter(&$info) {
   $info['email']['class'] = '\Drupal\email\ConfigurableEmailItem';
   $info['email']['list_class'] = '\Drupal\Core\Field\ConfigFieldItemList';
   $info['email']['default_widget'] = 'email_default';
-  if (\Drupal::moduleHandler()->moduleExists('text')) {
-    $info['email']['default_formatter'] = 'text_plain';
-  }
-  else {
-    $info['email']['default_formatter'] = 'email_mailto';
-  }
   $info['email']['provider'] = 'email';
 }
 
@@ -48,7 +42,5 @@ function email_field_info_alter(&$info) {
  * Implements hook_field_formatter_info_alter().
  */
 function email_field_formatter_info_alter(&$info) {
-  if (isset($info['text_plain'])) {
-    $info['text_plain']['field_types'][] = 'email';
-  }
+  $info['string']['field_types'][] = 'email';
 }
diff --git a/core/modules/entity/config/schema/entity.schema.yml b/core/modules/entity/config/schema/entity.schema.yml
index a2d0b43..6334cb4 100644
--- a/core/modules/entity/config/schema/entity.schema.yml
+++ b/core/modules/entity/config/schema/entity.schema.yml
@@ -139,3 +139,13 @@ entity_form_display.field.*:
     weight:
       type: integer
       label: 'Weight'
+
+entity_view_display.field.string:
+  type: entity_field_view_display_base
+  label: 'Plain text display format settings'
+  mapping:
+    settings:
+      type: sequence
+      label: 'Settings'
+      sequence:
+        - type: string
diff --git a/core/modules/field/lib/Drupal/field/Tests/Views/FieldUITest.php b/core/modules/field/lib/Drupal/field/Tests/Views/FieldUITest.php
index 07507fe..3f01234 100644
--- a/core/modules/field/lib/Drupal/field/Tests/Views/FieldUITest.php
+++ b/core/modules/field/lib/Drupal/field/Tests/Views/FieldUITest.php
@@ -73,7 +73,7 @@ public function testHandlerUI() {
     }, $result);
     // @todo Replace this sort by assertArray once it's in.
     sort($options, SORT_STRING);
-    $this->assertEqual($options, array('text_default', 'text_plain', 'text_trimmed'), 'The text formatters for a simple text field appear as expected.');
+    $this->assertEqual($options, array('string', 'text_default', 'text_trimmed'), 'The text formatters for a simple text field appear as expected.');
 
     $this->drupalPostForm(NULL, array('options[type]' => 'text_trimmed'), t('Apply'));
 
diff --git a/core/modules/field_ui/lib/Drupal/field_ui/DisplayOverviewBase.php b/core/modules/field_ui/lib/Drupal/field_ui/DisplayOverviewBase.php
index 2ed54e8..e81f1c6 100644
--- a/core/modules/field_ui/lib/Drupal/field_ui/DisplayOverviewBase.php
+++ b/core/modules/field_ui/lib/Drupal/field_ui/DisplayOverviewBase.php
@@ -53,7 +53,7 @@
   public function __construct(EntityManagerInterface $entity_manager, FieldTypePluginManagerInterface $field_type_manager, PluginManagerBase $plugin_manager) {
     parent::__construct($entity_manager);
 
-    $this->fieldTypes = $field_type_manager->getConfigurableDefinitions();
+    $this->fieldTypes = $field_type_manager->getDefinitions();
     $this->pluginManager = $plugin_manager;
   }
 
diff --git a/core/modules/node/lib/Drupal/node/Entity/Node.php b/core/modules/node/lib/Drupal/node/Entity/Node.php
index b8f2a0e..ca242f1 100644
--- a/core/modules/node/lib/Drupal/node/Entity/Node.php
+++ b/core/modules/node/lib/Drupal/node/Entity/Node.php
@@ -378,7 +378,7 @@ public static function baseFieldDefinitions($entity_type) {
       ->setLabel(t('Language code'))
       ->setDescription(t('The node language code.'));
 
-    $fields['title'] = FieldDefinition::create('text')
+    $fields['title'] = FieldDefinition::create('string')
       // @todo Account for $node_type->title_label when per-bundle overrides are
       //   possible - https://drupal.org/node/2114707.
       ->setLabel(t('Title'))
@@ -389,11 +389,10 @@ public static function baseFieldDefinitions($entity_type) {
       ->setSettings(array(
         'default_value' => '',
         'max_length' => 255,
-        'text_processing' => 0,
       ))
       ->setDisplayOptions('view', array(
         'label' => 'hidden',
-        'type' => 'text_default',
+        'type' => 'string',
         'weight' => -5,
       ))
       ->setDisplayOptions('form', array(
diff --git a/core/modules/node/lib/Drupal/node/Tests/NodeValidationTest.php b/core/modules/node/lib/Drupal/node/Tests/NodeValidationTest.php
index 7b0a0a0..22028f1 100644
--- a/core/modules/node/lib/Drupal/node/Tests/NodeValidationTest.php
+++ b/core/modules/node/lib/Drupal/node/Tests/NodeValidationTest.php
@@ -54,7 +54,7 @@ public function testValidation() {
     $violations = $node->validate();
     $this->assertEqual(count($violations), 1, 'Violation found when title is too long.');
     $this->assertEqual($violations[0]->getPropertyPath(), 'title.0.value');
-    $this->assertEqual($violations[0]->getMessage(), '<em class="placeholder">Title</em>: the text may not be longer than 255 characters.');
+    $this->assertEqual($violations[0]->getMessage(), 'This value is too long. It should have <em class="placeholder">255</em> characters or less.');
 
     $node->set('title', NULL);
     $violations = $node->validate();
diff --git a/core/modules/rdf/lib/Drupal/rdf/Tests/Field/TextFieldRdfaTest.php b/core/modules/rdf/lib/Drupal/rdf/Tests/Field/TextFieldRdfaTest.php
index b350b95..d10318c 100644
--- a/core/modules/rdf/lib/Drupal/rdf/Tests/Field/TextFieldRdfaTest.php
+++ b/core/modules/rdf/lib/Drupal/rdf/Tests/Field/TextFieldRdfaTest.php
@@ -73,7 +73,7 @@ public function testDefaultFormatter() {
    * Tests the plain formatter.
    */
   public function testPlainFormatter() {
-    $this->assertFormatterRdfa('text_plain', 'http://schema.org/text', $this->testValue);
+    $this->assertFormatterRdfa('string', 'http://schema.org/text', $this->testValue);
   }
 
   /**
diff --git a/core/modules/telephone/lib/Drupal/telephone/Plugin/Field/FieldType/TelephoneItem.php b/core/modules/telephone/lib/Drupal/telephone/Plugin/Field/FieldType/TelephoneItem.php
index 67d7bdf..b425e7c 100644
--- a/core/modules/telephone/lib/Drupal/telephone/Plugin/Field/FieldType/TelephoneItem.php
+++ b/core/modules/telephone/lib/Drupal/telephone/Plugin/Field/FieldType/TelephoneItem.php
@@ -19,7 +19,7 @@
  *   label = @Translation("Telephone number"),
  *   description = @Translation("This field stores a telephone number in the database."),
  *   default_widget = "telephone_default",
- *   default_formatter = "telephone_link"
+ *   default_formatter = "string"
  * )
  */
 class TelephoneItem extends ConfigFieldItemBase {
diff --git a/core/modules/telephone/telephone.module b/core/modules/telephone/telephone.module
index 23099a9..eee9213 100644
--- a/core/modules/telephone/telephone.module
+++ b/core/modules/telephone/telephone.module
@@ -26,20 +26,8 @@ function telephone_help($path, $arg) {
 }
 
 /**
- * Implements hook_field_info_alter().
- */
-function telephone_field_info_alter(&$info) {
-  if (\Drupal::moduleHandler()->moduleExists('text')) {
-    $info['telephone']['default_formatter'] = 'text_plain';
-  }
-}
-
-
-/**
  * Implements hook_field_formatter_info_alter().
  */
 function telephone_field_formatter_info_alter(&$info) {
-  if (isset($info['text_plain'])) {
-    $info['text_plain']['field_types'][] = 'telephone';
-  }
+  $info['string']['field_types'][] = 'telephone';
 }
diff --git a/core/modules/text/config/schema/text.schema.yml b/core/modules/text/config/schema/text.schema.yml
index d377366..dc54670 100644
--- a/core/modules/text/config/schema/text.schema.yml
+++ b/core/modules/text/config/schema/text.schema.yml
@@ -110,16 +110,6 @@ entity_view_display.field.text_default:
       sequence:
         - type: string
 
-entity_view_display.field.text_plain:
-  type: entity_field_view_display_base
-  label: 'Plain text display format settings'
-  mapping:
-    settings:
-      type: sequence
-      label: 'Settings'
-      sequence:
-        - type: string
-
 entity_view_display.field.text_summary_or_trimmed:
   type: entity_field_view_display_base
   label: 'Summary or trimmed text display format settings'
diff --git a/core/modules/text/lib/Drupal/text/Plugin/Field/FieldWidget/TextfieldWidget.php b/core/modules/text/lib/Drupal/text/Plugin/Field/FieldWidget/TextfieldWidget.php
index b35e633..516d4cd 100644
--- a/core/modules/text/lib/Drupal/text/Plugin/Field/FieldWidget/TextfieldWidget.php
+++ b/core/modules/text/lib/Drupal/text/Plugin/Field/FieldWidget/TextfieldWidget.php
@@ -8,7 +8,7 @@
 namespace Drupal\text\Plugin\Field\FieldWidget;
 
 use Drupal\Core\Field\FieldItemListInterface;
-use Drupal\Core\Field\WidgetBase;
+use Drupal\Core\Field\Plugin\Field\FieldWidget\StringWidget;
 use Symfony\Component\Validator\ConstraintViolationInterface;
 
 /**
@@ -18,7 +18,8 @@
  *   id = "text_textfield",
  *   label = @Translation("Text field"),
  *   field_types = {
- *     "text"
+ *     "text",
+ *     "string"
  *   },
  *   settings = {
  *     "size" = "60",
@@ -26,42 +27,7 @@
  *   }
  * )
  */
-class TextfieldWidget extends WidgetBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function settingsForm(array $form, array &$form_state) {
-    $element['size'] = array(
-      '#type' => 'number',
-      '#title' => t('Size of textfield'),
-      '#default_value' => $this->getSetting('size'),
-      '#required' => TRUE,
-      '#min' => 1,
-    );
-    $element['placeholder'] = array(
-      '#type' => 'textfield',
-      '#title' => t('Placeholder'),
-      '#default_value' => $this->getSetting('placeholder'),
-      '#description' => t('Text that will be shown inside the field until a value is entered. This hint is usually a sample value or a brief description of the expected format.'),
-    );
-    return $element;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function settingsSummary() {
-    $summary = array();
-
-    $summary[] = t('Textfield size: !size', array('!size' => $this->getSetting('size')));
-    $placeholder = $this->getSetting('placeholder');
-    if (!empty($placeholder)) {
-      $summary[] = t('Placeholder: @placeholder', array('@placeholder' => $placeholder));
-    }
-
-    return $summary;
-  }
+class TextfieldWidget extends StringWidget {
 
   /**
    * {@inheritdoc}
diff --git a/core/modules/text/lib/Drupal/text/TextProcessed.php b/core/modules/text/lib/Drupal/text/TextProcessed.php
index d07a196..af2d7ab 100644
--- a/core/modules/text/lib/Drupal/text/TextProcessed.php
+++ b/core/modules/text/lib/Drupal/text/TextProcessed.php
@@ -57,7 +57,7 @@ public function getValue($langcode = NULL) {
     }
     else {
       // Escape all HTML and retain newlines.
-      // @see \Drupal\text\Plugin\field\formatter\TextPlainFormatter
+      // @see \Drupal\Core\Field\Plugin\field\formatter\StringFormatter
       $this->processed = nl2br(check_plain($text));
     }
     return $this->processed;
diff --git a/core/modules/text/text.module b/core/modules/text/text.module
index b0eb8fa..0d92089 100644
--- a/core/modules/text/text.module
+++ b/core/modules/text/text.module
@@ -190,3 +190,12 @@ function text_filter_format_update($format) {
 function text_filter_format_disable($format) {
   field_cache_clear();
 }
+
+/**
+ * Implements hook_field_formatter_info_alter().
+ */
+function text_field_formatter_info_alter(&$info) {
+  $info['string']['field_types'][] = 'text';
+  $info['string']['field_types'][] = 'text_with_summary';
+  $info['string']['field_types'][] = 'text_long';
+}
