zellij-org/zellij · error · anyhow::Error

Plugin is not stored in memory

Error message

Plugin is not stored in memory

What it means

Error "Plugin is not stored in memory" thrown in zellij-org/zellij.

Solutions

  1. Ensure the plugin is loaded/started before sending it messages.
  2. Handle plugin unload events so no messages are sent to gone plugins.

When it happens

Trigger: Occurs at zellij-server/src/plugins/plugin_loader.rs:165 when the operation fails: "Plugin is not stored in memory". Currently there is no defensive handling preventing or contextualizing this failure before it surfaces.

Common situations: Race between plugin unload and a pending message or command.


AI-assisted analysis of zellij-org/zellij@5cb5df5cce (2026-08-19). Data as JSON: /api/errors/90e2028719358148. Report an issue: GitHub.

Appendix: source

Thrown at zellij-server/src/plugins/plugin_loader.rs:165

        self.loading_indication.override_previous_error();
        let wasm_bytes = self.plugin_config.resolve_wasm_bytes(&self.plugin_dir)?;
        let timer = std::time::Instant::now();
        let module = Module::new(&self.engine, &wasm_bytes)?;
        log::info!(
            "Loaded plugin '{}' in {:?}",
            self.plugin_config.path.display(),
            timer.elapsed()
        );
        Ok(module)
    }
    fn load_module_from_memory(&mut self) -> Result<Module> {
        let module = self
            .plugin_cache
            .lock()
            .unwrap()
            .remove(&self.plugin_config.path) // TODO: do we still bring it back later?
            // maybe we can forgo this dance?
            .ok_or(anyhow!("Plugin is not stored in memory"))?;
        Ok(module)
    }
    fn load_plugin_instance(
        &mut self,
        mut store: Store<PluginEnv>,
        instance: &Instance,
    ) -> Result<()> {
        let err_context = || format!("failed to load plugin from instance {instance:#?}");
        let main_user_instance = instance.clone();
        let start_function = instance
            .get_typed_func::<(), ()>(&mut store, "_start")
            .with_context(err_context)?;
        let load_function = instance
            .get_typed_func::<(), ()>(&mut store, "load")
            .with_context(err_context)?;
        let mut workers = HashMap::new();
        for function_name in instance
            .exports(&mut store)

View on GitHub (pinned to 5cb5df5cce)