MuRu Migration
Export and import complete Joomla site content -- users, articles, media, menus, and modules -- across Joomla 3, 4, 5, and 6. Dry-run previews, dependency-aware ID remapping, and a one-ZIP Full Migration mode make version upgrades and site moves safer.
Current release: v2.3.0 · Joomla 3.4+, 4.x, 5.x, and 6.x
J3 – J6
Cross-Version
1 ZIP
Full Migration
Dry Run
Every Import
Auto
ID Remapping
2
Joomla Packages
GPLv3
License
Overview
MuRu Migration is a Joomla administrator component for moving a site's content between installs, including across major Joomla versions. It exports modules, menus, articles, categories, and users -- with their full configuration -- to portable JSON and ZIP files, and imports them back on any Joomla 3.4+, 4.x, 5.x, or 6.x install.
It is the renamed continuation of the Easy Import/Export component (com_easyimportexport), now distributed as com_murumigration. Existing installs of the older component are migrated to the new database tables automatically.
What's New in 2.3.0
Full Migration tab
A new default "Full Migration" tab packs the entire site -- users, groups, articles, categories, images, menus, and modules -- into a single portable ZIP (manifest.json plus per-section files). Importing it runs everything in one pass, in dependency order, with menu assignments, alias targets, and article links remapped automatically. Dry-run previews the whole import section by section.
Advanced tabs kept for selective work
The per-type tabs -- Modules, Menus, Articles, Users -- remain available under Advanced when you only need to move one thing.
Uninstall cleanup fixed
The extension's uninstall SQL now drops both the current #__murumigration_idmaps table and the legacy #__easyimportexport_idmaps table from earlier installs.
Full Migration (All-in-One)
Full Migration is the default way to move an entire site in one step. One export produces a single ZIP -- users, groups, articles, categories, images, menus, and modules, packaged as a manifest.json plus per-section files. Drop that ZIP on another Joomla site and everything imports in one pass, in the correct dependency order: users → articles → menus → modules.
Menu assignments, alias targets, and article links are remapped automatically during that same pass, using in-memory ID maps built as each section imports. Dry run previews the whole import, section by section, before anything is written.
Core Features
Full Migration
- One export, one import for the whole site
- Users, groups, articles, categories, images, menus, and modules in a single ZIP
- Imports in dependency order automatically
- Dry-run preview covers the entire migration, section by section
Dry Run (Preview Mode)
- Available for every import, not just Full Migration
- Shows items to import, update, or skip
- Flags missing module types or components on the target
- Reports which references can or can't be remapped
- Zero database writes
Cross-Version ID Remapping
- Old-to-new ID maps stored per source site
- Module menu assignments remapped to target IDs
- Alias menu item targets remapped
- com_content article links in menus remapped
Menu & Category Tree Safety
- Imported items never reuse the source site's lft/rgt/level/path values
- Menu tree rebuilt after every menu import
- Category tree rebuilt after every category import
- Importing onto a non-empty site no longer corrupts existing trees
ZIP-Based Media Export
- Article exports ship as a ZIP: data.json plus a media/ folder
- Covers intro, full-article, inline, and CSS background images
- Supports JPG, PNG, GIF, WebP, SVG, BMP, ICO up to 10 MB each
- Legacy .json (base64) exports still import for backward compatibility
Users, Groups & Profiles
- Password hashes preserved -- no forced reset
- Groups matched by title, not ID, across sites
- Missing groups created under the correct parent automatically
- Profile data (#__user_profiles) restored alongside the account
Modules & SP Page Builder
- Full config preserved: params, position, ordering, access, language
- Menu assignments preserved and remapped on import
- SP Page Builder content (#__sppagebuilder) exported and restored automatically
- Module type validated on the target before import
Cross-Version Compatibility
- Export from Joomla 3, 4, 5, or 6 -- import into any other
- Schema differences between versions handled automatically
- Column-filtering skips fields the target table doesn't have
- Version-specific columns (e.g. authProvider) included only when supported
Modules
Export scope
Export selected modules or all modules at once, filterable by client -- Site, Administrator, or both.
Full configuration preserved
Params, position, ordering, access levels, and language all come across intact.
Menu assignments
Which pages each module appears on is preserved and remapped through the stored menu ID map on import.
SP Page Builder support
mod_sppagebuilder modules automatically bring their content from the #__sppagebuilder table with them.
Overwrite matching
Import can match existing modules by ID or by title + type when overwrite is enabled.
Type validation
Module types are checked against what's installed on the target; unrecognized types are skipped with a warning instead of importing broken.
Articles & Categories
Export scope
Export selected articles, all articles, articles filtered by category, or categories only.
Full content preserved
Introtext, fulltext, images, URLs, metadata, featured flag, and custom fields all come across.
ZIP-based media
Article exports produce a .zip with a clean data.json plus a media/ folder of raw image files -- intro, full-article, inline <img>, and CSS background images.
Supported formats
JPG, JPEG, PNG, GIF, WebP, SVG, BMP, ICO, up to 10 MB per file.
Import formats
Accepts both .zip (recommended) and legacy .json exports for backward compatibility.
Category tree safety
Category hierarchy (parent-child, level, path) is preserved, parents resolved by remapped ID or alias, and the category tree is rebuilt after import so existing categories aren't corrupted.
Overwrite matching
Articles matched by ID or alias; categories matched by alias + extension.
Users
Export scope
Export selected users or all users, optionally filtered by user group.
Data preserved
Name, username, email, password hash, registration date, last visit, and block status.
Groups matched by title
Source group IDs aren't assumed to exist on the target -- groups match by title, missing ones are created under the correct parent, and the usergroup tree is rebuilt afterward.
Profile data restored
#__user_profiles data comes across alongside the account.
Passwords preserved
Password hashes are kept as-is, so users log in with their existing password on the new site.
Duplicate handling
Import matches by ID, username, or email; users with an existing username or email are skipped unless overwrite is enabled.
Migration-Safe Importing
Introduced in 2.2.0, this is what makes importing onto a site that already has real content safe rather than destructive.
Dry run for every import
Preview items to import/update/skip, missing module types or components, and remappable references -- with zero writes -- before running the real import.
Nested-set safety
Imported menus and categories no longer carry the source site's lft/rgt/level/path; the target's trees are rebuilt after import instead, so existing menus and categories stay intact.
Cross-import ID remapping
Each import stores old-to-new ID maps per source site in #__murumigration_idmaps. Importing in the recommended order -- users, then articles/categories, then menus, then modules -- lets each later import remap its references to the correct target IDs automatically.
Home page conflict handling
One home page per language is enforced; a conflicting imported home item is disabled on import, with a warning, instead of creating a duplicate.
User groups matched by title
Group IDs differ between sites, so groups are matched by title. Missing groups are created with the correct parent, and the usergroup tree is rebuilt -- so memberships never land on unrelated groups due to ID collisions.
Cross-Version Support
A column-filtering layer (filterColumns()) in both editions automatically handles schema differences between Joomla versions, so an export from one version imports cleanly into another.
Unknown columns skipped
Columns present in the export but not in the target database table are silently skipped rather than causing an error.
Version-specific columns handled
Columns like checked_out (NOT NULL in Joomla 4, nullable in 5+) are handled correctly for whichever version is on the receiving end.
Optional columns included when supported
The authProvider column (Joomla 5+ only) is included when the target supports it, and ignored when it doesn't.
Any direction works
J3 exports import cleanly into J4/5/6, and J4/5/6 exports import cleanly back into J3.
Packages & Requirements
Both packages produce the same JSON/ZIP export format, so files move freely between them.
J4/5/6 Edition
- Joomla 4.0+ / 5.x / 6.x
- PHP 8.1+
- Namespaced modern MVC
- Full dark mode support in the admin UI
- File: MuRu-Migration_J4-5-6_v2.3.0.zip
J3 Edition
- Joomla 3.4 – 3.10
- PHP 5.6+
- Legacy MVC
- Same JSON/ZIP export format as the J4/5/6 edition
- File: MuRu-Migration_J3_v2.3.0.zip
License: GNU General Public License v3 or later. Formerly distributed as "Easy Import/Export" (com_easyimportexport) -- existing installs migrate to com_murumigration automatically.
Installation
Joomla 4 / 5 / 6
- Download MuRu-Migration_J4-5-6_v2.3.0.zip
- Go to System > Install > Extensions
- Upload the ZIP file and install
- Open Components > MuRu Migration
Joomla 3
- Download MuRu-Migration_J3_v2.3.0.zip
- Go to Extensions > Extension Manager > Upload Package File
- Upload the ZIP file and install
- Open Components > MuRu Migration
Step-by-Step Migration Runbook
A full Joomla 3 → Joomla 4/5/6 move using Full Migration or the per-type tabs:
Part 1 — On your Joomla 3 site (source)
- 1Install MuRu-Migration_J3_v2.3.0.zip via Extensions > Manage > Install > Upload Package File.
- 2Open Components > MuRu Migration.
- 3Export in order and save each file: Users tab (Export All) -> Articles tab (Export All Categories, then All Articles) -> Menus tab (Export All Site Menus) -> Modules tab (Export All).
Part 2 — On your Joomla 4/5/6 site (target)
- 1Install MuRu-Migration_J4-5-6_v2.3.0.zip via System > Install > Extensions.
- 2Open Components > MuRu Migration.
- 3Import in the same order -- Users, then Articles, then Menus, then Modules -- ticking Dry run (preview only) first for each one, then unticking it and importing for real.
- 4After the last import: set the home page under Menus, review module positions (J3's Protostar positions differ from J4+'s Cassiopeia), and clear the Joomla cache under System > Clear Cache.
Rules that make it work
Order matters: users → articles/categories → menus → modules. Later imports remap references using ID maps recorded by earlier ones.
Always dry run first -- it reports missing module types/components and anything that can't be remapped before anything is written.
Overwrite is only for re-running an import to update existing items (matched by ID/alias/username). Leave it off for a first migration.
Files exported from any version import into any other version -- J3 ↔ J4 ↔ J5 ↔ J6.
