diff --git a/core/includes/theme.inc b/core/includes/theme.inc
index 3f6d623..1d10e8b 100644
--- a/core/includes/theme.inc
+++ b/core/includes/theme.inc
@@ -2349,6 +2349,10 @@ function drupal_common_theme() {
       'render element' => 'element',
       'template' => 'input',
     ),
+    'input__range' => array(
+      'render element' => 'element',
+      'template' => 'input--range',
+    ),
     'select' => array(
       'render element' => 'element',
       'template' => 'select',
diff --git a/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/NumberRangeWidget.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/NumberRangeWidget.php
new file mode 100644
index 0000000..2e5d161
--- /dev/null
+++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/NumberRangeWidget.php
@@ -0,0 +1,62 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Core\Field\Plugin\Field\FieldWidget\NumberRangeWidget.
+ */
+
+namespace Drupal\Core\Field\Plugin\Field\FieldWidget;
+
+use Drupal\Core\Field\FieldItemListInterface;
+use Drupal\Core\Form\FormStateInterface;
+
+/**
+ * Plugin implementation of the 'range number' widget.
+ *
+ * @FieldWidget(
+ *   id = "number_range",
+ *   label = @Translation("Range field"),
+ *   field_types = {
+ *     "integer",
+ *     "decimal",
+ *     "float"
+ *   }
+ * )
+ */
+class NumberRangeWidget extends NumberWidget {
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function defaultSettings() {
+    return array(
+      'output' => true,
+    ) + parent::defaultSettings();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function settingsForm(array $form, FormStateInterface $form_state) {
+    $element = parent::settingsForm($form, $form_state);
+    $element['output'] = array(
+      '#type' => 'checkbox',
+      '#title' => t('Display current value'),
+      '#default_value' => $this->getSetting('output'),
+      '#description' => t('Show the current value next to the slider.'),
+    );
+    return $element;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state) {
+    $element_array = parent::formElement($items, $delta, $element, $form, $form_state);
+
+    $element_array['value']['#type'] = 'range';
+
+    return $element_array;
+  }
+
+}
diff --git a/core/modules/system/templates/input--range.html.twig b/core/modules/system/templates/input--range.html.twig
new file mode 100644
index 0000000..15c1a42
--- /dev/null
+++ b/core/modules/system/templates/input--range.html.twig
@@ -0,0 +1,15 @@
+{#
+/**
+ * @file
+ * Default theme implementation for an 'input' #type form element.
+ *
+ * Available variables:
+ * - attributes: A list of HTML attributes for the input element.
+ * - children: Optional additional rendered elements.
+ *
+ * @see template_preprocess_input()
+ *
+ * @ingroup themeable
+ */
+#}
+<input{{ attributes }} /><output id="{{ attributes.id }}">{{ attributes.value }}</output>{{ children }}
