maispace / base
Base foundation extension for Maispace TYPO3 projects. Provides shared TypoScript configuration, page layout definitions, and pulls in all TYPO3 backend/infrastructure extensions that the project requires. Mail dispatch is handled by `mai_mail` — no external mail queue package is declared here.
Package info
github.com/mai-space-de/typo3-extension-base
Type:typo3-cms-extension
pkg:composer/maispace/base
Requires
- php: ^8.2
- typo3/cms-backend: ^14.1
- typo3/cms-core: ^14.1
- typo3/cms-extbase: ^14.1
Requires (Dev)
- armin/editorconfig-cli: ^2.1
- friendsofphp/php-cs-fixer: ^3.0
- helmich/typo3-typoscript-lint: ^3.1
- phpstan/phpstan: ^2.0
- phpunit/phpunit: ^11.0
- saschaegerer/phpstan-typo3: ^3.0
- typo3/testing-framework: ^9.0
This package is auto-updated.
Last update: 2026-05-31 12:36:04 UTC
README
Base foundation extension for Maispace TYPO3 projects. Provides shared TypoScript configuration, page layout definitions, and pulls in all TYPO3 backend/infrastructure extensions that the project requires. Mail dispatch is handled by mai_mail — no external mail queue package is declared here.
Requires: TYPO3 13.4 LTS / 14.1 · PHP 8.2+
Installation
composer require maispace/mai-base
Development
Linting
composer lint:check # Run all linters composer lint:fix # Fix auto-fixable issues
Testing
composer test # Run all tests composer test:unit # Run unit tests only
Shared Icon Contract
mai_base provides three generic SVG icons that every other maispace extension uses as
its default backend icons. Extensions depend on mai_base being loaded first; the icons
and their pre-registered TYPO3 identifiers are then available globally.
Icon files
| File | Purpose |
|---|---|
EXT:mai_base/Resources/Public/Icons/generic_table.svg |
Default record/table icon — shown in list-module rows |
EXT:mai_base/Resources/Public/Icons/generic_content.svg |
Default content-element / plugin icon — shown in the page module |
EXT:mai_base/Resources/Public/Icons/generic_backend_module.svg |
Default backend module icon — shown in the module navigation |
Pre-registered identifiers
mai_base/Configuration/Icons.php registers the following identifiers globally the moment
the extension is loaded. Downstream extensions must not redeclare these identifiers.
| Identifier | Points to |
|---|---|
mai-table |
generic_table.svg |
mai-content |
generic_content.svg |
mai-backend-module |
generic_backend_module.svg |
mai-extension |
extension.svg |
Usage patterns
1 — TCA record icon (->setIconFile())
Use the raw SVG path directly in the TCA builder chain:
// Configuration/TCA/tx_myext_myrecord.php $builder ->setLabel('title') ->setIconFile('EXT:mai_base/Resources/Public/Icons/generic_table.svg');
Alternatively, register an extension-specific identifier in Configuration/Icons.php
pointing to the shared source, then reference that identifier from TCA:
// Configuration/Icons.php return [ 'tx_myext_myrecord' => [ 'provider' => \TYPO3\CMS\Core\Imaging\IconProvider\SvgIconProvider::class, 'source' => 'EXT:mai_base/Resources/Public/Icons/generic_table.svg', ], ];
2 — Content element / plugin icon
Pass the pre-registered 'mai-content' identifier when registering a CType:
// Configuration/TCA/Overrides/tt_content.php (new CType('maispace_myplugin', $lang('ctype.myplugin'), 'mai-content')) ->addDefaultHeaderPalette() ->register();
3 — Backend module icon
Set iconIdentifier to the pre-registered 'mai-backend-module' value:
// Configuration/Backend/Modules.php return [ 'mai_myext' => [ 'parent' => 'tools', 'iconIdentifier' => 'mai-backend-module', // … ], ];
Rules
- Use the shared icons during extension scaffolding — creating a unique icon per extension is optional and only required once a distinct visual identity is needed.
- Never re-register
mai-table,mai-content,mai-backend-module, ormai-extensionin a downstream extension — themai-*namespace is reserved formai_base. - Never declare
scssphp/scssphporsymfony/mailerin this extension — see the architecture constraints inAGENTS.md.
License
GPL-2.0-or-later — see LICENSE for details.