Moko Consulting

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.