diff --git a/src/packages/mod_mokowaas_menu/language/en-GB/mod_mokowaas_menu.ini b/src/packages/mod_mokowaas_menu/language/en-GB/mod_mokowaas_menu.ini
new file mode 100644
index 00000000..dff9f13a
--- /dev/null
+++ b/src/packages/mod_mokowaas_menu/language/en-GB/mod_mokowaas_menu.ini
@@ -0,0 +1 @@
+MOD_MOKOWAAS_MENU="MokoWaaS Admin Menu"
diff --git a/src/packages/mod_mokowaas_menu/language/en-GB/mod_mokowaas_menu.sys.ini b/src/packages/mod_mokowaas_menu/language/en-GB/mod_mokowaas_menu.sys.ini
new file mode 100644
index 00000000..898a3832
--- /dev/null
+++ b/src/packages/mod_mokowaas_menu/language/en-GB/mod_mokowaas_menu.sys.ini
@@ -0,0 +1,2 @@
+MOD_MOKOWAAS_MENU="MokoWaaS Admin Menu"
+MOD_MOKOWAAS_MENU_DESC="Dedicated MokoWaaS section in the admin sidebar menu."
diff --git a/src/packages/mod_mokowaas_menu/mod_mokowaas_menu.xml b/src/packages/mod_mokowaas_menu/mod_mokowaas_menu.xml
new file mode 100644
index 00000000..59f480be
--- /dev/null
+++ b/src/packages/mod_mokowaas_menu/mod_mokowaas_menu.xml
@@ -0,0 +1,24 @@
+
+
+ mod_mokowaas_menu
+ Moko Consulting
+ 2026-06-04
+ Copyright (C) 2026 Moko Consulting. All rights reserved.
+ GPL-3.0-or-later
+ hello@mokoconsulting.tech
+ https://mokoconsulting.tech
+ 02.32.00
+ MokoWaaS admin sidebar menu — renders a dedicated MokoWaaS section in the admin menu before Joomla's default menu.
+ Moko\Module\MokoWaaSMenu
+
+
+ services
+ src
+ tmpl
+
+
+
+ en-GB/mod_mokowaas_menu.ini
+ en-GB/mod_mokowaas_menu.sys.ini
+
+
diff --git a/src/packages/mod_mokowaas_menu/services/provider.php b/src/packages/mod_mokowaas_menu/services/provider.php
new file mode 100644
index 00000000..67feaece
--- /dev/null
+++ b/src/packages/mod_mokowaas_menu/services/provider.php
@@ -0,0 +1,18 @@
+registerServiceProvider(new ModuleDispatcherFactory('\\Moko\\Module\\MokoWaaSMenu'));
+ $container->registerServiceProvider(new HelperFactory('\\Moko\\Module\\MokoWaaSMenu\\Administrator\\Helper'));
+ $container->registerServiceProvider(new Module());
+ }
+};
diff --git a/src/packages/mod_mokowaas_menu/src/Dispatcher/Dispatcher.php b/src/packages/mod_mokowaas_menu/src/Dispatcher/Dispatcher.php
new file mode 100644
index 00000000..b5d4dcc2
--- /dev/null
+++ b/src/packages/mod_mokowaas_menu/src/Dispatcher/Dispatcher.php
@@ -0,0 +1,14 @@
+ 'icon-cogs', 'title' => 'Dashboard', 'link' => 'index.php?option=com_mokowaas'],
+ ['icon' => 'icon-headphones', 'title' => 'Helpdesk', 'link' => 'index.php?option=com_mokowaas&view=tickets'],
+ ['icon' => 'icon-puzzle-piece','title' => 'Extensions', 'link' => 'index.php?option=com_mokowaas&view=extensions'],
+ ['icon' => 'icon-file-code', 'title' => '.htaccess Maker', 'link' => 'index.php?option=com_mokowaas&view=htaccess'],
+ ['icon' => 'icon-lock', 'title' => 'Privacy Guard', 'link' => 'index.php?option=com_mokowaas&view=privacy'],
+ ['icon' => 'icon-shield-alt', 'title' => 'WAF Log', 'link' => 'index.php?option=com_mokowaas&view=waflog'],
+ ['icon' => 'icon-power-off', 'title' => 'Feature Plugins', 'link' => 'index.php?option=com_plugins&filter[folder]=system&filter[search]=mokowaas'],
+];
+
+$currentOption = \Joomla\CMS\Factory::getApplication()->getInput()->get('option', '');
+$currentView = \Joomla\CMS\Factory::getApplication()->getInput()->get('view', '');
+?>
+
+
diff --git a/src/pkg_mokowaas.xml b/src/pkg_mokowaas.xml
index a3ca35a8..2f0334fd 100644
--- a/src/pkg_mokowaas.xml
+++ b/src/pkg_mokowaas.xml
@@ -20,6 +20,7 @@
plg_system_mokowaas_offline.zip
com_mokowaas.zip
mod_mokowaas_cpanel.zip
+
plg_webservices_mokowaas.zip
plg_webservices_perfectpublisher.zip
plg_task_mokowaasdemo.zip
diff --git a/src/script.php b/src/script.php
index 882bcba5..9a2a541c 100644
--- a/src/script.php
+++ b/src/script.php
@@ -55,6 +55,9 @@ class Pkg_MokowaasInstallerScript
// Set up cpanel module on the admin dashboard
$this->setupCpanelModule();
+ // Set up admin sidebar menu module
+ $this->setupAdminMenuModule();
+
// Create Support portal menu item on frontend
$this->setupSupportMenuItem();
@@ -704,6 +707,69 @@ class Pkg_MokowaasInstallerScript
}
}
+ /**
+ * Set up the MokoWaaS admin sidebar menu module at position 0.
+ */
+ private function setupAdminMenuModule(): void
+ {
+ try
+ {
+ $db = Factory::getDbo();
+
+ // Enable the module extension
+ $db->setQuery(
+ $db->getQuery(true)
+ ->update($db->quoteName('#__extensions'))
+ ->set($db->quoteName('enabled') . ' = 1')
+ ->where($db->quoteName('type') . ' = ' . $db->quote('module'))
+ ->where($db->quoteName('element') . ' = ' . $db->quote('mod_mokowaas_menu'))
+ )->execute();
+
+ // Check if module instance exists
+ $db->setQuery(
+ $db->getQuery(true)
+ ->select('COUNT(*)')
+ ->from($db->quoteName('#__modules'))
+ ->where($db->quoteName('module') . ' = ' . $db->quote('mod_mokowaas_menu'))
+ );
+
+ if ((int) $db->loadResult() > 0)
+ {
+ return;
+ }
+
+ $module = (object) [
+ 'title' => 'MokoWaaS Menu',
+ 'note' => '',
+ 'content' => '',
+ 'ordering' => 0,
+ 'position' => 'menu',
+ 'checked_out' => null,
+ 'checked_out_time' => null,
+ 'publish_up' => null,
+ 'publish_down' => null,
+ 'published' => 1,
+ 'module' => 'mod_mokowaas_menu',
+ 'access' => 3,
+ 'showtitle' => 0,
+ 'params' => '{}',
+ 'client_id' => 1,
+ 'language' => '*',
+ ];
+
+ $db->insertObject('#__modules', $module, 'id');
+
+ if ((int) $module->id)
+ {
+ $db->insertObject('#__modules_menu', (object) ['moduleid' => (int) $module->id, 'menuid' => 0]);
+ }
+ }
+ catch (\Throwable $e)
+ {
+ Log::add('Admin menu module setup error: ' . $e->getMessage(), Log::WARNING, 'mokowaas');
+ }
+ }
+
/**
* Create a "Support" menu item on the frontend main menu.
*/