---
title: "Configurable dashboard widget implementation"
manual: "Dashboard"
version: "main"
permalink: "https://docs.typo3.org/permalink/typo3/cms-dashboard:configurable-widget-implementation@main"
source: "Developer/ConfigurableWidgets.rst"
rendered: "2026-10-03T08:19:42+00:00"
---

# Configurable dashboard widget implementation {#configurable-widget-implementation}

<!-- TODO: no Markdown rendering for "versionadded" -->

Configurable Dashboard Widgets
have been introduced with TYPO3 14.0.

Widget authors can implement configurable widgets by using to the
renderer interface `\TYPO3\CMS\Dashboard\Widgets\WidgetRendererInterface`
which allows to defining settings in their widget renderer.

Settings are automatically validated and processed using the Settings API.
All types that are available for site settings definition are available:
[Definition types](https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/ApiOverview/SiteHandling/SiteSettingDefinitions.html#definition-types).

> [!NOTE]
> **See also**
>
> `\TYPO3\CMS\Dashboard\Widgets\RssWidget` is a configurable widget
> implementation.

## Example: A configurable widget implementation {#configurable-widget-implementation-example}

**EXT:my_extension/Classes/Widgets/ConfigurableWidget.php**

```php
<?php

use TYPO3\CMS\Dashboard\Widgets\WidgetContext;
use TYPO3\CMS\Dashboard\Widgets\WidgetRendererInterface;
use TYPO3\CMS\Dashboard\Widgets\WidgetResult;
use TYPO3\CMS\Core\Settings\SettingDefinition;

class ConfigurableWidget implements WidgetRendererInterface
{
    public function getSettingsDefinitions(): array
    {
        return [
            new SettingDefinition(
                key: 'title',
                type: 'string',
                default: 'Default Title',
                label: 'LLL:EXT:my_extension/Resources/Private/Language/locallang_my_widget.xlf:settings.label',
                description: 'LLL:EXT:my_extension/Resources/Private/Language/locallang_my_widget.xlf:settings.description.label',
            ),
            new SettingDefinition(
                key: 'limit',
                type: 'int',
                default: 10,
                label: 'LLL:EXT:my_extension/Resources/Private/Language/locallang_my_widget.xlf:settings.limit',
                description: 'LLL:EXT:my_extension/Resources/Private/Language/locallang_my_widget.xlf:settings.description.limit',
            ),
        ];
    }

    public function renderWidget(WidgetContext $context): WidgetResult
    {
        $settings = $context->settings;
        $title = $settings->get('title');
        $limit = $settings->get('limit');

        // Use settings to customize widget output
        return new WidgetResult(
            content: '<!-- widget content -->',
            label: $title,
            refreshable: true
        );
    }
}

```
