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

  1. Verify the exact plugin key on the plugins list page and correct the URL.
  2. Confirm the plugin directory exists in the expected plugins location and its manifest is valid so discovery includes it.
  3. Reinstall the plugin (restore directory / install extras) then reload the page.
  4. 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

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


AI-assisted analysis of ArchiveBox/ArchiveBox@74564b2822 (2026-08-28). Data as JSON: /api/errors/4446fac17306fbd1. Report an issue: GitHub.