influxdata/influxdb · error · PluginError

Node not configured with plugin directory

Error message

Node not configured with plugin directory

What it means

PluginError::NoPluginDir is thrown when the node is not configured with a plugin directory but an operation requires one (e.g. resolving, installing, or listing local plugins). The server's plugin directory option was not set.

Solutions

  1. Start the server with the plugin directory configured (e.g. influxdb3 serve --plugin-dir /path/to/plugins).
  2. Ensure the directory exists and is readable/writable by the server process.
  3. If running in a container, mount a volume and pass the flag in the service definition.

Example fix

// before
influxdb3 serve --node-id node1
// after
influxdb3 serve --node-id node1 --plugin-dir /var/lib/influxdb3/plugins
Defensive patterns

Strategy: validation

Validate before calling

// before invoking plugin APIs, verify server config
const pluginDir = serverConfig.plugin_dir;
if (!pluginDir) throw new Error('server started without --plugin-dir');
if (!fs.existsSync(pluginDir)) fs.mkdirSync(pluginDir, {recursive: true});

Prevention

When it happens

Trigger: Invoking plugin install/lookup while the server was started without --plugin-dir (or equivalent env), so the processing engine has no directory to operate on.

Common situations: Fresh deployments missing the plugin-dir flag; systemd/docker units omitting the volume mount and flag; operators assume a default plugin directory exists.

Understand the failure class

Background: "missing required config value" errors: why libraries refuse to start when a configuration key is empty, unset, or blank — this error's family across 48 libraries.

Related errors


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

Appendix: source

Thrown at influxdb3_processing_engine/src/plugins.rs:76

    #[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 {
    pub plugin_dir: Option<PathBuf>,
    pub virtual_env_location: Option<PathBuf>,
    pub package_manager: Arc<dyn PythonEnvironmentManager>,
    pub plugin_dir_only: bool,
    pub plugin_repo: Option<String>,
}

pub(crate) fn run_schedule_event_source(

View on GitHub (pinned to 06200ef96b)