Field and storage settings on base fields I am rewriting my config fields (Field API fields) into base fields and I am unsure about one thing: settings.

Field API has storage and instance settings. Looking at base fields, there is the setSettings() method which I presume is equivalent of field instance settings. Then, there is getFieldStorageDefinition()-&gt;setSettings() which I presume is equivalent of storage settings.

When I look at the entity reference item and the user ID field on the node entity, the user ID field calls setSetting('target_type', 'user'), which is storage setting and not instance setting. Do I get these two wrong? What is going on?

\Drupal\node\Entity\Node::baseFieldDefinitions() contains the following code.

$fields['uid'] = BaseFieldDefinition::create('entity_reference')
      -&gt;setLabel(t('Authored by'))
      -&gt;setDescription(t('The username of the content author.'))
      -&gt;setRevisionable(TRUE)
      -&gt;setSetting('target_type', 'user') &lt;---- this


\Drupal\Core\Field\Plugin\Field\FieldType\EntityReferenceItem contains the following code.

  public static function defaultStorageSettings() { &lt;---- STORAGE, not field
    return [
      'target_type' =&gt; \Drupal::moduleHandler()-&gt;moduleExists('node') ? 'node' : 'user',
    ] + parent::defaultStorageSettings();
  }
The base field definition implements the FieldDefinitionInterface and the FieldStorageDefinitionInterface, so it can act like a form API field, though it's not managed by the field module.

So the base field definition contains the settings of both, which you can see how the default values are set in BaseFieldDefinition::create():

  public static function create($type) {
    ...
    $default_settings = $field_type_manager-&gt;getDefaultStorageSettings($type) + $field_type_manager-&gt;getDefaultFieldSettings($type);
    $field_definition-&gt;itemDefinition-&gt;setSettings($default_settings);
    return $field_definition;
  }