MokoSuiteBackup
Full-site backup and restore for Joomla 4/5/6. A complete replacement for Akeeba Backup Pro.
MokoSuiteBackup Plugins & Automation
- Details
Plugin Overview
MokoJoomBackup is a Joomla package that ships with seven plugins alongside the main component. All plugins are auto-enabled on installation.
| Plugin | Type | Purpose |
|---|---|---|
| plg_system_mokojoombackup | System | Auto-cleanup of old backups and web cron endpoint |
| plg_task_mokojoombackup | Task | Joomla Scheduled Tasks integration |
| plg_quickicon_mokojoombackup | Quickicon | Dashboard status widget |
| plg_console_mokojoombackup | Console | CLI commands (run, list, restore, cleanup, profiles) |
| plg_content_mokojoombackup | Content | Automatic pre-install/pre-update backups |
| plg_actionlog_mokojoombackup | Action Log | Logs profile and backup actions to Joomla action logs |
| plg_webservices_mokojoombackup | Web Services | REST API endpoints |
Auto-Cleanup (System Plugin)
Automatically removes old backup records and archive files based on age and count limits.
- Max Age — Delete backups older than N days (default: 30, range: 1–365)
- Max Backups — Keep only the N newest backups (default: 10, range: 1–100)
- Runs once per hour on admin page loads (not AJAX), throttled via session
- Age-based deletion runs first, then count-based enforcement
- Both the archive file and the database record are removed
Configure in System > Plugins > System — MokoJoomBackup.
Dashboard Widget (Quickicon Plugin)
Adds a status widget to the Joomla Home Dashboard showing:
- Time since last backup (e.g. "2h ago", "3d ago")
- Total backup count and total storage used
- Warning states: no backups exist, recent failures, or stale backups (older than 7 days)
Automatic Pre-Update Backups (Content Plugin)
Triggers an automatic backup before Joomla extension installs or updates.
- Backup Before Install — Triggers before installing a new extension (default: disabled)
- Backup Before Update — Triggers before updating an extension (default: enabled)
- Profile — Which backup profile to use for automatic backups
- Throttled to one auto-backup per hour to prevent excessive backups
- Non-fatal: if the backup fails, a warning is shown but the install/update proceeds
Configure in System > Plugins > Content — MokoJoomBackup.
Action Logging (Action Log Plugin)
Records MokoJoomBackup actions in Joomla's User Action Logs (Users > User Actions Log):
- Profile created, updated, or deleted
- Backup record deleted
- Backup completed or failed
Each log entry includes: user, IP address, item ID, and timestamp.
MokoSuiteBackup Placeholders
- Details
Overview
Placeholders are tokens enclosed in square brackets that are resolved at backup time. Use them in the Backup Directory and Archive Name Format fields of a backup profile to create dynamic, portable paths and filenames.
Available Placeholders
| Placeholder | Resolves To | Example |
|---|---|---|
[DEFAULT_DIR] | Default backup directory | administrator/components/com_mokojoombackup/backups |
[host] | Server hostname (sanitised) | www.example.com |
[site_name] | Joomla site name (sanitised) | My-Joomla-Site |
[date] | Date as Ymd | 20260607 |
[time] | Time as His | 143025 |
[datetime] | Date and time | 20260607_143025 |
[year] | Four-digit year | 2026 |
[month] | Two-digit month | 06 |
[day] | Two-digit day | 07 |
[hour] | Two-digit hour (24h) | 14 |
[minute] | Two-digit minute | 30 |
[second] | Two-digit second | 25 |
[profile_id] | Backup profile ID | 1 |
[profile_name] | Profile title (sanitised) | Daily-Full |
[type] | Backup type | full, database, files, differential |
[random] | Random 6-character hex string | a3f2b1 |
Examples
Archive Name Format
Default: [host]_[datetime]_profile[profile_id]
Result: www.example.com_20260607_143025_profile1.zip
Custom: [site_name]_[type]_[date]_[random]
Result: My-Joomla-Site_full_20260607_a3f2b1.zip
Backup Directory
Default: [DEFAULT_DIR] (resolves to the component's backups folder inside the web root)
Outside web root: /home/user/backups/[host]/[year]/[month]
Result: /home/user/backups/www.example.com/2026/06/
Organised by profile: /var/backups/joomla/[profile_name]
Result: /var/backups/joomla/Daily-Full/
Notes
- Placeholders are resolved at backup time — the directory is created automatically if it doesn't exist
- The
[DEFAULT_DIR]placeholder makes profiles portable across different server paths - Directory paths containing unresolved placeholders skip permission checks in the dashboard (they can't be validated until backup time)
- Sanitisation removes special characters, keeping only alphanumerics, dots, hyphens, and underscores
MokoSuiteBackup Restore & MokoRestore
- Details
Restore Methods
MokoJoomBackup supports three ways to restore a backup:
- Admin Panel — Select a backup record and click Restore in the toolbar
- CLI —
php cli/joomla.php mokojoombackup:restore <record-id> - MokoRestore — Standalone restore script for bare-server deployment (no Joomla required)
Admin Panel Restore
The built-in restore engine runs a six-step process:
- Extract archive to a temporary staging directory
- Preserve configuration.php so database credentials and paths survive the restore
- Restore files from the archive to the Joomla root
- Import database from the SQL dump (if present)
- Restore configuration.php with the preserved version
- Clean up the staging directory
Supports ZIP, tar.gz, and JPA (Akeeba Backup) archive formats. Encrypted archives are supported with a password prompt.
MokoRestore Standalone Script
When Include MokoRestore is enabled in a backup profile, the archive is packaged as:
outer.zip
├── restore.php (standalone installer)
└── site-backup.zip (the actual backup)
Upload both files to any PHP server and open restore.php in a browser. The wizard guides you through:
Step 1: Preflight Checks
- PHP version (8.1+ required)
- Required extensions: ZipArchive, PDO MySQL, mbstring, JSON
- Backup file exists and is readable
- Directory is writable
- Free disk space (500 MB minimum)
- PHP memory limit
Step 2: Extract
Extracts the site backup archive. Pre-reads any existing configuration.php to pre-fill database credentials. Supports encrypted archives.
Step 3: Test Database
Enter database credentials and test the connection before proceeding.
Step 4: Import Database
Imports database.sql with foreign key checks disabled. Reports statements executed and any errors.
Step 5: Configuration
Updates or creates configuration.php with your database credentials, paths, a fresh secret key, site name, and live site URL.
Step 6: Admin Management
Lists super administrator accounts and optionally lets you reset a password using bcrypt hashing.
Step 7: Cleanup
Removes restore.php, site-backup.zip, and database.sql artifacts from the server with a self-delete mechanism.
Security
- MokoRestore includes CSRF token protection on all forms
- Encrypted archive support (AES-256)
- Self-contained in a single PHP file — no dependencies
- Always delete restore.php after use
MokoSuiteBackup Notifications
- Details
Overview
MokoJoomBackup can send email notifications when backups complete or fail. Notifications are configured per profile, giving you fine-grained control over who gets notified and when.
Configuration
Open a backup profile and go to the Notifications tab:
| Field | Description |
|---|---|
| Notification Email | Comma-separated email addresses to receive notifications |
| Notify User Groups | Select Joomla user groups — all members will receive notifications |
| Notify on Success | Send email when backup completes successfully (default: No) |
| Notify on Failure | Send email when backup fails (default: Yes) |
Email addresses and user group members are combined. Duplicate addresses are automatically filtered.
Email Content
Subject Line
[MokoJoomBackup] SUCCESS: Daily Full Backup — My Joomla Site
[MokoJoomBackup] FAILED: Daily Full Backup — My Joomla Site
Email Body Includes
- Site name and URL
- Backup status (success/failure)
- Profile name and backup type
- Backup description and origin (backend, CLI, scheduled, web cron)
- Archive filename and total size
- Duration, start time, and end time
- Remote filename (if uploaded to FTP/S3/Google Drive)
- File count and table count
On failure, the last 30 lines of the backup log are appended to help diagnose the issue.
Tips
- For critical production sites, enable Notify on Failure and add the site admin's email
- Use user group notifications to automatically include new team members
- Notification errors are logged but never block the backup process — a failed email won't cause a backup failure
MokoSuiteBackup CLI Commands
- Details
Overview
MokoJoomBackup provides five CLI commands via the Joomla console plugin. All commands are run through Joomla's CLI entry point:
php cli/joomla.php <command> [options]
Commands
mokojoombackup:run
Run an immediate backup.
php cli/joomla.php mokojoombackup:run --profile=1
php cli/joomla.php mokojoombackup:run -p 2 --description="Pre-deploy backup"
| Option | Short | Default | Description |
|---|---|---|---|
--profile | -p | 1 | Backup profile ID |
--description | -d | (auto) | Backup description |
mokojoombackup:list
List backup records.
php cli/joomla.php mokojoombackup:list
php cli/joomla.php mokojoombackup:list --status=complete --limit=10
| Option | Short | Default | Description |
|---|---|---|---|
--limit | -l | 20 | Max records to show |
--status | -s | (all) | Filter: complete, fail, running |
Output columns: ID, Profile, Status, Type, Size, Origin, Started.
mokojoombackup:profiles
List all backup profiles.
php cli/joomla.php mokojoombackup:profiles
Output columns: ID, Title, Type, Published.
mokojoombackup:restore
Restore a backup by record ID.
php cli/joomla.php mokojoombackup:restore 42
Requires interactive confirmation. Validates that the record exists, is marked complete, and the archive file is present on disk.
mokojoombackup:cleanup
Clean up old backup records and archive files.
php cli/joomla.php mokojoombackup:cleanup
php cli/joomla.php mokojoombackup:cleanup --max-age=14 --max-count=5
php cli/joomla.php mokojoombackup:cleanup --dry-run
| Option | Default | Description |
|---|---|---|
--max-age | 30 | Delete backups older than N days |
--max-count | 10 | Keep only the N newest backups |
--dry-run | false | Show what would be deleted without deleting |
Cron Integration
Combine CLI commands with system cron for fully automated backup management:
# Daily full backup at 2 AM
0 2 * * * /usr/bin/php /path/to/joomla/cli/joomla.php mokojoombackup:run -p 1
# Weekly cleanup on Sundays
0 3 * * 0 /usr/bin/php /path/to/joomla/cli/joomla.php mokojoombackup:cleanup --max-age=30 --max-count=10
MokoSuiteBackup Scheduled Tasks & Web Cron
- Details
Joomla Scheduled Tasks
MokoJoomBackup integrates with Joomla's built-in Scheduled Tasks (System > Scheduled Tasks). This is the recommended way to automate backups.
Creating a Scheduled Backup
- Go to System > Scheduled Tasks > New
- Select MokoJoomBackup — Run Backup Profile as the task type
- Choose which backup profile to run from the dropdown
- Set your schedule (e.g. daily at 2:00 AM, weekly on Sundays)
- Save and enable the task
You can create multiple scheduled tasks pointing to different profiles. For example: a daily database-only backup and a weekly full backup.
Joomla Cron Setup
Joomla's Scheduled Tasks require a system-level cron job to trigger the task runner. Add this to your server's crontab:
*/5 * * * * /usr/bin/php /path/to/joomla/cli/joomla.php scheduler:run --all
Web Cron (Shared Hosting)
If you don't have access to system cron (common on shared hosting), MokoJoomBackup provides a web cron URL that can be triggered by external cron services.
Setup
- Go to Components > MokoJoomBackup > Options (toolbar gear icon)
- Enable Web Cron
- Set a Web Cron Secret — a long random string that acts as a password
- Optionally restrict by IP with the IP Whitelist field
Web Cron URL Format
https://yoursite.com/index.php?mokojoombackup_cron=YOUR_SECRET&profile_id=1
| Parameter | Description |
|---|---|
mokojoombackup_cron | Your web cron secret (required) |
profile_id | Which backup profile to run (optional, falls back to default profile) |
External Cron Services
Use any external cron service (cron-job.org, EasyCron, UptimeRobot, etc.) to hit the web cron URL on your desired schedule. The endpoint returns a JSON response with the backup result.
Security
- The web cron secret is compared using timing-safe string comparison to prevent timing attacks
- IP whitelist support restricts which addresses can trigger backups
- PHP execution limits are automatically overridden (max_execution_time=0, memory_limit=512M)
MokoSuiteBackup Dashboard
- Details
Dashboard Overview
The Dashboard is the default landing page when you open MokoJoomBackup in the Joomla administrator. It gives you a real-time overview of your backup status, system health, and quick access to common actions.
Status Cards
Four clickable cards appear at the top of the dashboard:
| Card | Shows | Links To |
|---|---|---|
| Last Backup | Date, profile name, and file size of your most recent completed backup | Backup detail view |
| Next Scheduled | Date/time and task name of the next scheduled backup | Joomla Scheduled Tasks |
| Total Backups | Total count of all completed backup records | Backup Records list |
| Storage Used | Total disk space used by all backup archives, plus a failure count badge for the last 7 days | Backup Records list |
Quick Actions
The Quick Actions panel provides:
- Backup Now — Select a profile from the dropdown and click to start an immediate backup. A progress modal shows real-time step completion.
- Navigation links — Direct access to Backup Records, Backup Profiles, Scheduled Tasks, and Update Sites.
System Health
The System Health panel runs automated checks and displays pass/fail status for:
- PHP Version — Must be 8.1 or higher
- ZipArchive — Required PHP extension for ZIP archives
- AES-256 Encryption — Requires libzip 1.2.0+ for encrypted archives
- Backup Directory — Checks the configured directory exists and is writable
- Free Disk Space — Warns if less than 1 GB free
Default Directory Warning
If any published profile stores backups in the default directory inside the web root (administrator/components/com_mokojoombackup/backups), a warning banner is displayed. For better security, configure a backup directory outside the web root.
Migrating from Akeeba Backup Pro
- Details
One-Click Import
- Install MokoJoomBackup alongside Akeeba
- Go to Components > MokoJoomBackup > Backup Profiles
- Click Import from Akeeba
- All profiles, filters, credentials, and history are imported
- Akeeba plugins and scheduled tasks are disabled automatically
What Gets Imported
- Profile names, backup types, compression settings
- Directory, file, and table exclusion filters
- FTP, Google Drive, and S3 credentials
- Backup history with profile ID remapping
JPA Support
MokoJoomBackup can restore from Akeeba .jpa files directly. The engine auto-detects JPA vs ZIP format.
MokoSuiteBackup Security, Encryption & Integrity
- Details
AES-256 Encryption
Set an encryption password in the profile Archive Settings. Archives use WinZip-compatible AES-256. Requires PHP 7.2+ with libzip 1.2.0+.
SHA-256 Integrity
Checksum computed after archive creation. Use the Verify Integrity button to detect corruption or tampering.
MokoRestore Restore Script
Self-contained restore.php with CSRF protection, pre-flight checks, and encrypted archive support. Upload to any PHP server for bare-server restore.
Backup Directory
Protected with .htaccess (Deny from all) and index.html.
MokoSuiteBackup REST API & MCP Integration
- Details
REST API Endpoints
Auth: Authorization: Bearer <joomla-api-token>
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/index.php/v1/mokobackup/backup | Start backup (body: profile ID + description) |
| GET | /api/index.php/v1/mokobackup/backups | List backup records |
| DELETE | /api/index.php/v1/mokobackup/backup/:id | Delete backup record + archive |
| GET | /api/index.php/v1/mokobackup/backup/:id/download | Download archive (base64) |
| GET | /api/index.php/v1/mokobackup/profiles | List backup profiles |
MCP Server
The mcp_mokobackup MCP server supports both Akeeba and MokoJoomBackup. Set target type to "mokobackup" in config. The existing akeeba_* tools auto-detect the backend.
CLI
php administrator/components/com_mokobackup/cli/mokobackup.php --profile=1
php administrator/components/com_mokobackup/cli/mokobackup.php --profile=2 --description="Pre-deploy"
MokoSuiteBackup Remote Storage (FTP, Google Drive, S3)
- Details
Storage Backends
| Backend | Features |
|---|---|
| FTP/FTPS | Passive mode, SSL, recursive dir creation, size verification |
| Google Drive | OAuth2 refresh tokens, resumable upload (5 MB chunks), no SDK |
| Amazon S3 | AWS Signature V4, multipart upload (10 MB parts), custom endpoints |
S3-Compatible Services
- AWS S3: leave endpoint blank
- Wasabi:
https://s3.wasabisys.com - Backblaze B2:
https://s3.us-west-001.backblazeb2.com - MinIO: your server URL
All uploaders use pure PHP with cURL. No SDK dependencies.
MokoSuiteBackup Backup Profiles & Types
- Details
Backup Types
| Type | Database | Files | Use Case |
|---|---|---|---|
| Full | Yes | All files | Complete site snapshot |
| Database Only | Yes | No | Quick DB backup before changes |
| Files Only | No | All files | Code/media backup |
| Differential | Yes (full) | Changed only | Fast daily backups between weekly fulls |
Profile Tabs
- General: title, description, backup type
- Archive Settings: format, compression, split size, backup dir, encryption password, MokoRestore toggle
- Exclusion Filters: directories, files (wildcards), database tables (newline-separated)
- Notifications: email recipients, notify on success/failure
- Remote Storage: FTP/FTPS, Google Drive, Amazon S3 with individual credential fields
Differential Backups
Compares current filesystem against a manifest from the last full backup. Only new/modified files are included. Database is always fully dumped. Falls back to full backup if no base manifest exists.
MokoSuiteBackup Installation & Setup
- Details
Installation
- Download
pkg_mokobackup-*.zipfrom Releases - Go to System > Install > Extensions in Joomla Administrator
- Upload the package ZIP
- All five plugins are auto-enabled on install
Package Contents
| Extension | Type | Purpose |
|---|---|---|
| com_mokobackup | Component | Admin backend with backup engine, profiles, and records |
| plg_system_mokobackup | System Plugin | Auto-cleanup of expired backups |
| plg_task_mokobackup | Task Plugin | Joomla Scheduled Tasks integration |
| plg_quickicon_mokobackup | Quickicon Plugin | Dashboard status widget |
| plg_webservices_mokobackup | WebServices Plugin | REST API for MCP server |
Requirements
- Joomla 4.0+ (4.1+ for Scheduled Tasks)
- PHP 8.1+
- PHP extensions: ext-zip, ext-curl, ext-ftp, ext-mbstring, ext-pdo_mysql
First Backup
- Navigate to Components > MokoJoomBackup
- A default backup profile is pre-configured
- Select the profile from the dropdown and click Backup Now
- The progress bar shows real-time step completion
MokoSuiteBackup Overview
- Details
What is MokoJoomBackup?
MokoJoomBackup is a comprehensive backup and restore solution for Joomla 4/5/6, built as a complete replacement for Akeeba Backup Pro. It provides full-site backups (database + files), multiple backup profiles, scheduled tasks, remote storage (FTP, Google Drive, S3), AES-256 encryption, and a standalone restore script.
Key Features
- Full, database-only, files-only, and differential backup types
- Multiple backup profiles with independent settings
- Joomla Scheduled Tasks integration for automated backups
- Remote storage: FTP/FTPS, Google Drive, Amazon S3 (+ Wasabi, B2, MinIO)
- AES-256 archive encryption for GDPR compliance
- MokoRestore standalone restore script for bare-server restores
- SHA-256 integrity verification
- Email notifications on success/failure
- REST API compatible with MokoBackup MCP server
- AJAX step-based engine for shared hosting
- One-click Akeeba Backup Pro migration
- JPA archive format import
- Admin dashboard status widget
Documentation
Full documentation is available on the MokoJoomBackup Wiki.