{% extends "baseTemplate/index.html" %} {% load static %} {% comment %} /plugins/available — plugin directories on disk, plus the upload form. "Available" means "a directory under the plugins root with a manifest this panel could parse". There is no remote marketplace and this page does not imply one. Reading a manifest never imports code, so opening this page is safe even when a directory contains something hostile. {% endcomment %} {% block title %}Add a plugin{% endblock %} {% block styles %} {% include "pluginHolder/_styles.html" %} {% endblock %} {% block content %}
{{ pluginsRoot|json_script:"cpPluginsRoot" }} {{ maxUploadMB|json_script:"cpPluginMaxUploadMB" }}

Add a plugin

Upload a plugin archive, or install a directory an operator has already placed in {{ pluginsRoot }}.

Installed plugins
{% include "pluginHolder/_warning.html" %}

Upload a plugin archive

A ZIP containing the plugin directory, or its contents with plugin.json at the top level. Maximum {{ maxUploadMB }} MB. The archive is hashed and checked against the SHA-256 you supply before it is unpacked, and it is installed disabled — uploading never runs plugin code.

·
Get this from the plugin author over a channel you trust, then run sha256sum <file> to compare. It proves the file arrived intact; it does not prove the code is safe.

Found in the plugins directory

Nothing in {{ pluginsRoot }} yet.

·
Installed Invalid Incompatible
needs declares no hooks
Directory SHA-256:
Declares ; this panel is {{ panelVersion }}.
Installing records the plugin and its checksum. It does not run any code.
{% endblock %} {% block scripts %} {% endblock %}