My plugin settings page is never loaded I have been staring at this all morning, comparing to other plugins online and cannot see why my plugin settings page never registers. I have verified the actual settings model is populated, but settingsHtml() is never called.

Anything obvious I have missed?

class Storefront extends Plugin
{
    public static $plugin;
    public $schemaVersion = '1.0.1';
    public $hasCpSettings = true;
    public function init()
    {
        parent::init();
        self::$plugin = $this;

       $this-&gt;setComponents([
        'tracking' =&gt; TrackingService::class,
       ]);

        Event::on(
            Plugins::class,
            Plugins::EVENT_AFTER_INSTALL_PLUGIN,
            function (PluginEvent $event) {
                if ($event-&gt;plugin === $this) {
                }
            }
        );

        Craft::info(
            Craft::t(
                'storefront',
                '{name} plugin loaded',
                ['name' =&gt; $this-&gt;name]
            ),
            __METHOD__
        );
    }
    public function hasCpSection()
    {
        return false;
    }
    public function hasSettings()
    {
        return true;
    }
    protected function createSettingsModel()
    {
        return new Settings();
    }

    protected function settingsHtml(): string
    {
        return Craft::$app-&gt;view-&gt;renderTemplate('storefront/settings',
            [
            'settings' =&gt; $this-&gt;getSettings()
            ]
        );
    }
}
I overlooked the settings in composer.json to enable a settings page.