influxdata/influxdb · error · PluginError

plugin installation is disabled; plugins must already exist…

Error message

plugin installation is disabled; plugins must already exist in the configured plugin directory

What it means

PluginError::PluginInstallationDisabled is thrown when a plugin install/download is requested but the node was started with plugin installation disabled; plugins must already exist in the configured plugin directory. It enforces the server configuration that disallows runtime fetching.

Solutions

  1. Restart the node with plugin installation enabled (enable the corresponding server option/env).
  2. Manually place the plugin file in the configured plugin directory on the node's filesystem.
  3. Use a deployment pipeline to distribute plugin files instead of runtime installs.

Example fix

// before
influxdb3 serve --plugin-dir /plugins
// after
influxdb3 serve --plugin-dir /plugins --plugin-installation-enabled
Defensive patterns

Strategy: fallback

Validate before calling

// check server config before attempting install
const installsEnabled = serverConfig.plugin_installation_enabled === true;
if (!installsEnabled) provisionPluginManually(name);

Try / catch

if let Err(PluginError::PluginInstallationDisabled) = result {
    copy_plugin_into_plugin_dir(name)?;
}

Prevention

When it happens

Trigger: Calling the plugin installation/download API while the server runs without plugin-installation enabled (e.g. started without the flag/env that enables downloading from the repository).

Common situations: Production deployments hardened by disabling remote installs; operators try to install a new plugin at runtime and hit this; config drifted from staging where installs were allowed.

Related errors


AI-assisted analysis of influxdata/influxdb@06200ef96b (2026-09-19). Data as JSON: /api/errors/475dd8a01c0c9215. Report an issue: GitHub.

Appendix: source

Thrown at influxdb3_processing_engine/src/plugins.rs:68

    #[error("reading plugin file: {0}")]
    ReadPluginError(#[from] std::io::Error),

    #[error("error executing plugin: {0}")]
    PluginExecutionError(#[from] influxdb3_py_api::error::ExecutePluginError),

    #[error("invalid cron syntax: {0}")]
    InvalidCronSyntax(#[from] cron::error::Error),

    #[error("cron schedule never triggers: {0}")]
    CronScheduleNeverTriggers(String),

    #[error("non-schedule plugin with schedule trigger: {0}")]
    NonSchedulePluginWithScheduleTrigger(String),

    #[error("error fetching plugin from repository: {0} {1}")]
    FetchingFromRepository(reqwest::StatusCode, String),

    #[error(
        "plugin installation is disabled; plugins must already exist in the configured plugin directory"
    )]
    PluginInstallationDisabled,

    #[error("Join error, please report: {0}")]
    JoinError(#[from] tokio::task::JoinError),

    #[error("Node not configured with plugin directory")]
    NoPluginDir,

    #[error(
        "Path traversal detected: plugin filename '{0}' attempts to access files outside the plugin directory"
    )]
    PathTraversal(String),
}

#[derive(Debug, Clone)]
pub struct ProcessingEngineEnvironmentManager {

View on GitHub (pinned to 06200ef96b)