Skip to main content
Average reading time: 10 minutes, 14 seconds
Please Rate
Decorative image

Joomla 7.0 is expected in October 2027, and its breaking changes are already being merged and documented. There is no alpha yet, but the official developer manual already has a "6.4 to 7.0" upgrade guide listing removed APIs. If your extensions still lean on legacy plugin listeners, static module helpers, Factory::getConfig() or the old helpers/ classes, now is the time to fix them.

Attention: Joomla 7 has not been released, and no alpha is available yet. This article covers what is known as of 13 October 2026, and everything here is subject to change: dates, features, removed APIs and requirements. The official 7.0 upgrade notes say the same about their own content. Check the linked sources before you act on any detail.

At a glance

  • Release: majors ship every two years, in October of odd years — so 7.0 targets October 2027 (Software Release Cycle).
  • Upgrade path: only from the last 6.x minor, the 6.4 "bridge" release (same source; 6.4 to 7.0 guide).
  • Breaking changes: about two dozen removals are already documented, from CMSPlugin auto-injected $app/$db to legacy helper stubs (Removed and Backward Incompatibility).
  • Safety net: a new "Behaviour - Backward Compatibility 7" plugin replaces the Joomla 6 one (Compatibility Plugin).
  • Features: the official 7.x feature list includes multisite, automated workflows, custom-field filtering, a rate-limiting framework and an Ajax backend (Planned Features).
  • Not yet known: PHP/database minimums and the exact alpha dates.

Everything below is linked to the page it comes from. The 7.0 manual pages carry a warning that they can change at any time, so treat details as a snapshot as of today.

When is Joomla 7 coming?

The official release cycle puts a new major every two years, planned for October of an odd year, with a minor release every six months and patches roughly every six weeks (Software Release Cycle). The same page says each major gets four minors; the last one (x.4) is a bridge release with no new features, and an update to the next major can only be made from it.

Applied to the current series, that means:

Milestone

Date

Status

Source

Joomla 6.0 + 5.4 released

14 Oct 2025

Done

Roadmap

Joomla 6.1 released

14 Apr 2026

Done

Roadmap

Joomla 6.2 released

13 Oct 2026

Scheduled for today

Roadmap

Joomla 6.3

~Apr 2027

Inferred from 6-month cadence

Release Cycle

Joomla 7.0 + 6.4 bridge

~Oct 2027

Inferred from policy

Release Cycle, 6.4 to 7.0 guide

Joomla 5.x security support ends

12 Oct 2027

Official

Roadmap

Joomla 6.x bugfix support ends

17 Oct 2028

Official

Roadmap

Joomla 6.x security support ends

16 Oct 2029

Official

Roadmap

No official page gives a 7.0 release date yet; the October 2027 target follows from the published cycle. A Habr post on the registerListeners() removal also describes 7.0 as due in autumn 2027 (Habr). The 6.0 alphas started in late May 2025 for an October release (6.0 Alpha 2 report), so a similar 7.0 alpha window around mid-2027 is a reasonable expectation, not an announcement.

Upgrade path: sites must first move to the fully patched last minor of their series, then to the latest minor of the next major (Release Cycle). For 7.0 that means 6.4.x first. The fact that the manual's guide is titled "6.4 to 7.0" confirms 6.4 as the bridge (Updates & Upgrades).

What features are planned for 7.x

The 7.x feature list comes out of the "Joomla 8 Sprint", a 3-day Production Department event with 14 participants in September 2025 (Product Strategy; sprint recap). The official feature page describes the 7.x items as mid-term features that need more effort or include B/C breaks that can only land in a major (Planned Features). Status values below are as shown on that page today.

Feature

What it means

Status

Relevance for extension devs

Rate Limiting Framework

Generic core API to rate-limit actions such as login attempts, usable by 3rd-party code

In Planning

New API you can adopt

Framework-agnostic Templates/Design System

A layer that decouples templates from a specific CSS framework

Looking for Volunteers

High for template and layout code

Filter items by custom fields values

Filter content by field values in menu items or user filters, front and back end

In Planning

Medium (custom fields integration)

Automated Workflows

Combine workflows with the scheduler, e.g. time-based featuring

In Progress

Medium (workflow-aware components)

Multi-/Subsite Concept

Multiple sites in one instance with shared content

Looking for Volunteers

Potentially high, if it lands

Improve default code

Better core defaults to cut repetitive extension code

Looking for Volunteers

High (less boilerplate)

Standardize horizontal component API

Consistent APIs for Categories, Tags, Custom Fields

Looking for Volunteers

High (integration code may change)

Ajaxified Backend

Admin actions without full page reload

In Progress

Medium (admin list views, JS)

Site-wide Content-Language Filter

Frontend "edit one language version" mode

Looking for Volunteers

Low–medium

Backend-wide Content-Language filter

