Joomla 3 to Joomla 5 Site Migration
Joomla 3 reached EOL in August 2023. Joomla 4 and 5 use new architecture (PSR-4, Namespaces, DI Container) incompatible with Joomla 3 extensions. Migration requires updating all extensions and rewriting custom code.
Migration Strategy
Option 1: Staged Update — J3 → J4 → J5. Pre-Update Check tool helps identify incompatible extensions at each step.
Option 2: Clean J5 Installation — install J5 from scratch, migrate only content and configuration. Template and extensions — new compatible versions. Faster if many outdated extensions.
Pre-Update Check
Components → Joomla! Update → Pre-Update Check. Shows:
- Extensions without J4/J5-compatible version
- Deprecated PHP functions in custom code
- Obsolete database tables
J3 → J4: Direct Update
# 1. Via web updater (if all extensions compatible)
# Components → Joomla! Update → install Joomla 4.x
# 2. Fix incompatible extensions before updating
# Find J4-compatible versions or remove
# 3. After update
php cli/joomla.php database:update
J4 → J5: Update
# Joomla 5 requires PHP 8.1+
php -v # check version
# Update via updater
# Components → Joomla! Update → Joomla 5.x
Content Migration on Clean Installation
// Export content from J3
// Use com_content data export or direct SQL dump
// jos_content table structure is identical in J3/J4/J5 — direct import works
// But: some fields changed, need verification
// Import via CLI:
php cli/joomla.php import:content --file /tmp/content-export.sql
Templates: Joomla 3 → 5
J3 templates are not compatible with J5. J5 requires templates based on new Bootstrap 5 API or Cassiopeia.
Popular template builders with J5 support:
- Helix Ultimate — open source
- Astroid Framework
- YOOtheme Pro
Custom Extension Migration
Custom Joomla 3 components require refactoring:
// J3 (outdated):
$db = JFactory::getDbo();
$user = JFactory::getUser();
$app = JFactory::getApplication();
// J5 (correct):
$db = \Joomla\CMS\Factory::getDbo();
$user = \Joomla\CMS\Factory::getApplication()->getIdentity();
$app = \Joomla\CMS\Factory::getApplication();
// Namespaces
namespace MyCompany\Component\Catalog\Site\Controller;
use Joomla\CMS\MVC\Controller\BaseController;
Timeline
| Site Type | Duration |
|---|---|
| Information site (content only, standard extensions) | 3–5 days |
| Medium site with several custom extensions | 2–4 weeks |
| Large portal with com_virtuemart / K2 Pro / custom code | 1–2 months |







