Extra fields for edit form as opposed to front end hook_entity_extra_field_info() allows adding arbitrary elements to the Manage display tab that also appear on the rendered node.

I want to add some section headings that appear on the node edit form and can be re-ordered on the Manage form display tab.

Is there a hook like hook_entity_extra_field_info() but that adds an element to the edit form as opposed to the front end?

I realise that I could achieve something like this with field group but would rather use a lighter approach with less overhead.
hook_entity_extra_field_info() is invoked when either an entity is rendered, or when an entity form is shown to users. See user_entity_extra_field_info() as example.
function user_entity_extra_field_info() {
  $fields['user']['user']['form']['account'] = [
    'label' =&gt; t('User name and password'),
    'description' =&gt; t('User module account form elements.'),
    'weight' =&gt; -10,
  ];
  $fields['user']['user']['form']['language'] = [
    'label' =&gt; t('Language settings'),
    'description' =&gt; t('User module form element.'),
    'weight' =&gt; 0,
  ];
  if (\Drupal::config('system.date')-&gt;get('timezone.user.configurable')) {
    $fields['user']['user']['form']['timezone'] = [
      'label' =&gt; t('Timezone'),
      'description' =&gt; t('System module form element.'),
      'weight' =&gt; 6,
    ];
  }
  $fields['user']['user']['display']['member_for'] = [
    'label' =&gt; t('Member for'),
    'description' =&gt; t(&quot;User module 'member for' view element.&quot;),
    'weight' =&gt; 5,
  ];
  return $fields;
}

Any field that is part of the $fields['user']['user']['display'] array is shown when the User entity is rendered and can be re-orderer from /admin/config/people/accounts/display. (Member for is the label used from the code I previously shown.)



Any field that is part of the $fields['user']['user']['form'] array is added to the entity form and can be re-ordered from /admin/config/people/accounts/form-display. (User name and password, Language settings, and Timezone are the labels used from the code I previously shown.)



In the case of nodes, it's not different. You just need to remember that instead of $fields['user']['user']['form'] you need to use $fields['node']['content type']['form'], and replace 'content type' with the effective content type for which you need to add fields to the entity form. In the case you need to add fields to the entity form of every content type, you should use code similar to the one used in node_entity_extra_field_info().
foreach (NodeType::loadMultiple() as $bundle) {
  // Add the description for the extra fields.
  // $extra['node'][$bundle-&gt;id()][...] = ...
}