Pumpkin-MC/Pumpkin · error · LoaderError

Missing plugin entrypoint

Error message

Missing plugin entrypoint

What it means

This is LoaderError::EntrypointMissing. It means the plugin library loaded and metadata was found, but the expected plugin entrypoint symbol/function could not be resolved from the dynamic library. Without the entrypoint the loader cannot instantiate the plugin.

Solutions

  1. Define and export the entrypoint using the current Pumpkin plugin entrypoint macro
  2. Rebuild the plugin against the matching Pumpkin version (symbol names can change between versions)
  3. Ensure the entrypoint function is pub and not stripped (check build profile for LTO/strip settings)
  4. Verify with nm/objdump that the expected entrypoint symbol is present in the built library

Example fix

null
Defensive patterns

Strategy: validation

Validate before calling

// verify the entrypoint symbol exists in the built library
// nm -D target/release/libmyplugin.so | grep <entrypoint_symbol>

Type guard

null

Try / catch

match loader.load(path) {
    Err(LoaderError::EntrypointMissing) => eprintln!("plugin exports no entrypoint; check the #[plugin] entry macro"),
    Ok(p) => enable(p),
    Err(e) => return Err(e),
}

Prevention

When it happens

Trigger: Raised when the loader looks up the entrypoint symbol in the loaded library and it is absent — e.g. the plugin exports no entry function or it was renamed/not exported publicly.

Common situations: Plugin author forgot to mark the entrypoint with the required macro/export; plugin built for an older API where the entrypoint symbol name differed; LTO/stripping removing the symbol.

Understand the failure class

Background: "not installed", "pip install", "required for": how missing-dependency errors surface across open-source libraries — this error's family across 34 libraries.

Related errors


AI-assisted analysis of Pumpkin-MC/Pumpkin@8d4639e25a (2026-09-09). Data as JSON: /api/errors/319b37593802cfd5. Report an issue: GitHub.

Appendix: source

Thrown at crates/pumpkin/src/plugin/loader/mod.rs:45

    /// Check if this loader can handle the given file
    fn can_load(&self, path: &Path) -> bool;

    fn unload(&self, data: Box<dyn Any + Send + Sync>) -> PluginUnloadFuture<'_>;

    /// Checks if the plugin can be safely unloaded.
    fn can_unload(&self) -> bool;
}

/// Unified loader error type
#[derive(Error, Debug)]
pub enum LoaderError {
    #[error("Failed to load library: {0}")]
    LibraryLoad(String),

    #[error("Missing plugin metadata")]
    MetadataMissing,

    #[error("Missing plugin entrypoint")]
    EntrypointMissing,

    #[error("Plugin initialization failed: {0}")]
    InitializationFailed(String),

    #[error("Runtime error: {0}")]
    RuntimeError(String),

    #[error("Invalid loader data")]
    InvalidLoaderData,

    #[error(
        "Plugin was built for an incompatible API version. Please rebuild it against this Pumpkin build."
    )]
    ApiVersionMissing,

    #[error(
        "Plugin API version mismatch (plugin {plugin_version}, server {server_version}). Please rebuild it against this Pumpkin build."

View on GitHub (pinned to 8d4639e25a)