{"record":{"id":"83e1c1f910cadfdf","repo":"nautechsystems/nautilus_trader","slug":"livenode-add-plugin-requires-host-side-plug-in-su","errorCode":null,"errorMessage":"LiveNode::add_plugin requires host-side plug-in support; nautilus-plugin is the guest SDK only","messagePattern":"LiveNode::add_plugin 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":343,"sourceCode":"        )\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;\n\n        anyhow::bail!(\n            \"LiveNode::add_plugin requires host-side plug-in support; nautilus-plugin is the guest SDK only\"\n        )\n    }\n\n    /// Returns a thread-safe handle to control this node.\n    #[must_use]\n    pub fn handle(&self) -> LiveNodeHandle {\n        self.handle.clone()\n    }\n\n    /// Adds a callback for supported typed external messages.\n    ///\n    /// While [`run`](Self::run) or [`run_with_mode`](Self::run_with_mode) services external ingress,\n    /// the node invokes processors in registration order before normal inbound streaming filters\n    /// for JSON or MessagePack payloads when [`msgbus::BusPayloadType::is_typed_message`] returns\n    /// `true`. Other encodings are skipped with a warning. Each callback receives the decoded\n    /// concrete value as [`Any`], allowing it to downcast to the concrete payload type. External\n    /// egress is suppressed while the processors run, so synchronous publications remain local.","sourceCodeStart":325,"sourceCodeEnd":361,"githubUrl":"https://github.com/nautechsystems/nautilus_trader/blob/18893faf8b356be3320add8de2f861b0b647cf06/crates/live/src/node/mod.rs#L325-L361","documentation":"LiveNode::add_plugin always errors when host-side plug-in support is absent; this build only has the nautilus-plugin guest SDK, so no plug-in can ever be registered. The method exists for API compatibility but is unsupported here.","triggerScenarios":"Calling LiveNode::add_plugin(config) on a node built without the `plugin` (host-side) feature.","commonSituations":"Following plug-in documentation or examples while running a Rust build without host plug-in support; assuming add_plugin works because the method exists.","solutions":["Do not call add_plugin in this build; remove the call.","Enable host-side plug-in support (compile with the plugin host feature) if plug-ins are required.","Fold the plug-in's behavior directly into the node code instead."],"exampleFix":"// before\nnode.add_plugin(plugin_config)?;\n// after\n// removed: plug-ins unsupported without host-side plugin support","handlingStrategy":"type-guard","validationCode":"if !cfg!(feature = \"plugin\") { /* add_plugin unsupported in this build */ }","typeGuard":"fn supports_plugins() -> bool { cfg!(feature = \"plugin\") }","tryCatchPattern":null,"preventionTips":["Check compiled features before using plug-in APIs.","Do not copy plug-in registration code from plug-in-enabled example projects.","Treat nautilus-plugin as guest SDK only unless host support is confirmed."],"tags":["rust","plugins","unsupported-operation"],"backgroundTag":"unsupported-operation","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"}