octobercms/october · error · ApplicationException
Plugin [$name] not found
Error message
Plugin [$name] not found
What it means
UpdateManager::uninstallPlugin($name) first checks pluginManager->hasPlugin($name) and throws 'Plugin [$name] not found' when false — you cannot uninstall something the plugin manager does not see as installed. hasPlugin resolves by the Author.Plugin code against registered (filesystem) plugins, so a wrong code/casing or an already-deleted plugin directory both fail here. Note this check runs before any composer rollback/removal and before deletePlugin().
Source
Thrown at modules/system/classes/updatemanager/ManagesPlugins.php:56
}
// Remote
else {
$details = $this->requestPluginDetails($code);
$composerCode = $details['composer_code'] ?? '';
$composerVersion = $details['composer_version'] ?? '';
}
return [$composerCode, $composerVersion];
}
/**
* uninstallPlugin attempts to remove the plugin using composer before
* deleting from the filesystem
*/
public function uninstallPlugin($name)
{
if (!$this->pluginManager->hasPlugin($name)) {
throw new ApplicationException("Plugin [$name] not found");
}
// Remove via composer
$composer = ComposerManager::instance();
$composerCode = $this->pluginManager->getComposerCode($name);
if ($composerCode && $composer->hasPackage($composerCode)) {
$this->rollbackPlugin($name);
$composer->remove([$composerCode]);
}
$this->pluginManager->deletePlugin($name);
}
/**
* requestPluginDetails looks up a plugin from the update server
*/
public function requestPluginDetails(string $name): arrayView on GitHub (pinned to b608633a7e)
Solutions
- Confirm the exact code with `php artisan plugin:list` (or by listing plugins/*/*) and retry with matching casing
- If the directory is already gone, there is nothing to uninstall — clean up leftovers (permissions/DB records) instead of re-running remove
- Restore the plugin files (git checkout / reinstall) first if you need a clean uninstall that rolls back versions
- Use `php artisan plugin:refresh Author.Plugin` if the goal is re-installing its database structures
Example fix
// before — code doesn't match the registered plugin cd && php artisan plugin:remove acme.blog // after — exact Author.Plugin casing as registered php artisan plugin:remove Acme.Blog
Defensive patterns
Strategy: validation
Validate before calling
// Check registration state before attempting removal
$code = 'Acme.Blog';
if (!\System\Classes\PluginManager::instance()->hasPlugin($code)) {
// not installed — check the filesystem to see if files were already deleted
if (!is_dir(plugins_path('acme/blog'))) {
// nothing to remove; clean up any leftover DB rows instead
}
return;
}
\System\Classes\UpdateManager::instance()->uninstallPlugin($code); Try / catch
try {
\System\Classes\UpdateManager::instance()->uninstallPlugin($name);
} catch (\October\Rain\Exception\ApplicationException $ex) {
if (str_contains($ex->getMessage(), 'not found')) {
$this->error("Plugin {$name} is not installed — nothing to remove.");
return 1;
}
throw $ex;
} Prevention
- List installed plugins (`php artisan plugin:list`) before scripting removals
- Always uninstall through artisan, never delete plugin directories by hand
- Match Author.Plugin casing exactly — the manager resolves codes case-sensitively
When it happens
Trigger: `php artisan plugin:remove Author.Plugin` where the plugins/author/plugin directory is absent (already manually deleted), the code or casing doesn't match, or the plugin namespace is unregistered due to boot failure.
Common situations: Plugin files deleted via FTP/git but DB/artisan still asked to remove it; author directory casing differs from the code (acme.Blog vs Acme.Blog); a plugin disabled/removed by another admin moments earlier.
Related errors
- Package [$name] not found
- Plugin configuration file plugin.yaml is not found for the p
- Too much recursion! Check for circular dependencies in your
- system::lang.server.response_not_found
- system::lang.updates.plugin_version_not_found
AI-assisted analysis of octobercms/october@b608633a7e (2026-08-21).
Data as JSON: /api/errors/d97c16d40bfc56ff.
Report an issue: GitHub.