diff --git a/source/packages/plg_system_mokosuiteevent/language/en-GB/plg_system_mokosuiteevent.ini b/source/packages/plg_system_mokosuiteevent/language/en-GB/plg_system_mokosuiteevent.ini
new file mode 100644
index 0000000..f7f51b1
--- /dev/null
+++ b/source/packages/plg_system_mokosuiteevent/language/en-GB/plg_system_mokosuiteevent.ini
@@ -0,0 +1,2 @@
+PLG_SYSTEM_MOKOSUITEEVENT="System - MokoSuite Event"
+PLG_SYSTEM_MOKOSUITEEVENT_DESC="Event management — ticketing, registration, check-in, venues, speakers, sponsors."
diff --git a/source/packages/plg_system_mokosuiteevent/language/en-GB/plg_system_mokosuiteevent.sys.ini b/source/packages/plg_system_mokosuiteevent/language/en-GB/plg_system_mokosuiteevent.sys.ini
new file mode 100644
index 0000000..f7f51b1
--- /dev/null
+++ b/source/packages/plg_system_mokosuiteevent/language/en-GB/plg_system_mokosuiteevent.sys.ini
@@ -0,0 +1,2 @@
+PLG_SYSTEM_MOKOSUITEEVENT="System - MokoSuite Event"
+PLG_SYSTEM_MOKOSUITEEVENT_DESC="Event management — ticketing, registration, check-in, venues, speakers, sponsors."
diff --git a/source/packages/plg_system_mokosuiteevent/mokosuiteevent.xml b/source/packages/plg_system_mokosuiteevent/mokosuiteevent.xml
new file mode 100644
index 0000000..3b8bbad
--- /dev/null
+++ b/source/packages/plg_system_mokosuiteevent/mokosuiteevent.xml
@@ -0,0 +1,42 @@
+
+
+ System - MokoSuite Event
+ mokosuiteevent
+ Moko Consulting
+ 2026-06-23
+ Copyright (C) 2026 Moko Consulting. All rights reserved.
+ GPL-3.0-or-later
+ hello@mokoconsulting.tech
+ https://mokoconsulting.tech
+ 01.00.00
+ 8.3
+ PLG_SYSTEM_MOKOSUITEEVENT_DESC
+ Moko\Plugin\System\MokoSuiteEvent
+
+ src
+ services
+ language
+ sql
+
+
+ en-GB/plg_system_mokosuiteevent.ini
+ en-GB/plg_system_mokosuiteevent.sys.ini
+
+ sql/install.mysql.sql
+ sql/uninstall.mysql.sql
+
+
+
+
+
+
diff --git a/source/packages/plg_system_mokosuiteevent/services/provider.php b/source/packages/plg_system_mokosuiteevent/services/provider.php
new file mode 100644
index 0000000..203bcf5
--- /dev/null
+++ b/source/packages/plg_system_mokosuiteevent/services/provider.php
@@ -0,0 +1,27 @@
+set(
+ PluginInterface::class,
+ function (Container $container) {
+ $dispatcher = $container->get(DispatcherInterface::class);
+ $plugin = new Event($dispatcher, (array) PluginHelper::getPlugin('system', 'mokosuiteevent'));
+ $plugin->setApplication(Factory::getApplication());
+ return $plugin;
+ }
+ );
+ }
+};
diff --git a/source/packages/plg_system_mokosuiteevent/sql/install.mysql.sql b/source/packages/plg_system_mokosuiteevent/sql/install.mysql.sql
new file mode 100644
index 0000000..4194e82
--- /dev/null
+++ b/source/packages/plg_system_mokosuiteevent/sql/install.mysql.sql
@@ -0,0 +1,151 @@
+--
+-- MokoSuite Event Tables
+--
+
+CREATE TABLE IF NOT EXISTS `#__mokosuiteevent_events` (
+ `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
+ `title` VARCHAR(255) NOT NULL,
+ `description` TEXT,
+ `venue_id` INT UNSIGNED DEFAULT NULL,
+ `start_date` DATETIME NOT NULL,
+ `end_date` DATETIME NOT NULL,
+ `timezone` VARCHAR(50) NOT NULL DEFAULT 'UTC',
+ `capacity` INT UNSIGNED NOT NULL DEFAULT 0,
+ `registered_count` INT UNSIGNED NOT NULL DEFAULT 0,
+ `status` ENUM('draft','published','cancelled','completed') NOT NULL DEFAULT 'draft',
+ `is_recurring` TINYINT NOT NULL DEFAULT 0,
+ `recurrence_rule` VARCHAR(255) NOT NULL DEFAULT '',
+ `cover_image` VARCHAR(500) NOT NULL DEFAULT '',
+ `organizer_contact_id` INT DEFAULT NULL,
+ `published` TINYINT NOT NULL DEFAULT 1,
+ `created` DATETIME NOT NULL,
+ `modified` DATETIME DEFAULT NULL,
+ `created_by` INT NOT NULL DEFAULT 0,
+ PRIMARY KEY (`id`),
+ KEY `idx_venue` (`venue_id`),
+ KEY `idx_dates` (`start_date`, `end_date`),
+ KEY `idx_status` (`status`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+
+CREATE TABLE IF NOT EXISTS `#__mokosuiteevent_ticket_types` (
+ `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
+ `event_id` INT UNSIGNED NOT NULL,
+ `name` VARCHAR(255) NOT NULL,
+ `description` TEXT,
+ `price` DECIMAL(10,2) NOT NULL DEFAULT 0.00,
+ `quantity` INT UNSIGNED NOT NULL DEFAULT 0,
+ `sold` INT UNSIGNED NOT NULL DEFAULT 0,
+ `max_per_order` INT UNSIGNED NOT NULL DEFAULT 10,
+ `sale_start` DATETIME DEFAULT NULL,
+ `sale_end` DATETIME DEFAULT NULL,
+ `published` TINYINT NOT NULL DEFAULT 1,
+ `ordering` INT NOT NULL DEFAULT 0,
+ PRIMARY KEY (`id`),
+ KEY `idx_event` (`event_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+
+CREATE TABLE IF NOT EXISTS `#__mokosuiteevent_registrations` (
+ `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
+ `event_id` INT UNSIGNED NOT NULL,
+ `contact_id` INT DEFAULT NULL,
+ `name` VARCHAR(255) NOT NULL,
+ `email` VARCHAR(255) NOT NULL,
+ `phone` VARCHAR(50) NOT NULL DEFAULT '',
+ `status` ENUM('pending','confirmed','cancelled','waitlisted','checked_in') NOT NULL DEFAULT 'pending',
+ `total_amount` DECIMAL(10,2) NOT NULL DEFAULT 0.00,
+ `payment_status` ENUM('unpaid','paid','refunded') NOT NULL DEFAULT 'unpaid',
+ `notes` TEXT,
+ `registered_at` DATETIME NOT NULL,
+ `checked_in_at` DATETIME DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ KEY `idx_event` (`event_id`),
+ KEY `idx_contact` (`contact_id`),
+ KEY `idx_status` (`status`),
+ KEY `idx_email` (`email`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+
+CREATE TABLE IF NOT EXISTS `#__mokosuiteevent_tickets` (
+ `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
+ `registration_id` INT UNSIGNED NOT NULL,
+ `ticket_type_id` INT UNSIGNED NOT NULL,
+ `qr_code` VARCHAR(100) NOT NULL DEFAULT '',
+ `attendee_name` VARCHAR(255) NOT NULL DEFAULT '',
+ `checked_in` TINYINT NOT NULL DEFAULT 0,
+ `checked_in_at` DATETIME DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `idx_qr` (`qr_code`),
+ KEY `idx_registration` (`registration_id`),
+ KEY `idx_type` (`ticket_type_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+
+CREATE TABLE IF NOT EXISTS `#__mokosuiteevent_venues` (
+ `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
+ `name` VARCHAR(255) NOT NULL,
+ `address` TEXT,
+ `city` VARCHAR(100) NOT NULL DEFAULT '',
+ `state` VARCHAR(50) NOT NULL DEFAULT '',
+ `postal_code` VARCHAR(20) NOT NULL DEFAULT '',
+ `capacity` INT UNSIGNED NOT NULL DEFAULT 0,
+ `amenities` TEXT,
+ `contact_name` VARCHAR(255) NOT NULL DEFAULT '',
+ `contact_phone` VARCHAR(50) NOT NULL DEFAULT '',
+ `contact_email` VARCHAR(255) NOT NULL DEFAULT '',
+ `published` TINYINT NOT NULL DEFAULT 1,
+ `created` DATETIME NOT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+
+CREATE TABLE IF NOT EXISTS `#__mokosuiteevent_speakers` (
+ `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
+ `contact_id` INT DEFAULT NULL,
+ `name` VARCHAR(255) NOT NULL,
+ `title` VARCHAR(255) NOT NULL DEFAULT '',
+ `company` VARCHAR(255) NOT NULL DEFAULT '',
+ `bio` TEXT,
+ `photo` VARCHAR(500) NOT NULL DEFAULT '',
+ `website` VARCHAR(500) NOT NULL DEFAULT '',
+ `published` TINYINT NOT NULL DEFAULT 1,
+ `created` DATETIME NOT NULL,
+ PRIMARY KEY (`id`),
+ KEY `idx_contact` (`contact_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+
+CREATE TABLE IF NOT EXISTS `#__mokosuiteevent_sponsors` (
+ `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
+ `event_id` INT UNSIGNED NOT NULL,
+ `contact_id` INT DEFAULT NULL,
+ `name` VARCHAR(255) NOT NULL,
+ `tier` ENUM('platinum','gold','silver','bronze','community') NOT NULL DEFAULT 'community',
+ `logo` VARCHAR(500) NOT NULL DEFAULT '',
+ `website` VARCHAR(500) NOT NULL DEFAULT '',
+ `amount` DECIMAL(10,2) NOT NULL DEFAULT 0.00,
+ `benefits` TEXT,
+ `published` TINYINT NOT NULL DEFAULT 1,
+ PRIMARY KEY (`id`),
+ KEY `idx_event` (`event_id`),
+ KEY `idx_tier` (`tier`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+
+CREATE TABLE IF NOT EXISTS `#__mokosuiteevent_sessions` (
+ `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
+ `event_id` INT UNSIGNED NOT NULL,
+ `title` VARCHAR(255) NOT NULL,
+ `description` TEXT,
+ `room` VARCHAR(100) NOT NULL DEFAULT '',
+ `track` VARCHAR(100) NOT NULL DEFAULT '',
+ `start_time` DATETIME NOT NULL,
+ `end_time` DATETIME NOT NULL,
+ `capacity` INT UNSIGNED NOT NULL DEFAULT 0,
+ `ordering` INT NOT NULL DEFAULT 0,
+ PRIMARY KEY (`id`),
+ KEY `idx_event` (`event_id`),
+ KEY `idx_time` (`start_time`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+
+CREATE TABLE IF NOT EXISTS `#__mokosuiteevent_session_speakers` (
+ `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
+ `session_id` INT UNSIGNED NOT NULL,
+ `speaker_id` INT UNSIGNED NOT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `idx_session_speaker` (`session_id`, `speaker_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
diff --git a/source/packages/plg_system_mokosuiteevent/sql/uninstall.mysql.sql b/source/packages/plg_system_mokosuiteevent/sql/uninstall.mysql.sql
new file mode 100644
index 0000000..52ca541
--- /dev/null
+++ b/source/packages/plg_system_mokosuiteevent/sql/uninstall.mysql.sql
@@ -0,0 +1,13 @@
+--
+-- MokoSuite Event — Uninstall
+--
+
+DROP TABLE IF EXISTS `#__mokosuiteevent_session_speakers`;
+DROP TABLE IF EXISTS `#__mokosuiteevent_sessions`;
+DROP TABLE IF EXISTS `#__mokosuiteevent_sponsors`;
+DROP TABLE IF EXISTS `#__mokosuiteevent_speakers`;
+DROP TABLE IF EXISTS `#__mokosuiteevent_venues`;
+DROP TABLE IF EXISTS `#__mokosuiteevent_tickets`;
+DROP TABLE IF EXISTS `#__mokosuiteevent_registrations`;
+DROP TABLE IF EXISTS `#__mokosuiteevent_ticket_types`;
+DROP TABLE IF EXISTS `#__mokosuiteevent_events`;
diff --git a/source/packages/plg_system_mokosuiteevent/src/Extension/Event.php b/source/packages/plg_system_mokosuiteevent/src/Extension/Event.php
new file mode 100644
index 0000000..ec43d4e
--- /dev/null
+++ b/source/packages/plg_system_mokosuiteevent/src/Extension/Event.php
@@ -0,0 +1,18 @@
+
+
+ Package - MokoSuite Event
+ mokosuiteevent
+ 01.00.00
+ 2026-06-23
+ Moko Consulting
+ hello@mokoconsulting.tech
+ https://mokoconsulting.tech
+ Copyright (C) 2026 Moko Consulting. All rights reserved.
+ GNU General Public License version 3 or later; see LICENSE
+ Event management — ticketing, registration, check-in, venues, speakers
+ 8.3
+
+ true
+
+ plg_system_mokosuiteevent.zip
+
+
+ https://git.mokoconsulting.tech/MokoConsulting/MokoSuiteEvent/updates.xml
+
+