ArchiveBox/ArchiveBox · warning · Http404
Plugin not found: {key}
Error message
Plugin not found: {key} What it means
plugin_detail_view looks up a plugin by key from get_filesystem_plugins(); when the key is absent it raises Http404('Plugin not found: {key}'). Django converts this to a 404 page. The view requires superuser first, so only authenticated admins browsing plugin detail pages hit this.
Source
Thrown at archivebox/plugins/views.py:379
rows["Name"].append("(no plugins found)")
rows["Source"].append("-")
rows["Path"].append(mark_safe("<code>abx_plugins/plugins/</code> or <code>data/custom_plugins/</code>"))
rows["Hooks"].append("-")
rows["Config"].append("-")
return TableContext(
title="Installed plugins",
table=rows,
)
@render_with_item_view
def plugin_detail_view(request: HttpRequest, key: str, **kwargs) -> ItemContext:
assert is_superuser(request), "Must be a superuser to view configuration settings."
plugin = get_filesystem_plugins().get(key)
if plugin is None:
raise Http404(f"Plugin not found: {key}")
plugin_name = str(plugin["name"])
config = plugin.get("config") or {}
properties = config.get("properties") or {}
machine_admin_url = get_machine_admin_url()
docs_url = get_plugin_docs_url(plugin_name)
summary_section: SectionData = {
"name": "Summary",
"description": mark_safe(
str(format_html('<code>{}</code><br/><a href="{}">Plugin documentation</a>', plugin["path"], docs_url)),
),
"fields": {
"id": key,
"name": plugin_name,
"source": plugin["source"],
},
"help_texts": {},View on GitHub (pinned to 74564b2822)
Solutions
- Verify the exact plugin key on the plugins list page and correct the URL.
- Confirm the plugin directory exists in the expected plugins location and its manifest is valid so discovery includes it.
- Reinstall the plugin (restore directory / install extras) then reload the page.
- If the plugin was intentionally removed, discard the stale bookmark/link.
Example fix
// before (url) /admin/plugins/detail/singlefile/ # removed plugin // after /admin/plugins/detail/ # list valid keys, e.g. .../detail/pdf/)
Defensive patterns
Strategy: validation
Validate before calling
key = 'pdf' # from URL
from archivebox.plugins.views import plugin_detail_view # discovery source
from archivebox.misc.plugins import get_filesystem_plugins
if key not in get_filesystem_plugins():
abort_link(key) Type guard
def plugin_available(key: str) -> bool:
return key in get_filesystem_plugins() Try / catch
try:
return plugin_detail_view(request, key=key)
except Http404:
return redirect('/admin/plugins/') Prevention
- Generate plugin links from the discovered plugin list, not hardcoded keys.
- After upgrades, refresh bookmarks/links to removed or renamed plugins.
- Fix broken plugin manifests so discovery registers them.
When it happens
Trigger: Visiting the plugin detail admin URL with a key that is not among currently discovered filesystem plugins — typos in key, plugin directory deleted/renamed, plugin failing discovery (invalid manifest) so it never registers.
Common situations: Bookmark to a plugin removed in an upgrade; plugin directory not present because extras/dependencies not installed; plugin discovery error (broken pyproject/manifest) excluding it from get_filesystem_plugins(); case-sensitive key mismatch in URL.
Related errors
- Invalid page ({page_number}): {err}
- Valid credentials but User does not have permission (make su
- Invalid ArchiveResult multipart upload: {err}
- Either tag_name or tag_id is required
- Crawl not found
AI-assisted analysis of ArchiveBox/ArchiveBox@74564b2822 (2026-08-28).
Data as JSON: /api/errors/4446fac17306fbd1.
Report an issue: GitHub.