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
CMSPluginauto-injected$app/$dbto 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 |
|
|
Joomla 6.1 released |
14 Apr 2026 |
Done |
|
|
Joomla 6.2 released |
13 Oct 2026 |
Scheduled for today |
|
|
Joomla 6.3 |
~Apr 2027 |
Inferred from 6-month cadence |
|
|
Joomla 7.0 + 6.4 bridge |
~Oct 2027 |
Inferred from policy |
|
|
Joomla 5.x security support ends |
12 Oct 2027 |
Official |
|
|
Joomla 6.x bugfix support ends |
17 Oct 2028 |
Official |
|
|
Joomla 6.x security support ends |
16 Oct 2029 |
Official |
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 |
|---|---|---|---|
|
Generic core API to rate-limit actions such as login attempts, usable by 3rd-party code |
In Planning |
New API you can adopt |
|
|
A layer that decouples templates from a specific CSS framework |
Looking for Volunteers |
High for template and layout code |
|
|
Filter content by field values in menu items or user filters, front and back end |
In Planning |
Medium (custom fields integration) |
|
|
Combine workflows with the scheduler, e.g. time-based featuring |
In Progress |
Medium (workflow-aware components) |
|
|
Multiple sites in one instance with shared content |
Looking for Volunteers |
Potentially high, if it lands |
|
|
Better core defaults to cut repetitive extension code |
Looking for Volunteers |
High (less boilerplate) |
|
|
Consistent APIs for Categories, Tags, Custom Fields |
Looking for Volunteers |
High (integration code may change) |
|
|
Admin actions without full page reload |
In Progress |
Medium (admin list views, JS) |
|
|
Frontend "edit one language version" mode |
Looking for Volunteers |
Low–medium |
|
|
Same, in the administrator |
Looking for Volunteers |
Low–medium |
|
|
Role-based UI presets |
Looking for Volunteers |
Low |
|
|
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 |
|---|---|---|---|
|
|
Plugins reading |
Inject in |
|
|
|
Plugins extending these base classes |
Same getters, injected in |
|
|
Static methods removed from ~30 core module helpers |
Code calling e.g. |
|
|
|
Legacy non-namespaced |
Fatal "class not found"; not covered by the compat plugin |
The namespaced class, e.g. |
|
|
Application classes: |
Old config/session/input access |
|
|
|
Editor-button plugins: public |
Code calling core editors-xtd plugins directly |
Private |
|
|
JS: |
Old admin/frontend scripts |
|
|
|
|
Extensions rendering that layout directly — an escaping (security) risk |
Escape yourself, or let |
|
|
Model methods: |
Calls to these methods |
|
|
|
Form fields |
Form XML and code using them |
|
|
|
Legacy OTP methods in |
Old 2FA integrations (broken since 4.2 anyway) |
Joomla MFA |
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 applicationFactory::getSession()→ get the session from the applicationFactory::getMailer()→ create a mailer from the injected factory or containerUser::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 legacyon…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 oldhelpers/classes (Removed and B/C). - Grep your JavaScript for
Joomla.JText,Joomla.popupWindowandwindow.Calendar. - Audit form XML for
radiobasic,logcreatorandUploaddirs, and any direct rendering of thejoomla.form.field.urllayout (escape output yourself). - Drop UCM and direct
Table::$_db/getDbo()usage (5.4 deprecations). - Finder plugins: pass the database into the
Adapterconstructor (#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)
- Updates & Upgrades: deprecation policy (PROD2022/011)
- 6.4 to 7.0 Upgrade Notes
- 6.4 to 7.0: Removed and Backward Incompatibility
- 6.4 to 7.0: New Deprecations
- 6.4 to 7.0: Compatibility Plugin
- 5.3 to 5.4: New Deprecations (items removed in 7.0)
- Software Release Cycle
- Technical Requirements (6.x)
Official — Joomla Developer Network & API
- Project Roadmap (updated 2 Oct 2026)
- Joomla Product Strategy v1.0.3
- Planned Features (6.x / 7.x)
- Nightly builds
- API: CMSPlugin
- API: PluginInterface
- GitHub: joomla/joomla-cms pull requests (individual PRs linked inline)
- GitHub: joomla-framework/di 4.0.0 release
Official — community & events
- Joomla Community Magazine: Joomla 8 Sprint – Next steps
- JWC 2026 session: Ready for Joomla 7 – Make your extension compatible
- JWC 2026 session: Joomla Unpacked – roadmap & strategy
Third-party
