diff --git a/src/Plugin/Field/FieldType/DynamicEntityReferenceItem.php b/src/Plugin/Field/FieldType/DynamicEntityReferenceItem.php
index 775d420..4762b68 100644
--- a/src/Plugin/Field/FieldType/DynamicEntityReferenceItem.php
+++ b/src/Plugin/Field/FieldType/DynamicEntityReferenceItem.php
@@ -57,6 +57,10 @@ class DynamicEntityReferenceItem extends EntityReferenceItem {
     $default_settings = [];
     $labels = \Drupal::service('entity_type.repository')->getEntityTypeLabels(TRUE);
     $options = $labels[(string) t('Content', [], ['context' => 'Entity type group'])];
+
+    // Add configuration entities.
+    $options += $labels[(string) t('Configuration', [], ['context' => 'Entity type group'])];
+
     // Field storage settings are not accessible here so we are assuming that
     // all the entity types are referenceable by default.
     // See https://www.drupal.org/node/2346273#comment-9385179 for more details.
@@ -517,6 +521,9 @@ class DynamicEntityReferenceItem extends EntityReferenceItem {
     $labels = \Drupal::service('entity_type.repository')->getEntityTypeLabels(TRUE);
     $options = array_keys($labels[(string) t('Content', [], ['context' => 'Entity type group'])]);
 
+    // Add configuration entities.
+    $options = array_merge($options, array_keys($labels[(string) t('Configuration', [], ['context' => 'Entity type group'])]));
+
     if (!empty($settings['exclude_entity_types'])) {
       return array_diff($options, $settings['entity_type_ids'] ?: []);
     }
diff --git a/tests/src/Kernel/DynamicEntityReferenceConfigEntityTest.php b/tests/src/Kernel/DynamicEntityReferenceConfigEntityTest.php
new file mode 100644
index 0000000..f3f51c3
--- /dev/null
+++ b/tests/src/Kernel/DynamicEntityReferenceConfigEntityTest.php
@@ -0,0 +1,345 @@
+<?php
+
+namespace Drupal\Tests\dynamic_entity_reference\Kernel;
+
+use Drupal\Core\Field\FieldStorageDefinitionInterface;
+use Drupal\field\Entity\FieldConfig;
+use Drupal\field\Entity\FieldStorageConfig;
+use Drupal\KernelTests\Core\Entity\EntityKernelTestBase;
+
+/**
+ * Tests for referencing configuration entities.
+ *
+ * @group dynamic_entity_reference
+ */
+class DynamicEntityReferenceConfigEntityTest extends EntityKernelTestBase {
+
+  /**
+   * The entity type used in this test.
+   *
+   * @var string
+   */
+  protected $entityType = 'entity_test';
+
+  /**
+   * The entity type that is being referenced.
+   *
+   * @var string[]
+   */
+  protected $referencedEntityTypes = [
+    'config_test',
+  ];
+
+  /**
+   * The bundle used in this test.
+   *
+   * @var string
+   */
+  protected $bundle = 'entity_test';
+
+  /**
+   * The name of the field used in this test.
+   *
+   * @var string
+   */
+  protected $fieldName = 'field_test';
+
+  /**
+   * Field storage.
+   *
+   * @var \Drupal\field\FieldStorageConfigInterface
+   */
+  protected $fieldStorage;
+
+  /**
+   * Field config.
+   *
+   * @var \Drupal\field\FieldConfigInterface
+   */
+  protected $fieldConfig;
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = ['config_test', 'dynamic_entity_reference'];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+
+    $this->installConfig(['config_test']);
+    $this->installEntitySchema('entity_test_rev');
+  }
+
+  /**
+   * Helper method to setup field and field storages.
+   */
+  protected function setUpField() {
+    // Create a field.
+    $this->fieldStorage = FieldStorageConfig::create([
+      'field_name' => $this->fieldName,
+      'type' => 'dynamic_entity_reference',
+      'entity_type' => $this->entityType,
+      'cardinality' => FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED,
+      'settings' => [
+        'exclude_entity_types' => FALSE,
+        'entity_type_ids' => $this->referencedEntityTypes,
+      ],
+    ]);
+    $this->fieldStorage->save();
+
+    $this->fieldConfig = FieldConfig::create([
+      'field_name' => $this->fieldName,
+      'entity_type' => $this->entityType,
+      'bundle' => $this->bundle,
+      'label' => 'Field test',
+      'settings' => [],
+    ]);
+    $this->fieldConfig->save();
+  }
+
+  /**
+   * Config entity only configurable DER field.
+   */
+  public function testConfigurableField() {
+    $this->setUpField();
+
+    $referenced_entity = $this->container->get('entity_type.manager')
+      ->getStorage('config_test')
+      ->create([
+        'id' => 'foo',
+        'label' => 'Foo',
+        'style' => 'bar',
+      ]);
+    $referenced_entity->save();
+    $entity = $this->container->get('entity_type.manager')
+      ->getStorage($this->entityType)
+      ->create(['type' => $this->bundle]);
+    $entity->{$this->fieldName}->target_type = $referenced_entity->getEntityTypeId();
+    $entity->{$this->fieldName}->target_id = $referenced_entity->id();
+    $violations = $entity->{$this->fieldName}->validate();
+    $this->assertEquals($violations->count(), 0, 'Validation passes.');
+  }
+
+  /**
+   * Content entity and config entity configurable DER field.
+   */
+  public function testMixedConfigurableField() {
+    $this->referencedEntityTypes[] = 'entity_test_rev';
+    $this->setUpField();
+
+    // Check config entity.
+    $referenced_entity = $this->container->get('entity_type.manager')
+      ->getStorage('config_test')
+      ->create([
+        'id' => 'foo',
+        'label' => 'Foo',
+        'style' => 'bar',
+      ]);
+    $referenced_entity->save();
+    $entity = $this->container->get('entity_type.manager')
+      ->getStorage($this->entityType)
+      ->create(['type' => $this->bundle]);
+    $entity->{$this->fieldName}->target_type = $referenced_entity->getEntityTypeId();
+    $entity->{$this->fieldName}->target_id = $referenced_entity->id();
+    $violations = $entity->{$this->fieldName}->validate();
+    $this->assertEmpty($violations->count(), 'Validation passes.');
+
+    // Check content entity.
+    $referenced_entity = $this->container->get('entity_type.manager')
+      ->getStorage('entity_test_rev')
+      ->create(['type' => $this->bundle]);
+    $entity = $this->container->get('entity_type.manager')
+      ->getStorage($this->entityType)
+      ->create(['type' => $this->bundle]);
+    $entity->{$this->fieldName}->target_type = $referenced_entity->getEntityTypeId();
+    $entity->{$this->fieldName}->target_id = $referenced_entity->id();
+    $violations = $entity->{$this->fieldName}->validate();
+    $this->assertEmpty($violations->count(), 'Validation passes.');
+  }
+
+  /**
+   * Config entity only base DER field.
+   */
+  public function testBaseField() {
+    // @see dynamic_entity_reference_entity_test_entity_base_field_info()
+    $this->fieldName = 'dynamic_references';
+    $state = $this->container->get('state');
+    $state->set('dynamic_entity_reference_entity_test_entities', [$this->entityType, 'config_test']);
+    $state->set('dynamic_entity_reference_entity_test_cardinality', 1);
+    $state->set('dynamic_entity_reference_entity_test_exclude', [$this->entityType]);
+    $this->enableModules(['dynamic_entity_reference_entity_test']);
+    $this->container->get('entity.definition_update_manager')->applyUpdates();
+
+    // Reference a config entity.
+    $referenced_entity = $this->container->get('entity_type.manager')
+      ->getStorage('config_test')
+      ->create([
+        'id' => 'foo',
+        'label' => 'Foo',
+        'style' => 'bar',
+      ]);
+    $referenced_entity->save();
+    $entity = $this->container->get('entity_type.manager')
+      ->getStorage($this->entityType)
+      ->create(['type' => $this->bundle]);
+    $entity->{$this->fieldName}->target_type = $referenced_entity->getEntityTypeId();
+    $entity->{$this->fieldName}->target_id = $referenced_entity->id();
+    $violations = $entity->{$this->fieldName}->validate();
+    $this->assertEmpty($violations->count(), 'Validation passes.');
+  }
+
+  /**
+   * Config entity only revisionable base DER field.
+   */
+  public function testRevisionableBaseField() {
+    // @see dynamic_entity_reference_entity_test_entity_base_field_info()
+    $this->fieldName = 'dynamic_references';
+    $state = $this->container->get('state');
+
+    // Make this base field revisionable.
+    $state->set('dynamic_entity_reference_entity_test_revisionable', TRUE);
+    $state->set('dynamic_entity_reference_entity_test_entities', [$this->entityType, 'config_test']);
+    $state->set('dynamic_entity_reference_entity_test_cardinality', 1);
+    $state->set('dynamic_entity_reference_entity_test_exclude', [$this->entityType]);
+    $this->enableModules(['dynamic_entity_reference_entity_test']);
+    $this->container->get('entity.definition_update_manager')->applyUpdates();
+
+    // Reference a config entity.
+    $referenced_entity = $this->container->get('entity_type.manager')
+      ->getStorage('config_test')
+      ->create([
+        'id' => 'foo',
+        'label' => 'Foo',
+        'style' => 'bar',
+      ]);
+    $referenced_entity->save();
+    $entity = $this->container->get('entity_type.manager')
+      ->getStorage($this->entityType)
+      ->create(['type' => $this->bundle]);
+    $entity->{$this->fieldName}->target_type = $referenced_entity->getEntityTypeId();
+    $entity->{$this->fieldName}->target_id = $referenced_entity->id();
+    $violations = $entity->{$this->fieldName}->validate();
+    $this->assertEmpty($violations->count(), 'Validation passes.');
+
+    // Save the entity and update.
+    $entity->save();
+    $referenced_entity = $this->container->get('entity_type.manager')
+      ->getStorage('config_test')
+      ->create([
+        'id' => 'bar',
+        'label' => 'Bar',
+        'style' => 'foo',
+      ]);
+    $referenced_entity->save();
+    $entity->{$this->fieldName}->target_type = $referenced_entity->getEntityTypeId();
+    $entity->{$this->fieldName}->target_id = $referenced_entity->id();
+    $violations = $entity->{$this->fieldName}->validate();
+    $this->assertEmpty($violations->count(), 'Validation passes.');
+    $entity->save();
+    $entity = $this->container->get('entity_type.manager')
+      ->getStorage($this->entityType)
+      ->load($entity->id());
+    $referenced = $entity->{$this->fieldName}->referencedEntities();
+    $this->assertEquals(1, count($referenced));
+    $this->assertEquals('bar', $referenced[0]->id());
+  }
+
+  /**
+   * Content entity and config entity base DER field.
+   */
+  public function testMixedBaseField() {
+    // @see dynamic_entity_reference_entity_test_entity_base_field_info()
+    $this->fieldName = 'dynamic_references';
+    $state = $this->container->get('state');
+    $state->set('dynamic_entity_reference_entity_test_entities', [$this->entityType, 'config_test', 'entity_test_mul']);
+    $state->set('dynamic_entity_reference_entity_test_cardinality', 1);
+    $state->set('dynamic_entity_reference_entity_test_exclude', [$this->entityType]);
+    $this->enableModules(['dynamic_entity_reference_entity_test']);
+    $this->container->get('entity.definition_update_manager')->applyUpdates();
+
+    // Reference a config entity.
+    $referenced_entity = $this->container->get('entity_type.manager')
+      ->getStorage('config_test')
+      ->create([
+        'id' => 'foo',
+        'label' => 'Foo',
+        'style' => 'bar',
+      ]);
+    $referenced_entity->save();
+    $entity = $this->container->get('entity_type.manager')
+      ->getStorage($this->entityType)
+      ->create(['type' => $this->bundle]);
+    $entity->{$this->fieldName}->target_type = $referenced_entity->getEntityTypeId();
+    $entity->{$this->fieldName}->target_id = $referenced_entity->id();
+    $violations = $entity->{$this->fieldName}->validate();
+    $this->assertEmpty($violations->count(), 'Validation passes.');
+
+    // Reference a content entity.
+    $referenced_entity = $this->container->get('entity_type.manager')
+      ->getStorage('entity_test_mul')
+      ->create(['type' => $this->bundle]);
+    $entity = $this->container->get('entity_type.manager')
+      ->getStorage($this->entityType)
+      ->create(['type' => $this->bundle]);
+    $entity->{$this->fieldName}->target_type = $referenced_entity->getEntityTypeId();
+    $entity->{$this->fieldName}->target_id = $referenced_entity->id();
+    $violations = $entity->{$this->fieldName}->validate();
+    $this->assertEmpty($violations->count(), 'Validation passes.');
+  }
+
+  /**
+   * Content entity and config entity revisionable base DER field.
+   */
+  public function testMixedRevisionableBaseField() {
+    // @see dynamic_entity_reference_entity_test_entity_base_field_info()
+    $this->fieldName = 'dynamic_references';
+    $state = $this->container->get('state');
+
+    // Make this base field revisionable.
+    $state->set('dynamic_entity_reference_entity_test_revisionable', TRUE);
+    $state->set('dynamic_entity_reference_entity_test_entities', [$this->entityType, 'config_test', 'entity_test_mul']);
+    $state->set('dynamic_entity_reference_entity_test_cardinality', 1);
+    $state->set('dynamic_entity_reference_entity_test_exclude', [$this->entityType]);
+    $this->enableModules(['dynamic_entity_reference_entity_test']);
+    $this->container->get('entity.definition_update_manager')->applyUpdates();
+
+    // Reference a config entity.
+    $referenced_entity = $this->container->get('entity_type.manager')
+      ->getStorage('config_test')
+      ->create([
+        'id' => 'foo',
+        'label' => 'Foo',
+        'style' => 'bar',
+      ]);
+    $referenced_entity->save();
+    $entity = $this->container->get('entity_type.manager')
+      ->getStorage($this->entityType)
+      ->create(['type' => $this->bundle]);
+    $entity->{$this->fieldName}->target_type = $referenced_entity->getEntityTypeId();
+    $entity->{$this->fieldName}->target_id = $referenced_entity->id();
+    $violations = $entity->{$this->fieldName}->validate();
+    $this->assertEmpty($violations->count(), 'Validation passes.');
+
+    // Save the entity and update to use a content entity.
+    $entity->save();
+    $referenced_entity = $this->container->get('entity_type.manager')
+      ->getStorage('entity_test_mul')
+      ->create(['type' => $this->bundle]);
+    $referenced_entity->save();
+    $entity->{$this->fieldName}->target_type = $referenced_entity->getEntityTypeId();
+    $entity->{$this->fieldName}->target_id = $referenced_entity->id();
+    $violations = $entity->{$this->fieldName}->validate();
+    $this->assertEmpty($violations->count(), 'Validation passes.');
+    $entity->save();
+    $entity = $this->container->get('entity_type.manager')
+      ->getStorage($this->entityType)
+      ->load($entity->id());
+    $referenced = $entity->{$this->fieldName}->referencedEntities();
+    $this->assertEquals(1, count($referenced));
+    $this->assertEquals($referenced_entity->id(), $referenced[0]->id());
+  }
+
+}
