Automatically remove obsolete extensions and files related to Akeeba extensions for Joomla.
Download the latest version from the GitHub releases page. It's a file called something like file_magiceraser-1.0.0.zip.
Go to your Joomla site's backend. On Joomla 3: go to Extensions, Install, Upload & Install. On Joomla 4: go to System, Install, Extensions, Upload Package File.
Drag the ZIP file you downloaded in the upload area.
Wait for a few seconds while the cleanup is in progress.
Ignore any warnings and the error that the file could not be installer. The latter is expected. Nothing is meant to be installed on your site. We are simply using Joomla's pre-installation script feature to run our custom clean-up script and then tell Joomla to abort the installation of our (fake) package. This way the Magic Eraser ()meant to clean up leftover extensions) doesn't leave any leftover extensions of its own behind!
Our extensions have been around for many years, some going as far back as Joomla 1.0. Since Joomla 1.6 it's been possible to upgrade your site in place to the next Joomla version without a migration. This means that over time your site may have accumulated some leftover extensions from many years ago. This can happen despite our best efforts to remove obsolete extensions when installing a new version of our software. Some reasons this can happen are:
- The obsolete extension predates Joomla's ability to uninstall obsolete extensions when installing an update.
- The uninstallation of the obsolete extension had failed in the past due to file/folder ownership or permissions.
- The uninstallation of the obsolete extension had failed in the past due to an internal Joomla error or a server timeout.
- You had installed extensions separately instead of as part of a package type extension, or your installation predates Joomla's support for package extensions.
- You restored a backup which included the obsolete extension's files and used Joomla's Discover feature to re-install it.
- The files of the extension were removed BUT the database record in the
#__extensionstable is not.
The obsolete extensions are typically ‘orphaned’ i.e. they do not belong to a package. Since update information is only provided for a package as a whole Joomla does not know if this extension is compatible with a newer version of Joomla or PHP (in fact, they are not!). When updating Joomla 3.10 or later, either to a newer point version in the same version family (e.g. 3.10.0 to 3.10.1) or to a new minor or major version (e.g. 3.10 to 4.0, 4.0 to 4.1 etc) these ‘orphaned’, obsolete extensions appear as potential upgrade issues and you are asked to disable or remove them. This is a waste of time, especially if you are trying to update dozens or hundreds of sites.
We went through all of our releases from 2011 onwards, i.e. all releases compatible with at least Joomla 1.6, and made a list of all extensions we had previously included in our software which are no longer relevant. As of August 2021 there were 159 items. Giving you this kind of massive list would also be a waste of your time. Instead, we wrote an automated script to figure out which of these 159 items is still installed on your site and remove them.
For what it's worth, we tried this on our own sites first. Our own site had a whopping 29 items still installed — though inactive — from that list. Five of these items were just database records; the files were already removed. That is to say, it doesn't matter how meticulous you are on your site administration. Leftover extensions will most definitely accumulate, like grime on your stove's extractor hood. Every so often you need to do a deep clean. Magic Eraser is the deep clean for the grime that could have come from our extensions.
You can also easily extend it to remove other extensions you know should no longer be installed on your sites. This is particularly useful if you have a number of sites based on the same extensions stack — a common approach used by web agencies — that you'd like to clean up.
You can tell Magic Eraser to remove any other extension, file or folder from your site, on top of its built-in list.
Create the file media/magiceraser.php on your site with the content similar to the following:
<?php
// Protect against direct access
defined('_JEXEC') or die;
$magicEraser = [
'extensions' => [
'com_example',
'pkg_example',
],
'files' => [
'media/example/foobar.php',
],
'folders' => [
'images/stuff_to_delete',
'cache'
],
];
?>The $magicEraser array contains the additional stuff to remove from your site. Each of the three keys has a different meaning. The keys are explained below.
When you follow the usage instructions above the media/magiceraser.php file is read and its contents are merged with the built-in list before any clean up action is taken. So simple!
A simple string array containing the extension names to remove. Each extension follows Joomla naming conventions, except for modules which are a bit different as you'll see below. The first few letters and underscore (prefix) tell us what kind of extension we are removing. Here are the supported types:
com_A component, e.g.com_example. This is identical to the component's folder undercomponentsand/oradministrator/components.plg_A plugin, e.g.plg_system_example. The prefix is followed by the folder, an underscore and the plugin name. The pluginplg_system_examplecorresponds to the plugin stored in theplugins/system/examplefolder of your site.mod_A site module, e.g.mod_examplewhich corresponds to the module stored in themodules/mod_examplefolder of your site.amod_An administrator module, e.g.amod_examplewhich corresponds to the module stored in theadministrator/modules/mod_examplefolder of your site.pkg_A package. The package name is something you need to get from the extensions provide and usually corresponds to how they name their ZIP file. All our (Akeeba) extension packages follow the formatpkg_something-VERSION-QUALIFIER.zipwherepkg_somethingis what you need to use, VERSION is the version number and QUALIFIER is eithercore/profor extensions that have a free and paid version; OR completely missing for extensions which only have a freww version.lib_A library package. The package name is something you need to get from the extensions provide and usually corresponds to how they name their ZIP file.files_A files package (this includes translations!). The package name is something you need to get from the extensions provide and usually corresponds to how they name their ZIP file.tpl_A template package e.g.tpl_somethingwhich corresponds to a template stored either in thetemplates/somethingfolder or theadministrator/templates/somethingfolder.
Special cases:
files_fof40will remove FOF 4.x from your site. It will remove all dependency information before uninstalling the package. If any extension is still using FOF 4 it will break. Only use if you've uninstalled all FOF 4-based extensions and can't get FOF 4 to uninstall.files_fefwill remove FEF for Joomla from yoru site. It will remove all dependency information before uninstalling the package. If any extension is still using FEF it will break. Only use if you've uninstalled all FEF-based extensions and can't get FEF to uninstall.
List the files to remove, as paths relative to your site's root. You cannot remove files above your site's root.
List the folders to remove, as paths relative to your site's root. You cannot remove folders above your site's root.
Magic Eraser will remove the following extensions, folders and files by default if they are present on your site.
com_cmsupdateAkeeba CMS Update. Interim solution to add missing features to Joomla Update.plg_system_akgeoipAkeeba GeoIP provider plugin. Made obsolete by the license change of the MaxMind IP geolocation library it was using.pkg_yubikeyAkeeba YubiKey authentication plugins, version 1. Superseded by Akeeba LoginGuard.pkg_yubikey_pluginsAkeeba YubiKey authentication plugins, version 2. Superseded by Akeeba LoginGuard.plg_system_oneclickactionOne Click Action plugin. Shipped with versions of our extensions which sent out emails to remind you of a new version being available.
lib_f0fF0F 2.x (F-zero-F). That was a more up-to-date version of FOF 2.x we were shipping while Joomla 3 was including a much older version of FOF 2.lib_fof30FOF 3.x, old versionsfile_fof30FOF 3.x, more recent versionsfile_akeebastrapperAkeeba Strapper. Provided Bootstrap 2.0 styling on Joomla 1.5, 1.6, 1.7 and 2.5 for our extensions.
Please note that the obsolete version of FOF 2.x shipped with Joomla 3 itself and which is found in libraries/fof IS NOT removed by Magic Eraser. This is automatically removed by Joomla itself when upgrading to Joomla 4. If you want to remove it you need to create the media/magiceraser.php file and add libraries/fof to the folders array.
/media/akeeba_strapperAkeeba Strapper, if the files extension is no longer in the database (safe fallback)./libraries/f0fF0F 2.x, if the library extension is no longer in the database (safe fallback)./libraries/fof30FOF 3.x, if the library or files extension is no longer in the database (safe fallback).
/cli/akeeba-update.phpAkeeba Backup automatic updates script. We no longer support unattended updates (too risky)./cli/admintools-update.phpAdmin Tools automatic updates script. We no longer support unattended updates (too risky)./cli/ats-upgrade.phpAkeeba Ticket System automatic updates script. We no longer support unattended updates (too risky)./cli/docimport-upgrade.phpDocImport automatic updates script. We no longer support unattended updates (too risky)./cli/ars-update.phpAkeeba Release System automatic updates script. We no longer support unattended updates (too risky)./cli/cmsupdate.phpAkeeba CMS Update script to update Joomla automatically. The extension is discontinued./cli/admintools-dbrepair.phpAdmin Tools, Database Repair script. This feature is now part of the Admin Tools system plugin./cli/docimport-update.phpDocImport categories update script. This feature was removed due to routing issues in cross-article links that have to do with how Joomla itself works under the hood.
amod_akadminBackup status (admin module). This was from before we contributed support for quickicon plugins in Joomla 1.7.plg_jmonitoring_akeebabackupIntegration with the JMonitoring component; the third party component is no longer available.plg_system_akeebaupdatecheckAkeeba Backup update check plugin. We no longer support sending update information by email; there are many services which do that and more.plg_system_aklazyLazy backup scheduling plugin. It was unreliable on bigger or rarely visited sites, thus removed a long time ago.plg_system_srpSystem Restore Points plugin. It was no longer reliable after the changes made in Joomla 1.6 regarding extensions handling and was remove a long time ago.
amod_atjupgradeJoomla update status admin module. We contributed this feature to Joomla itself.plg_quickicon_atoolsjupdatecheckJoomla update status quickicon module. We contributed this feature to Joomla itself.plg_system_atoolsjupdatecheckAdmin Tools Joomla update check plugin. We contributed this feature to Joomla itself.plg_system_atoolsupdatecheckAdmin Tools update check plugin. We no longer support sending update information by email; there are many services which do that and more.plg_system_admintoolsactionlogObsolete version of the Admin Tools integration with Joomla User Actions Log. Replaced with a proper actionlog plugin.
plg_ats_alphauserpointsAlpha User Points integration; the third party extension is no longer maintained.plg_ats_akeebasubsIntegration with Akeeba Subscriptions; the Akeeba Subscriptions extension is no longer maintained.plg_ats_akeebasubslegacyIntegration with Akeeba Subscriptions, older versions; the Akeeba Subscriptions extension is no longer maintained.
plg_sh404sefextplugins_com_docimportsh404SEF integration plugin. We only support core Joomla routing.mod_docimport_searchCustom search module (Universal Search). We discotninued this feature.
plg_ars_bleedingedgediffBleeding Edge diff plugin. This feature has been removed.plg_ars_bleedingedgematurityBleeding Edge maturity plugin. This feature has been removed.plg_ars_taintingZIP tainting plugin (not publicly released, available on GitHub). This feature has been removed.plg_sh404sefextplugins_com_arssh404SEF integration with Akeeba Release System. We only support core Joomla routing.file_arsAutomatic Akeeba Release System update CLI scripts. We no longer support unattended updates (too risky).mod_arsdlidDownload ID module. Made obsolete by the Download ID content plugin and the fact that Custom modules can use said content plugin.plg_system_arsjedSystem plugin for Joomla Extensions Directory automatic extension update integration. JED never launched this feature.
Please note that Akeeba Subscriptions is End of Life. Magic Eraser removes all modules and plugins included in Akeeba Subscriptions 1.x through 7.x, but not those included in Akeeba Subscriptions 8.x. This allows you to uninstall the Akeeba Subscriptions package cleanly.
If you are still using an older version of Akeeba Subscriptions please make sure that you have an installable ZIP file for that version available. After running Magic Eraser you will need to reinstall that ZIP file. Again, please note that Akeeba Subscriptions is End of Life and the old versions are not fully compatible with Joomla 3.9/3.10 and are definitely NOT compatible with Joomla 4.
amod_akeebasubsmod_aktaxcountryplg_akeebasubs_aceshopplg_akeebasubs_acymailingplg_akeebasubs_adminemailsplg_akeebasubs_affemailsplg_akeebasubs_ageverificationplg_akeebasubs_agoraplg_akeebasubs_agreetoeuplg_akeebasubs_agreetotosplg_akeebasubs_atscreditslegacyplg_akeebasubs_autocityplg_akeebasubs_canalyticscommerceplg_akeebasubs_cbplg_akeebasubs_cbsyncplg_akeebasubs_ccinvoicesplg_akeebasubs_communityaclplg_akeebasubs_constantcontactplg_akeebasubs_customfieldsplg_akeebasubs_docmanplg_akeebasubs_easydiscussplg_akeebasubs_freshbooksplg_akeebasubs_frontenduseraccessplg_akeebasubs_gacommerceplg_akeebasubs_invoicesplg_akeebasubs_iploggerplg_akeebasubs_ipropertyplg_akeebasubs_jceplg_akeebasubs_jomsocialplg_akeebasubs_joomlaprofilesyncplg_akeebasubs_jugaplg_akeebasubs_jxjomsocialplg_akeebasubs_k2plg_akeebasubs_kunenaplg_akeebasubs_mailchimpplg_akeebasubs_mijoshopplg_akeebasubs_needslogoutplg_akeebasubs_ninjaboardplg_akeebasubs_phocadownloadplg_akeebasubs_projectforkplg_akeebasubs_projectfork4plg_akeebasubs_recaptchaplg_akeebasubs_redshopplg_akeebasubs_redshopusersyncplg_akeebasubs_resellerplg_akeebasubs_samplefieldsplg_akeebasubs_slavesubsplg_akeebasubs_sqlplg_akeebasubs_subscriptionemailsdebugplg_akeebasubs_tiendaplg_akeebasubs_tracktimeplg_akeebasubs_userdeleteplg_akeebasubs_vmplg_akeebasubs_vm2plg_akeebasubs_zohoinvoiceplg_akpayment_2checkoutplg_akpayment_2conewplg_akpayment_allopassplg_akpayment_alphauserpointsplg_akpayment_authorizenetplg_akpayment_be2billplg_akpayment_beanstreamplg_akpayment_braintreeplg_akpayment_cardstreamplg_akpayment_cashuplg_akpayment_ccavenueplg_akpayment_clickandbuyplg_akpayment_cmcicplg_akpayment_deltapayplg_akpayment_dwollaplg_akpayment_epaydkplg_akpayment_eselectplusplg_akpayment_ewayplg_akpayment_ewayrapid3plg_akpayment_exactplg_akpayment_gocardlessplg_akpayment_googlecheckoutplg_akpayment_ifthenplg_akpayment_mercadopagoplg_akpayment_mobilpayccplg_akpayment_mobilpaysmsplg_akpayment_moipplg_akpayment_moipassinaturasplg_akpayment_monerisplg_akpayment_nochexplg_akpayment_noneplg_akpayment_offlineplg_akpayment_pagseguroplg_akpayment_payfastplg_akpayment_paymillplg_akpayment_paymilldss3plg_akpayment_paypalplg_akpayment_paypalpaymentsproplg_akpayment_paypalproexpressplg_akpayment_paypointplg_akpayment_paysafeplg_akpayment_payuplg_akpayment_postfinancechplg_akpayment_przelewy24plg_akpayment_rbkmoneyplg_akpayment_realexplg_akpayment_robokassaplg_akpayment_saferpayplg_akpayment_sagepayplg_akpayment_scnetplg_akpayment_scnetintegratedplg_akpayment_skrillplg_akpayment_stripeplg_akpayment_suomenverkkomaksutplg_akpayment_upayplg_akpayment_verotelplg_akpayment_vivaplg_akpayment_wepayplg_akpayment_worldpayplg_akpayment_zarinpalplg_ccinvoicetags_akeebasubsplg_sh404sefextplugins_com_akeebasubsplg_system_as2cocollationplg_system_affiliatesessiongenerationplg_system_aslogoutuserplg_system_aspaypalcollationplg_system_idevaffiliateplg_system_postaffiliateproplg_user_aslogoutuserplg_user_asresetform
These should be removed when removing the package. We try to uninstall the individual extensions included in the package as a safe fallback.
plg_user_yubikeyplg_authentication_yubikeyplg_twofactorauth_yubikeytotpplg_twofactorauth_yubikeyplusplg_twofactorauth_u2f
These should be removed when removing the Akeeba CMS Update component. We try to uninstall the individual extensions included with the component as a safe fallback.
plg_system_cmsupdateemailPlugin to send Joomla update availability emailsplg_quickicon_cmsupdateQuickicon plugin to show Joomla update status