---
title: "ModuleInterface"
manual: "TYPO3 Explained"
version: "main"
permalink: "https://docs.typo3.org/permalink/t3coreapi:backend-module-interface@main"
source: "ApiOverview/Backend/BackendModules/ModuleInterface.rst"
rendered: "2026-09-17T18:20:57+00:00"
---

# `ModuleInterface` {#moduleinterface}

The registered backend modules are stored as objects in a registry and can be
fetched using the `\TYPO3\CMS\Backend\Module\ModuleProvider`.
All module objects implement `\TYPO3\CMS\Backend\Module\ModuleInterface`.

The `ModuleInterface` basically provides getters for the options
defined in the module registration and provides methods for
relation handling (main modules and sub modules).

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

Method  getDependsOnSubmodules() was added to the
ModuleInterface. See also
Feature: #107663 - New method getDependsOnSubmodules() required.

**Table of contents**

-   [ModuleInterface API](https://docs.typo3.org/permalink/t3coreapi:moduleinterface-api@main)

## `ModuleInterface` API {#moduleinterface-api}

-   **interface ModuleInterface**

    -   *Fully qualified name:* `\TYPO3\CMS\Backend\Module\ModuleInterface`

    An interface representing a TYPO3 Backend module.

    -   **getIdentifier()**

        The internal name of the module, used for referencing in permissions etc

        *Returns:* `string`

    -   **getPath()**

        Return the main route path

        *Returns:* `string`

    -   **getIconIdentifier()**

        The icon identifier for the module

        *Returns:* `string`

    -   **getTitle()**

        The title of the module, used in the menu

        *Returns:* `string`

    -   **getDescription()**

        A longer description, common for the "About" section with a long explanation

        *Returns:* `string`

    -   **getShortDescription()**

        A shorter description, used when hovering over a module in the menu as title attribute

        *Returns:* `string`

    -   **isStandalone()**

        Useful for main modules that are also "clickable" such as the dashboard module

        *Returns:* `bool`

    -   **getComponent()**

        Returns the view component responsible for rendering the module (iFrame or name of the web component)

        *Returns:* `string`

    -   **getNavigationComponent()**

        The web component to be rendering the navigation area

        *Returns:* `string`

    -   **getPosition()**

        The position of the module, such as \[top\] or \[bottom\] or \[after => anotherModule\] or \[before => anotherModule\]

        *Returns:* `array`

    -   **getAppearance()**

        Returns a modules appearance options, e.g. used for module menu

        *Returns:* `array`

    -   **getAccess()**

        Can be user (editor permissions), admin, or systemMaintainer

        *Returns:* `string`

    -   **getWorkspaceAccess()**

        Can be "\*" (= empty) or "live" or "offline"

        *Returns:* `string`

    -   **getParentIdentifier()**

        The identifier of the parent module during registration

        *Returns:* `string`

    -   **getParentModule()**

        Get the reference to the next upper menu item

        *Returns:* `?TYPO3CMSBackendModuleModuleInterface`

    -   **hasParentModule()**

        Can be checked if the module is a "main module"

        *Returns:* `bool`

    -   **hasSubModule(string $identifier)**

        Checks whether this module has a submodule with the given identifier

        -   *param $identifier:* the identifier

        *Returns:* `bool`

    -   **hasSubModules()**

        Checks if this module has further submodules

        *Returns:* `bool`

    -   **getSubModule(string $identifier)**

        Return a submodule given by its full identifier

        -   *param $identifier:* the identifier

        *Returns:* `?TYPO3CMSBackendModuleModuleInterface`

    -   **getSubModules()**

        Return all direct descendants of this module

        *Returns:* `ModuleInterface[]`

    -   **getDefaultRouteOptions()**

        Returns module related route options - used for the router

        *Returns:* `array`

    -   **getDefaultModuleData()**

        Get allowed and available module data properties and their default values.

        *Returns:* `array`

    -   **getAliases()**

        Return a list of identifiers that are aliases to this module

        *Returns:* `array`

    -   **hasSubmoduleOverview()**

        Whether this module should display a card-based overview of its submodules
        instead of automatically routing to the first available submodule.

        *Returns:* `bool`
