Open-source software for Joomla, Gitea, and web platforms. Home of MokoSuite, MokoGitea, and MokoCLI.
Tennessee
architecture/joomla-package-structure.-
Joomla Package Structure
Standard layout for MokoSuite Joomla extension packages.
Package Overview
Each MokoSuite product ships as a Joomla package (pkg_) containing multiple sub-extensions that are installed together:
MokoSuiteBackup/
├── source/
│ ├── pkg_mokosuitebackup.xml # Package manifest
│ ├── script.php # Install/update/uninstall script
│ ├── language/
│ │ ├── en-GB/pkg_mokosuitebackup.sys.ini
│ │ └── en-US/pkg_mokosuitebackup.sys.ini
│ └── packages/
│ ├── com_mokosuitebackup/ # Admin component
│ ├── plg_system_mokosuitebackup/ # System plugin
│ ├── plg_task_mokosuitebackup/ # Task scheduler plugin
│ ├── plg_webservices_mokosuitebackup/ # REST API plugin
│ ├── plg_console_mokosuitebackup/ # CLI plugin
│ ├── plg_quickicon_mokosuitebackup/# Dashboard widget
│ ├── plg_content_mokosuitebackup/ # Content events plugin
│ └── plg_actionlog_mokosuitebackup/# Action logging plugin
├── .mokogitea/
│ ├── manifest.xml # MokoGitea repo manifest
│ └── CLAUDE.md # AI assistant instructions
├── Makefile
├── composer.json
├── phpunit.xml
├── CHANGELOG.md
├── README.md
└── LICENSE
Package Manifest
pkg_mokosuitebackup.xml:
<?xml version="1.0" encoding="UTF-8"?>
<extension type="package" method="upgrade">
<name>MokoSuiteBackup</name>
<packagename>mokosuitebackup</packagename>
<version>01.00.00</version>
<creationDate>2026-06-01</creationDate>
<author>Moko Consulting</author>
<authorUrl>https://mokoconsulting.tech</authorUrl>
<license>GPL-3.0-or-later</license>
<description>PKG_MOKOSUITEBACKUP_DESCRIPTION</description>
<scriptfile>script.php</scriptfile>
<files folder="packages">
<file type="component" id="com_mokosuitebackup">com_mokosuitebackup</file>
<file type="plugin" id="plg_system_mokosuitebackup" group="system">plg_system_mokosuitebackup</file>
<file type="plugin" id="plg_task_mokosuitebackup" group="task">plg_task_mokosuitebackup</file>
<!-- ... more sub-extensions ... -->
</files>
<languages folder="language">
<language tag="en-GB">en-GB/pkg_mokosuitebackup.sys.ini</language>
</languages>
<updateservers>
<server type="extension" name="MokoSuiteBackup Updates">
https://git.mokoconsulting.tech/MokoConsulting/MokoSuiteBackup/raw/branch/main/updates.xml
</server>
</updateservers>
</extension>
Component Structure
com_mokosuitebackup/:
com_mokosuitebackup/
├── mokosuitebackup.xml # Component manifest
├── config.xml # Component parameters
├── access.xml # ACL definitions
├── services/
│ └── provider.php # DI container registration
├── src/
│ ├── Extension/
│ │ └── MokoSuiteBackupComponent.php
│ ├── Controller/
│ │ ├── DisplayController.php
│ │ ├── BackupController.php
│ │ └── ProfilesController.php
│ ├── Model/
│ │ ├── BackupsModel.php
│ │ ├── ProfileModel.php
│ │ └── DashboardModel.php
│ ├── View/
│ │ ├── Backups/HtmlView.php
│ │ ├── Profile/HtmlView.php
│ │ └── Dashboard/HtmlView.php
│ └── Table/
│ ├── BackupTable.php
│ └── ProfileTable.php
├── tmpl/
│ ├── backups/default.php
│ ├── profile/edit.php
│ └── dashboard/default.php
├── sql/
│ ├── install.mysql.sql
│ ├── uninstall.mysql.sql
│ └── updates/mysql/
│ ├── 01.00.00.sql
│ └── 01.01.00.sql
└── language/
├── en-GB/
│ ├── com_mokosuitebackup.ini
│ └── com_mokosuitebackup.sys.ini
└── en-US/
Plugin Structure
Each plugin follows the same pattern:
plg_system_mokosuitebackup/
├── mokosuitebackup.xml # Plugin manifest
├── mokosuitebackup.php # Legacy entry point (empty, required)
├── services/
│ └── provider.php # DI registration
├── src/
│ └── Extension/
│ └── MokoSuiteBackup.php # Plugin class (SubscriberInterface)
└── language/
└── en-GB/
├── plg_system_mokosuitebackup.ini
└── plg_system_mokosuitebackup.sys.ini
Module Structure
mod_mokosuitehero/
├── mod_mokosuitehero.xml
├── src/
│ └── Dispatcher/
│ └── Dispatcher.php
├── tmpl/
│ └── default.php
└── language/
└── en-GB/
└── mod_mokosuitehero.sys.ini
Build Output
make build produces:
dist/
└── pkg_mokosuitebackup-01.00.00.zip
The ZIP follows Joomla naming conventions: pkg_{name}-{version}.zip where version uses dot-separated segments.
Pages