{"record":{"id":"ad39e109ddf2b96d","repo":"kestra-io/kestra","slug":"missing-required-options-plugins-or-environmen-ad39e1","errorCode":null,"errorMessage":"Missing required options '--plugins' or environment variable 'KESTRA_PLUGINS_PATH","messagePattern":"Missing required options '--plugins' or environment variable 'KESTRA_PLUGINS_PATH","errorType":"validation","errorClass":"CommandLine.ParameterException","httpStatus":null,"severity":"error","filePath":"cli/src/main/java/io/kestra/cli/commands/plugins/PluginListCommand.java","lineNumber":34,"sourceCode":"    name = \"list\",\n    description = \"List all plugins already installed\"\n)\npublic class PluginListCommand extends AbstractCommand {\n    @Spec\n    CommandLine.Model.CommandSpec spec;\n\n    @Option(names = { \"--core\" }, description = \"Also write core tasks plugins\")\n    private boolean core = false;\n\n    @Inject\n    ApplicationContext applicationContext; // force injection of beans in AbstractCommand\n\n    @Override\n    public Integer call() throws Exception {\n        super.call();\n\n        if (this.pluginsPath == null) {\n            throw new CommandLine.ParameterException(\n                this.spec.commandLine(), \"Missing required options '--plugins' \" +\n                    \"or environment variable 'KESTRA_PLUGINS_PATH\"\n            );\n        }\n\n        List<RegisteredPlugin> plugins = core ? pluginRegistry.plugins() : pluginRegistry.externalPlugins();\n        plugins.forEach(registeredPlugin -> stdOut(registeredPlugin.toString()));\n\n        return 0;\n    }\n}\n","sourceCodeStart":16,"sourceCodeEnd":46,"githubUrl":"https://github.com/kestra-io/kestra/blob/823fada9274c4f9c251ea0a516460a4f7d958032/cli/src/main/java/io/kestra/cli/commands/plugins/PluginListCommand.java#L16-L46","documentation":"Thrown by 'kestra plugins list' when no plugins path is configured. Unlike install, list always requires a path; if pluginsPath is null the command throws a picocli ParameterException referencing --plugins or KESTRA_PLUGINS_PATH. Same wording (and same missing closing quote) as the install command.","triggerScenarios":"User runs 'kestra plugins list' (or with --core) without --plugins set and without KESTRA_PLUGINS_PATH in the environment; this.pluginsPath is null and the guard fires.","commonSituations":"Running plugins list on a server where the path is set via config file but the command reads only the option/env, env var not exported in the current shell, or a fresh container without the variable.","solutions":["Set KESTRA_PLUGINS_PATH=/path/to/plugins in the environment before running.","Pass --plugins /path/to/plugins on the kestra root command.","Confirm the directory exists and contains the unpacked external plugins."],"exampleFix":"# before\nkestra plugins list\n# after\nexport KESTRA_PLUGINS_PATH=/app/plugins\nkestra plugins list","handlingStrategy":"validation","validationCode":"if (this.pluginsPath == null) {\n  throw new IllegalStateException('Set --plugins or KESTRA_PLUGINS_PATH before listing plugins');\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Export KESTRA_PLUGINS_PATH in the shell or container.","Pass --plugins explicitly when invoking the CLI.","Confirm the directory exists before listing."],"tags":["cli","plugins","list","usage","configuration"],"backgroundTag":null,"analyzedSha":"823fada9274c4f9c251ea0a516460a4f7d958032","analyzedAt":"2026-08-14T06:15:17.947Z","schemaVersion":2},"datasetVersion":"2026-08-14T10:17:34.591Z"}