{"record":{"id":"ffbb6e1307f9cb35","repo":"nautechsystems/nautilus_trader","slug":"livenodeconfig-plugins-requires-host-side-plug-in","errorCode":null,"errorMessage":"LiveNodeConfig.plugins requires host-side plug-in support; nautilus-plugin is the guest SDK only","messagePattern":"LiveNodeConfig\\.plugins requires host-side plug-in support; nautilus-plugin is the guest SDK only","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/live/src/node/mod.rs","lineNumber":323,"sourceCode":"        };\n        node.load_configured_plugins()?;\n\n        log::info!(\"LiveNode built successfully with kernel config\");\n\n        Ok(node)\n    }\n\n    /// Loads and registers plug-ins declared on the node config.\n    ///\n    /// # Errors\n    ///\n    /// Returns an error when plug-ins are configured without host-side support.\n    pub(crate) fn load_configured_plugins(&self) -> anyhow::Result<()> {\n        if self.config.plugins.is_empty() {\n            return Ok(());\n        }\n\n        anyhow::bail!(\n            \"LiveNodeConfig.plugins requires host-side plug-in support; nautilus-plugin is the guest SDK only\"\n        )\n    }\n\n    /// Loads and registers one plug-in instance.\n    ///\n    /// # Errors\n    ///\n    /// Returns an error because dynamic plug-in hosting lives in the host-side integration.\n    #[expect(\n        clippy::needless_pass_by_value,\n        reason = \"signature mirrors the host-enabled API\"\n    )]\n    pub fn add_plugin(&mut self, config: PluginConfig) -> anyhow::Result<()> {\n        #[cfg(feature = \"plugin\")]\n        config.validate_runtime_support(self.config.plugins.len())?;\n        #[cfg(not(feature = \"plugin\"))]\n        let _ = config;","sourceCodeStart":305,"sourceCodeEnd":341,"githubUrl":"https://github.com/nautechsystems/nautilus_trader/blob/18893faf8b356be3320add8de2f861b0b647cf06/crates/live/src/node/mod.rs#L305-L341","documentation":"Configured plug-ins can only load when the host supports plug-ins. In this build, nautilus-plugin is only the guest SDK, so if any plugins are present in LiveNodeConfig, load_configured_plugins (called during build) fails unconditionally rather than silently skipping them.","triggerScenarios":"LiveNodeConfig.plugins is non-empty while the crate lacks host-side plug-in support (no `plugin` feature / nautilus-plugin host runtime); invoked via LiveNode::build.","commonSituations":"Reusing a config that listed plug-ins from an environment where the plugin host feature was enabled; expecting nautilus-plugin to provide hosting when it only offers the guest SDK.","solutions":["Clear LiveNodeConfig.plugins or remove plugin entries from the config file.","Enable host-side plug-in support (the `plugin` feature) if the build is supposed to host plug-ins.","Integrate plug-in functionality directly rather than through the plug-in mechanism."],"exampleFix":"// before\nlet config = LiveNodeConfig { plugins: vec![plugin_cfg], .. };\n// after\nlet config = LiveNodeConfig { plugins: vec![], .. }; // no host plug-in support","handlingStrategy":"validation","validationCode":"assert!(config.plugins.is_empty(), \"plugins configured but host plug-in support is unavailable\");","typeGuard":null,"tryCatchPattern":"if let Err(e) = node.build() { if e.to_string().contains(\"host-side plug-in\") { /* drop plugins and rebuild */ } }","preventionTips":["Only populate LiveNodeConfig.plugins when host plug-in support is compiled in.","Remember nautilus-plugin is the guest SDK, not a host runtime.","Keep plugin config in environment-specific files."],"tags":["rust","plugins","feature-flag"],"backgroundTag":"feature-not-enabled","analyzedSha":"18893faf8b356be3320add8de2f861b0b647cf06","analyzedAt":"2026-09-08T20:49:34.690Z","contentChangedAt":"2026-09-08T20:49:34.690Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}