Joomla Component
JoomShift
Export anything, import anywhere.
Export and import your site’s content between any two Joomla installations — modules, menus, articles, categories, custom fields, and users.

The problem
Joomla has no built-in way to move content between sites. Migrating today usually means recreating modules by hand, copy-pasting menu structures, re-entering articles one at a time, or fighting phpMyAdmin exports that break the moment two sites have slightly different database schemas.
What JoomShift does
JoomShift replaces all of that with select → export → upload → import, through a single tabbed admin screen.
Editions & requirements
JoomShift ships as two separate installable packages that share the exact same JSON export format — a file exported from one can be imported into the other, in any direction (3→5, 5→3, 4→6, etc.).
| J4/5/6 Edition | J3 Edition | |
|---|---|---|
| Joomla versions | 4.0+, 5.x, 6.x | 3.4 – 3.10 |
| PHP required | 8.1+ | 5.6+ |
| Database | MySQL 5.7+ / MariaDB 10.3+ | MySQL 5.5+ / MariaDB 10.0+ |
| Architecture | Modern namespaced MVC | Classic legacy MVC |
| Dark mode | Yes — adapts to Joomla native dark theme | — (J3 admin has no dark theme) |
| Custom Fields | Yes — full support | Not available |
| Modules / Menus / Articles / Users | Yes | Yes |
Feature breakdown
One panel per data type, matching the component’s own admin UI.
- Export one, several, or all modules in a single action; filter by client (Site/Administrator)
- Preserves full config: params, position, ordering, access level, language, publish state
- Preserves menu assignment mappings
- Automatic SP Page Builder detection — exports
#__sppagebuildercontent formod_sppagebuilderso layouts survive the move - Overwrite toggle matches by ID or title+type instead of duplicating
- Validates module type is installed on destination before importing; skips unsupported ones with a clear warning
- Export selected items or an entire menu type in one click
- Preserves parent-child hierarchy, item type, link, component, ordering, params, access rules
- Automatic menu-type creation if destination doesn’t have the target menu
- ID remapping keeps parent-child relationships correct even when IDs collide
- Supports every menu item type: component links, URLs, aliases, separators, headings
- Component validation — checks the target component is installed before importing; skips with a warning if missing
- Export selected articles, everything, one category, or categories-only (structure without content)
- Preserves intro/full text, metadata, URLs, featured flag, category assignment
- Category hierarchy rebuilt correctly on import, not flattened
- ZIP-based media export — real image files (not base64), covering intro/full images, inline
<img>tags, and CSS background images (JPG, PNG, GIF, WebP, SVG, BMP, ICO up to 10MB) - Accepts both .zip and legacy .json exports
- Custom Fields (J4/5/6 only) — captures every field group/definition, category restrictions, and actual saved values including multi-select/checkbox fields; media-type fields bundled into the same ZIP; recreates missing fields/groups on import automatically
- Export selected users, or all users filtered by group
- Preserves name, username, email, password hash, registration date, last visit, blocked status
- Users can log in immediately after import — password hashes carried over as-is
- Exports/restores user group assignments and the group definitions themselves
- Exports/restores profile data (
#__user_profiles) - Overwrite toggle matches by ID/username/email; duplicates auto-skipped without it
- Cross-version compatibility via dynamic column-filtering (
filterColumns()) against the destination schema - Pagination on every tab: 20/50/100/250 rows per page, built for large sites
- Automatic batch export for anything over 500 items, split into sequential downloads to avoid memory/timeout limits
- Native Joomla ACL (
core.manage) gating, CSRF protection, image-only upload allowlist with path-traversal protection - Tabbed UI with stat cards, search/filter bars, drag-and-drop upload, native Joomla toolbar integration
How it works
Exporting
- Open Components → JoomShift
- Pick a tab: Modules, Menus, Articles, or Users
- Search/filter to narrow the list if needed
- Check items and Export Selected, or use Export All (scoped by client/menu type/category/group)
- Batches download automatically if scope exceeds 500 items
- A .json or .zip file downloads
Importing
- On the destination site, open Components → JoomShift, matching tab
- Click Import (toolbar or tab button)
- Drag the exported file onto the drop zone
- Optionally enable Overwrite existing items
- Click Start Import
- JoomShift reports exactly what was imported, updated, or skipped — and why
Typical migration
Joomla 3 → Joomla 5, step by step
- Install the J3 Edition on the old site
- Export Modules, Menus, Articles (with categories/custom fields where applicable), and Users
- Install the J4/5/6 Edition on the new Joomla 5 site
- Import each file in any order — dependencies and schema differences are resolved automatically
Security
Permissions
Every action gated behind Joomla’s native ACL (core.manage on the component)
Forms
CSRF protection on every form submission via Joomla’s session token system
Uploads
Media imports restricted to an explicit image-extension allowlist; extracted paths validated to stay inside the intended directory
Cleanup
Temporary files from import/export cleaned up automatically
Specifications
| Edition | Joomla | PHP | Database |
|---|---|---|---|
| J4/5/6 Edition | 4.0.0+ / 5.x / 6.x | 8.1+ | MySQL 5.7+ / MariaDB 10.3+ |
| J3 Edition | 3.4.0 – 3.10 | 5.6+ | MySQL 5.5+ / MariaDB 10.0+ |
Installation
- Download the ZIP package matching your Joomla version
- Joomla admin: System → Install → Extensions (J4/5/6) or Extensions → Extension Manager → Upload Package File (J3)
- Upload and install
- Find it under Components → JoomShift
FAQ
Yes — export from any supported version and import into any other; JoomShift adapts to schema differences automatically.
Get the edition that matches your Joomla version
Download J3 Edition
Both packages read and write the same JSON format, so you can mix editions across a migration.
