diff --git a/typo3/sysext/core/Documentation/Changelog/master/Deprecation-84045-AdminPanelHookDeprecated.rst b/typo3/sysext/core/Documentation/Changelog/master/Deprecation-84045-AdminPanelHookDeprecated.rst
new file mode 100644
index 000000000000..7eee7eafe205
--- /dev/null
+++ b/typo3/sysext/core/Documentation/Changelog/master/Deprecation-84045-AdminPanelHookDeprecated.rst
@@ -0,0 +1,32 @@
+.. include:: ../../Includes.txt
+
+================================================
+Deprecation: #84045 - AdminPanel Hook Deprecated
+================================================
+
+See :issue:`84045`
+
+Description
+===========
+
+The hook `$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tslib/class.tslib_adminpanel.php']['extendAdminPanel']` has been deprecated along with the corresponding interface `\TYPO3\CMS\Frontend\View\AdminPanelViewHookInterface`.
+
+
+Impact
+======
+
+Using either the interface or registering the hook will result in a deprecation error and will stop working in future TYPO3 versions.
+
+
+Affected Installations
+======================
+
+Installations using the `\TYPO3\CMS\Frontend\View\AdminPanelViewHookInterface`.
+
+
+Migration
+=========
+
+Use the new admin panel module API starting with TYPO3 v9 LTS.
+
+.. index:: Frontend, FullyScanned, ext:frontend
diff --git a/typo3/sysext/core/Documentation/Changelog/master/Feature-84045-NewAdminPanelModuleAPI.rst b/typo3/sysext/core/Documentation/Changelog/master/Feature-84045-NewAdminPanelModuleAPI.rst
new file mode 100644
index 000000000000..bac629a0d83b
--- /dev/null
+++ b/typo3/sysext/core/Documentation/Changelog/master/Feature-84045-NewAdminPanelModuleAPI.rst
@@ -0,0 +1,33 @@
+.. include:: ../../Includes.txt
+
+===========================================
+Feature: #84045 - new AdminPanel module API
+===========================================
+
+See :issue:`84045`
+
+Description
+===========
+
+Extending the Admin Panel was only partially possible in earlier TYPO3 versions by using a hook that provided the possibility to add pure content (no new modules) as plain HTML.
+
+A new API has been introduced, providing more flexible options to add custom modules to the admin panel or replace and deactivate existing ones.
+
+
+Impact
+======
+
+Custom admin panel modules can now be registered via `$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['frontend']['adminPanelModules']`.
+
+.. code-block:: php
+
+ $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['frontend']['adminPanelModules']['yourmodulename'] = [
+ 'module' => \Vendor\Package\AdminPanel\YourModule::class,
+ 'after' => ['preview']
+ ]
+
+To implement a custom module your module class has to implement the `\TYPO3\CMS\Frontend\AdminPanel\AdminPanelModuleInterface`.
+
+Be aware that the `\TYPO3\CMS\Frontend\AdminPanel\AdminPanelModuleInterface` is not final yet and may change until v9 LTS.
+
+.. index:: Frontend, PHP-API, ext:frontend
diff --git a/typo3/sysext/frontend/Classes/AdminPanel/AbstractModule.php b/typo3/sysext/frontend/Classes/AdminPanel/AbstractModule.php
new file mode 100644
index 000000000000..43d90719b9b7
--- /dev/null
+++ b/typo3/sysext/frontend/Classes/AdminPanel/AbstractModule.php
@@ -0,0 +1,80 @@
+getLanguageService()->getLL($key);
+ if ($convertWithHtmlspecialchars) {
+ $labelStr = htmlspecialchars($labelStr);
+ }
+ return $labelStr;
+ }
+
+ /**
+ * Returns LanguageService
+ *
+ * @return \TYPO3\CMS\Core\Localization\LanguageService
+ */
+ protected function getLanguageService(): LanguageService
+ {
+ return $GLOBALS['LANG'];
+ }
+
+ /**
+ * Returns the current BE user.
+ *
+ * @return \TYPO3\CMS\Backend\FrontendBackendUserAuthentication
+ */
+ protected function getBackendUser(): FrontendBackendUserAuthentication
+ {
+ return $GLOBALS['BE_USER'];
+ }
+}
diff --git a/typo3/sysext/frontend/Classes/AdminPanel/AdminPanelModuleInterface.php b/typo3/sysext/frontend/Classes/AdminPanel/AdminPanelModuleInterface.php
new file mode 100644
index 000000000000..9e57b6774409
--- /dev/null
+++ b/typo3/sysext/frontend/Classes/AdminPanel/AdminPanelModuleInterface.php
@@ -0,0 +1,50 @@
+getBackendUser()->uc['TSFE_adminConfig']['display_cache']) {
+ $output[] = '
';
+ $output[] = ' ';
+ $output[] = ' ';
+ // the hidden field must be placed after the _hr field to avoid the timestamp being overridden by the date string
+ $output[] = ' ';
+ $output[] = '
';
- $output[] = ' ';
- $output[] = ' ';
- // the hidden field must be placed after the _hr field to avoid the timestamp being overridden by the date string
- $output[] = ' ';
- $output[] = '
';
- }
- return implode('', $output);
- }
-
- /**
- * Creates the content for the "edit" section ("module") of the Admin Panel
- *
- * @return string HTML content for the section. Consists of a string with table-rows with four columns.
- * @see display()
- */
- protected function getEditModule()
- {
- $output = [];
- if ($this->getBackendUser()->uc['TSFE_adminConfig']['display_edit']) {
- $this->extNeedUpdate = true;
-
- // If another page module was specified, replace the default Page module with the new one
- $newPageModule = trim($this->getBackendUser()->getTSConfigVal('options.overridePageModule'));
- $pageModule = BackendUtility::isModuleSetInTBE_MODULES($newPageModule) ? $newPageModule : 'web_layout';
-
- if ($this->extFeEditLoaded) {
- $output[] = '