If you're building or maintaining anything on Joomla — an extension, a template, a custom component — the Joomla 7 breaking changes list is the most important document you'll read this year. Unlike minor version bumps, Joomla 7 is a major release: backward compatibility is intentionally broken to clean up years of deprecated code and modernize the platform.

The Joomla Maintenance Team has already begun the removal process. The June 6, 2026 sprint cleared over 100 deprecation notices in a single day, with more sprints scheduled. This article tracks every significant breaking change as the 7.0-dev branch evolves — bookmark it and check back regularly.

Last updated: August 2026. As new sprints land, this list will be updated.


How to Read This List

Breaking changes are grouped by category. Each entry shows:

  • What was removed — the deprecated API, class, or method
  • Modern replacement — what you should use instead
  • Impact — how likely this is to affect your extension

Impact ratings: 🔴 High (affects most extensions) | 🟡 Medium (common in older code) | 🟢 Low (niche usage)


1. Static Factory Class Removals

The biggest category. JFactory and its family of static accessor methods are gone in Joomla 7. These were deprecated in Joomla 4.0 and have now reached their end of life.

JFactory Method Removals 🔴 High Impact

  • JFactory::getUser()Factory::getApplication()->getIdentity() or DI injection
  • JFactory::getDbo() → Inject DatabaseInterface via constructor
  • JFactory::getApplication()Factory::getApplication() or DI injection
  • JFactory::getConfig()Factory::getApplication()->getConfig()
  • JFactory::getDocument()Factory::getApplication()->getDocument()
  • JFactory::getLanguage()Factory::getApplication()->getLanguage()
  • JFactory::getSession()Factory::getApplication()->getSession()
  • JFactory::getCache()Factory::getContainer()->get(CacheControllerFactoryInterface::class)
  • JFactory::getMailer()Factory::getContainer()->get(MailerFactoryInterface::class)

J-Prefixed Helper Classes 🔴 High Impact

All legacy J-prefixed class aliases are removed:

  • JHtmlJoomla\CMS\HTML\HTMLHelper
  • JTextJoomla\CMS\Language\Text
  • JRouteJoomla\CMS\Router\Route
  • JUriJoomla\CMS\Uri\Uri
  • JLogJoomla\CMS\Log\Log
  • JMailJoomla\CMS\Mail\Mail
  • JLoader → Not needed (PSR-4 autoloading handles class loading)
  • JDateJoomla\CMS\Date\Date
  • JFileJoomla\Filesystem\File
  • JFolderJoomla\Filesystem\Folder
  • JPathJoomla\Filesystem\Path

2. MVC Architecture Changes

Legacy MVC Class Names 🔴 High Impact

  • JModelLegacyJoomla\CMS\MVC\Model\BaseModel or ListModel
  • JModelListJoomla\CMS\MVC\Model\ListModel
  • JModelFormJoomla\CMS\MVC\Model\FormModel
  • JModelAdminJoomla\CMS\MVC\Model\AdminModel
  • JControllerLegacyJoomla\CMS\MVC\Controller\BaseController
  • JControllerFormJoomla\CMS\MVC\Controller\FormController
  • JViewLegacy / JViewHtmlJoomla\CMS\MVC\View\HtmlView

jimport() Calls 🟡 Medium Impact

jimport() is completely removed. Joomla uses PSR-4 autoloading — simply delete any jimport() calls and use proper use statements instead.


3. Plugin System Changes

Legacy Plugin Event Method Signatures 🟡 Medium Impact

Joomla 7 removes the old compatibility layer for loose plugin event signatures. All plugins must use typed event objects:

// Old — breaks on Joomla 7
public function onContentBeforeSave($context, $article, $isNew) {}

// Modern — required in Joomla 7
use Joomla\CMS\Event\Content\ContentBeforeSaveEvent;
public function onContentBeforeSave(ContentBeforeSaveEvent $event) {
    $context = $event->getContext();
    $article = $event->getItem();
}

JPlugin Base Class 🟡 Medium Impact

JPluginJoomla\CMS\Plugin\CMSPlugin


4. Database Layer Changes

Database query methods remain — but the database object must be injected via DI, not fetched via JFactory::getDbo(). Ensure $db comes from constructor injection throughout your extension.


5. Form and Field Changes

JForm Legacy Methods 🟡 Medium Impact

  • JFormJoomla\CMS\Form\Form
  • JFormFieldJoomla\CMS\Form\FormField
  • JFormRuleJoomla\CMS\Form\FormRule

6. HTTP and Request Handling

JInput / JRequest Removals 🟡 Medium Impact

  • JInputJoomla\CMS\Input\Input (access via $app->input)
  • JRequest → Completely removed

7. PHP Version Requirements

Joomla 7 requires PHP 8.1+ (exact minimum TBC). Remove any PHP 7.x compatibility shims from your extension code.


How to Check Your Extension

Static Search

grep -r "JFactory\|JHtml\|JText\|JRoute\|JUri\|jimport\|JPlugin\|JModel\|JController\|JView" /path/to/extension/

Enable Joomla Deprecation Logging

System → Global Configuration → System → Debug System: Yes + Log Deprecated API: Yes. Review /logs/deprecated.php after browsing your extension.

Test Against 7.0-dev

The most reliable method. See our guide: How to Set Up a Joomla 7 Dev Environment.


Is This List Complete?

Not yet — the 7.0-dev branch is actively evolving. More sprints are planned, each removing additional deprecated code. The Joomla Manual is the authoritative source. This article will be updated after each major sprint.

Stay tuned to thepixel.dev for ongoing Joomla 7 coverage. Already tackled JFactory? Read: JFactory is Dead: How to Modernize Your Extension.