unionlabs/union · error

plugin not found

Error message

plugin not found

What it means

Under 'voyager plugin interest', voyager loads the config, resolves each plugin entry's name via get_plugin_info (spawning/inspecting the plugin binary), and linearly searches for the user-supplied plugin_name. If no configured plugin's resolved name equals the argument, it errors 'plugin not found'. The comparison uses the plugin's self-reported name, not the config key or file name, which is why mismatches are common.

Source

Thrown at voyager/src/main.rs:190

                .build()
                .await?;

            info!("starting relay service");

            voyager.run().await;
        }
        Command::Plugin(cmd) => match cmd {
            PluginCmd::Interest {
                plugin_name,
                message,
            } => {
                let plugin_config = get_voyager_config()?
                    .plugins
                    .into_iter()
                    .try_find(|plugin_config| {
                        <anyhow::Result<_>>::Ok(plugin_name == get_plugin_info(plugin_config)?.name)
                    })?
                    .ok_or(anyhow!("plugin not found"))?;

                let (filter, plugin_name) = make_filter(get_plugin_info(&plugin_config)?)?;

                let result = run_filter(
                    &filter,
                    plugin_name,
                    serde_json::from_str::<serde_json::Value>(&message)?.into(),
                );

                match result {
                    Ok(JaqFilterResult::Take(tag)) => {
                        println!("interest (take, {tag})");
                    }
                    Ok(JaqFilterResult::Copy(tag)) => {
                        println!("interest (copy, {tag})");
                    }
                    Ok(JaqFilterResult::NoInterest) => println!("no interest"),
                    Err(()) => println!("failed"),

View on GitHub (pinned to 031785bb6d)

Solutions

  1. List the actual plugin names first (e.g. 'voyager plugin list' / the list subcommand) and use the exact resolved name.
  2. Open your config file and check the plugins array; ensure the plugin you meant is present and its name matches what you pass.
  3. If the plugin is missing, add its entry (path + config) to the config's plugins list.
  4. Re-run with the corrected name; note the match is exact and case-sensitive.

Example fix

# before
voyager --config cfg.json plugin interest --plugin-name voyager-client-eth --message '{...}'

# after — use the resolved plugin name shown by `plugin list`
voyager --config cfg.json plugin list
voyager --config cfg.json plugin interest --plugin-name client-eth --message '{...}'
Defensive patterns

Strategy: validation

Validate before calling

# validate the name against the config before invoking
jq -e --arg n "$PLUGIN" '.plugins[] | select(.name == $n)' voyager-config.json >/dev/null \
  || { echo "plugin $PLUGIN not in config"; exit 1; }
voyager --config voyager-config.json plugin interest --plugin-name "$PLUGIN" --message "$MSG"

Type guard

fn plugin_configured(config: &serde_json::Value, name: &str) -> bool {
    config["plugins"].as_array().map(|ps| ps.iter().any(|p| p["name"] == name)).unwrap_or(false)
}

Try / catch

let plugin = get_voyager_config()?.plugins.into_iter().find(|p| resolved_name(p)? == plugin_name)
    .with_context(|| format!("plugin {plugin_name:?} not found — check `plugin list` for exact names"))?;

Prevention

When it happens

Trigger: Running 'voyager plugin interest --plugin-name <name> --message <json>' where <name> does not match get_plugin_info(plugin_config)?.name for any entry in config.plugins — e.g. using the binary filename, the config key, or a renamed plugin.

Common situations: Plugin renamed between versions while scripts keep the old name; using the plugin's crate/binary name instead of its registered name; a plugin binary missing on disk so its info resolution fails differently; typos.

Related errors


AI-assisted analysis of unionlabs/union@031785bb6d (2026-08-16). Data as JSON: /api/errors/3a2c6801b99a3d23. Report an issue: GitHub.