Same, in the administrator

Looking for Volunteers

Low–medium

UI-Presets for user roles

Role-based UI presets

Looking for Volunteers

Low

New default template

A visual evolution of the current template, not a rewrite; goal is a new one per major

Looking for Volunteers

Medium for template overrides

The page states plainly that the list is not final and that all dates are tentative (Planned Features). Several items have no named owner, so not all of them will necessarily ship in 7.0. The roadmap owner, Sigrid Gramlinger, is presenting an update at the Joomla World Conference on 16–18 October 2026, where a fresher version is promised (conference session).

What is already removed or changed in 7.0

The developer manual's "Removed and Backward Incompatibility" page for 6.4 → 7.0 lists the changes merged so far, each with its pull request and a replacement (source). The ones most likely to break third-party extensions:

Change

What breaks

Replacement

PR

CMSPlugin no longer auto-detects and fills $app / $db

Plugins reading $this->app or $this->db without injecting them

Inject in provider.php; use $this->getApplication() / $this->getDatabase()

#47881

$app/$db removed from ActionLogPlugin, $app from FieldsPlugin, $db from PrivacyPlugin

Plugins extending these base classes

Same getters, injected in provider.php

#47880, #47904

Static methods removed from ~30 core module helpers

Code calling e.g. ArticlesNewsHelper::getArticles() statically

bootModule(...)->getHelper(...) and call the instance method

#47891

Legacy non-namespaced helpers/ stubs removed (ContentHelper, CategoriesHelper, FieldsHelper, ContactHelperRoute, etc.)

Fatal "class not found"; not covered by the compat plugin

The namespaced class, e.g. \Joomla\Component\Content\Administrator\Helper\ContentHelper

#45856, #45857

Application classes: getCfg(), loadSession(), static purgeMessages(), console __get(), ApiApplication::getApiRouter() removed

Old config/session/input access

$app->get('sitename'), $app->getInput(), ApiRouter from the container

#45866

Editor-button plugins: public onDisplay() removed

Code calling core editors-xtd plugins directly

Private getButton() in core; use events

#47902

JS: Joomla.JText, Joomla.popupWindow, window.Calendar removed

Old admin/frontend scripts

Joomla.Text, native window.open, JoomlaCalendar.init()

#47928, #47908, #47907

joomla.form.field.url layout no longer escapes the URL

Extensions rendering that layout directly — an escaping (security) risk

Escape yourself, or let UrlField do it

#47929

Model methods: ArchiveModel::getData(), UpdateModel::createRestorationFile(), positionList()

Calls to these methods

getItems(), createUpdateFile(), no replacement

#47501

Form fields logcreator and TinyMCE Uploaddirs; BannerHelper class

Form XML and code using them

user, Folderlist, MediaHelper::isImage()

#47874, #47913, #47937

Legacy OTP methods in com_users models

Old 2FA integrations (broken since 4.2 anyway)

Joomla MFA

#47457

Smaller removals on the same page include the debug plugin's logger() (use Log::add()), two layout files, the --cassiopeia-link-color CSS property, string arguments to templates.thumb, and the build-time stub generator and PSR-12 converter.

Already scheduled earlier. Joomla 5.4 deprecated registerListeners() in CMSPlugin and PluginInterface for removal in 7.0; plugins should implement SubscriberInterface instead (5.3→5.4 deprecations; API docs). That page also lists the UCM classes (Joomla\CMS\UCM\*, Joomla\CMS\Table\Ucm) for removal in 7.0 without replacement, and direct use of Table::$_db plus getDbo()/setDbo() as deprecated. The API docs add that PluginInterface will stop extending DispatcherAwareInterface from 7.0 (API docs).

