{"record":{"id":"893e53eda0446841","repo":"ruvnet/RuView","slug":"plugin-directories-were-configured-but-homecore-s","errorCode":null,"errorMessage":"plugin directories were configured, but homecore-server was built without --features wasmtime","messagePattern":"plugin directories were configured, but homecore-server was built without --features wasmtime","errorType":"console","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"v2/crates/homecore-server/src/plugins.rs","lineNumber":67,"sourceCode":"}\n\nimpl ServerPlugins {\n    /// Start the complete plugin subsystem. Any configured package that fails\n    /// discovery, trust verification, compilation, or setup aborts startup.\n    pub async fn start(hc: HomeCore, config: PluginConfig) -> Result<Self> {\n        let native = Arc::new(PluginRegistry::new(InProcessRuntime));\n        for registration in NATIVE_PLUGINS {\n            let (manifest, plugin) =\n                (registration.create)().context(\"compiled-in native plugin factory failed\")?;\n            native\n                .load(manifest, plugin, hc.clone())\n                .await\n                .context(\"compiled-in native plugin setup failed\")?;\n        }\n\n        #[cfg(not(feature = \"wasmtime\"))]\n        if !config.directories.is_empty() {\n            anyhow::bail!(\n                \"plugin directories were configured, but homecore-server was built without \\\n                 --features wasmtime\"\n            );\n        }\n        #[cfg(not(feature = \"wasmtime\"))]\n        if config.allow_unsigned || !config.trusted_publishers.is_empty() {\n            anyhow::bail!(\n                \"plugin trust options were configured, but homecore-server was built without \\\n                 --features wasmtime\"\n            );\n        }\n\n        #[cfg(feature = \"wasmtime\")]\n        let wasm = load_wasm_plugins(&hc, &config).await?;\n\n        let mut receiver = hc.states().subscribe();\n        let dispatch_native = native.clone();\n        #[cfg(feature = \"wasmtime\")]","sourceCodeStart":49,"sourceCodeEnd":85,"githubUrl":"https://github.com/ruvnet/RuView/blob/4685618388a5e49fad5b3005806f3bdd6a7c25c3/v2/crates/homecore-server/src/plugins.rs#L49-L85","documentation":"Anyhow bail in the plugin manager: config.directories is non-empty (WASM plugin directories were requested) but the binary was compiled without the `wasmtime` cargo feature, so load_wasm_plugins and the entire WASM runtime are absent. Native (compiled-in) plugins still load; only the directory-based WASM path is unavailable. The server refuses to start rather than silently ignoring configured directories.","triggerScenarios":"Passing plugin-directory options to a homecore-server build without --features wasmtime; prebuilt/minimal binaries (default feature set) combined with a config that lists plugin dirs; CI artifacts that dropped optional features.","commonSituations":"Deployment config written for a full-featured build applied to a slim build; Docker images built from minimal feature sets; upgrading to a package that stopped enabling wasmtime by default.","solutions":["Rebuild with cargo build --release --features wasmtime (add to Dockerfile/CI)","Or remove the plugin-directory entries from the config so the non-wasmtime build starts with native plugins only","Keep build features and deployment config in one place (same Dockerfile/compose file) so they cannot drift"],"exampleFix":"# before\ncargo build --release\n# ./homecore-server --plugin-dir /etc/homecore/plugins\n# error: plugin directories were configured, but built without --features wasmtime\n\n# after\ncargo build --release --features wasmtime\n# ./homecore-server --plugin-dir /etc/homecore/plugins","handlingStrategy":"validation","validationCode":"# preflight: only pass plugin dirs to binaries that support them\nif [[ -n \"$PLUGIN_DIR\" ]] && ! homecore-server --version 2>/dev/null | grep -q wasmtime; then\n  echo 'binary built without wasmtime; dropping --plugin-dir' >&2\n  unset PLUGIN_DIR\nfi","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Ship plugin dirs only with wasmtime-enabled builds; encode the pairing in one compose/Dockerfile","Add a startup smoke test that runs the real flag set against the real binary","Document the build features of each distributed artifact next to its download"],"tags":["rust","plugins","wasmtime","feature-flags","build-config"],"backgroundTag":null,"analyzedSha":"4685618388a5e49fad5b3005806f3bdd6a7c25c3","analyzedAt":"2026-08-16T06:09:40.886Z","schemaVersion":2},"datasetVersion":"2026-08-16T08:17:34.114Z"}