diff --git a/src/Plugin/UiPatterns/SettingType/MachineNameSettingType.php b/src/Plugin/UiPatterns/SettingType/MachineNameSettingType.php
new file mode 100644
index 0000000000000000000000000000000000000000..916f0be7c5bd7d699d6a4c2de62235962c2e4614
--- /dev/null
+++ b/src/Plugin/UiPatterns/SettingType/MachineNameSettingType.php
@@ -0,0 +1,34 @@
+<?php
+
+namespace Drupal\ui_patterns_settings\Plugin\UiPatterns\SettingType;
+
+use Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting;
+use Drupal\ui_patterns_settings\Plugin\PatternSettingTypeBase;
+
+/**
+ * MachineName setting type.
+ *
+ * @UiPatternsSettingType(
+ *   id = "machine_name",
+ *   label = @Translation("Machine name")
+ * )
+ */
+class MachineNameSettingType extends PatternSettingTypeBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function settingsForm(array $form, $value, PatternDefinitionSetting $def, $form_type) {
+    $form[$def->getName()] = [
+      '#type' => 'textfield',
+      '#title' => $def->getLabel(),
+      '#description' => $def->getDescription(),
+      '#default_value' => $this->getValue($value),
+      '#pattern' => "[A-Za-z]+[\w\-]*",
+    ];
+
+    $this->handleInput($form[$def->getName()], $def, $form_type);
+    return $form;
+  }
+
+}
diff --git a/tests/modules/ui_patterns_settings_render_test/templates/pattern-foo-settings.html.twig b/tests/modules/ui_patterns_settings_render_test/templates/pattern-foo-settings.html.twig
index cdb8747be51e7602611eed86ce151a9d49d954c0..ad13d83be9176dbcc3221eac0855ad028ae8cb50 100644
--- a/tests/modules/ui_patterns_settings_render_test/templates/pattern-foo-settings.html.twig
+++ b/tests/modules/ui_patterns_settings_render_test/templates/pattern-foo-settings.html.twig
@@ -15,4 +15,5 @@
   <div class="media_style">Media Style: {{ media_style }}</div>
   <div class="select_config">select_config: {{ pattern_configuration('foo_settings', '', 'select_config')[select_config] }}</div>
   <div class="value">Value: {{ setting_value }}</div>
+  <div class="machine_name">Machine name: {{ machine_name }}</div>
 </div>
diff --git a/tests/modules/ui_patterns_settings_render_test/templates/settings.ui_patterns.yml b/tests/modules/ui_patterns_settings_render_test/templates/settings.ui_patterns.yml
index d121d6fabcc069063c695efa59c610ecd5876d17..a7a1d709e4fcd2429ca715e8122cab0e7ffbc7ce 100644
--- a/tests/modules/ui_patterns_settings_render_test/templates/settings.ui_patterns.yml
+++ b/tests/modules/ui_patterns_settings_render_test/templates/settings.ui_patterns.yml
@@ -151,6 +151,9 @@ foo_settings:
       group: tab_2
       options:
         option1: Option 1
+    machine_name:
+      type: machine_name
+      label: Machine name
 
   configuration:
     config: config_value
diff --git a/tests/src/Functional/UiPatternsSettingsRenderTest.php b/tests/src/Functional/UiPatternsSettingsRenderTest.php
index aa7aaf8abdb9e4ed2e5d75761c367beccc4ea79c..02ba9334ce04eda25ceaa53f626fad05ad56c732 100644
--- a/tests/src/Functional/UiPatternsSettingsRenderTest.php
+++ b/tests/src/Functional/UiPatternsSettingsRenderTest.php
@@ -16,7 +16,7 @@ class UiPatternsSettingsRenderTest extends BrowserTestBase {
   /**
    * {@inheritdoc}
    */
-  protected $defaultTheme = 'stable';
+  protected $defaultTheme = 'stable9';
 
   /**
    * Disable schema validation when running tests.
@@ -85,6 +85,7 @@ class UiPatternsSettingsRenderTest extends BrowserTestBase {
         'input' => 'group_sub',
         'result' => 'Group sub: group_sub',
       ],
+      '[machine_name]' => ['input' => 'key', 'result' => 'Machine name: key'],
     ];
 
     // Select the layout.