New deprecation in 7.0 so far: finder plugins extending the Indexer Adapter must receive the database in the constructor in provider.php (New Deprecations, #47906).

The compatibility plugin and the deprecation rules

In 7.0 the compatibility plugin introduced in Joomla 6.0 will be replaced by a new plugin named "Behaviour - Backward Compatibility 7" (Compatibility Plugin). It keeps some deprecated code alive, but only while it is enabled. The same page warns developers not to build their own plugins in the behaviour group, because that group may be removed later.

The plugin defines a constant, COMPAT_JOOMLA_7. Without it, these calls throw an exception instead of working (PR #47911; Removed and B/C):

  • Factory::getConfig() → get the config from the application
  • Factory::getSession() → get the session from the application
  • Factory::getMailer() → create a mailer from the injected factory or container
  • User::get() → read the property directly

Also moved into the compat plugin: the CMS Crypt package (use the framework's \Joomla\Crypt, hash_equals(), mb_strlen(), mb_substr()) and the radiobasic form field (use type="radio" layout="joomla.form.field.radio.switcher").

Why you have time, but not forever. Under production motion PROD2022/011, deprecated code stays available while the Joomla version that deprecated it is supported, so it is removed in the major after next at the earliest (Updates & Upgrades). Something deprecated in 5.x can therefore go in 7.0; where possible, removed code moves into the compat plugin for one more cycle. The catch: site owners can switch that plugin off, and the legacy helpers/ stubs are explicitly not in it.

Older-extension warning. The Habr post on the registerListeners() removal expects that extensions still running on the Joomla 3-style plugin layer will most likely stop working in Joomla 7 (Habr). That is a community reading, consistent with the official deprecation notice.

What we don't know yet

  • PHP and database minimums for 7.0. Not published. For reference, Joomla 6.x requires PHP 8.3.0 and recommends 8.4 (Technical Requirements), and the Framework 4 packages behind Joomla 6 raised their minimum to PHP 8.3 (joomla/di 4.0.0). Treat 8.3 as the floor and test on 8.4 and newer; anything higher for 7.0 would be speculation.
  • Alpha, beta and RC dates for 7.0. Not on the roadmap yet, which as of its 2 October 2026 update covers 5.4, 6.1 and 6.2 only (Roadmap).
  • Which 7.x features make it into 7.0. Many still list no owner and "Looking for Volunteers" (Planned Features).
  • The final removal list. The 7.0 manual pages are marked as subject to change at any time (New Deprecations).

Watch for updates from the World Conference sessions on 16–18 October 2026, including "Ready for Joomla 7: Make your extension compatible", whose abstract says Joomla 7 is approaching faster than many developers expect (session).

How to prepare your extensions now

The goal: your extension runs on Joomla 6 with the compatibility plugin disabled and no deprecation warnings. Code that passes that test today will mostly survive 7.0. Each step below maps to a documented change.

  • Test with the B/C plugin off. Disable "Behaviour - Backward Compatibility" on a 6.x test site and enable debug plus deprecation logging. Anything that breaks is on the 7.0 removal path (Compatibility Plugin).
  • Convert every plugin to SubscriberInterface. registerListeners() and the legacy on… method discovery are removed in 7.0 (5.4 deprecations).
  • Inject services in provider.php. Stop relying on auto-filled $this->app / $this->db (#47881).
  • Replace static calls. Factory::getConfig(), getSession(), getMailer(), $app->getCfg(), static module helpers, and old helpers/ classes (Removed and B/C).
  • Grep your JavaScript for Joomla.JText, Joomla.popupWindow and window.Calendar.
  • Audit form XML for radiobasic, logcreator and Uploaddirs, and any direct rendering of the joomla.form.field.url layout (escape output yourself).
  • Drop UCM and direct Table::$_db / getDbo() usage (5.4 deprecations).
  • Finder plugins: pass the database into the Adapter constructor (#47906).
  • Run CI on PHP 8.3 and 8.4+ until the 7.0 requirements are published.
  • Test the nightlies and every 7.0 beta. The release cycle says extension developers should test against all betas, because waiting for an RC is too late (Release Cycle; nightly builds).

Plugin: before and after

// Before: legacy listener + auto-filled properties (breaks in 7.0)
class PlgSystemFoo extends CMSPlugin
{
    protected $app;
    protected $db;

    public function onAfterRoute()
    {
        $sitename = $this->app->getCfg('sitename');
    }
}
// After: SubscriberInterface + injected services
namespace Acme\Plugin\System\Foo\Extension;

use Joomla\CMS\Plugin\CMSPlugin;
use Joomla\Database\DatabaseAwareTrait;
use Joomla\Event\SubscriberInterface;

final class Foo extends CMSPlugin implements SubscriberInterface
{
    use DatabaseAwareTrait;

    public static function getSubscribedEvents(): array
    {
        return ['onAfterRoute' => 'onAfterRoute'];
    }

    public function onAfterRoute(): void
    {
        $sitename = $this->getApplication()->get('sitename');
        $db       = $this->getDatabase();
    }
}
// services/provider.php
$plugin = new Foo(
    (array) PluginHelper::getPlugin('system', 'foo')
);
$plugin->setApplication(Factory::getApplication());
$plugin->setDatabase($container->get(DatabaseInterface::class));

return $plugin;

Module helper: static to instance

// Before (removed in 7.0)
$items = ArticlesNewsHelper::getArticles($params);

// After (example from the official 7.0 upgrade notes)
$items = Factory::getApplication()
    ->bootModule('mod_articles_news', 'site')
    ->getHelper('ArticlesNewsHelper')
    ->getArticles($params, Factory::getApplication());

The last snippet is copied from the manual's removal notes; the plugin example is a minimal illustration of the pattern the notes describe (Removed and B/C).

Sources

Official — developer manual (manual.joomla.org)

Official — Joomla Developer Network & API

Official — community & events

Third-party

Share this article