ipfs/kubo · error
error initializing plugins: %s
Error message
error initializing plugins: %s
What it means
Thrown by loadPlugins when plugins.Initialize() fails — the phase that runs each discovered plugin's Init with plugin context/process info. A plugin returning an error from its Init (or crashing the init pass) aborts daemon startup. The plugin loader guarantees all plugins initialize or none proceed.
Source
Thrown at cmd/ipfs/kubo/start.go:90
heapProfile = "ipfs.memprof"
)
type PluginPreloader func(*loader.PluginLoader) error
func loadPlugins(repoPath string, preload PluginPreloader) (*loader.PluginLoader, error) {
plugins, err := loader.NewPluginLoader(repoPath)
if err != nil {
return nil, fmt.Errorf("error loading plugins: %s", err)
}
if preload != nil {
if err := preload(plugins); err != nil {
return nil, fmt.Errorf("error loading plugins (preload): %s", err)
}
}
if err := plugins.Initialize(); err != nil {
return nil, fmt.Errorf("error initializing plugins: %s", err)
}
if err := plugins.Inject(); err != nil {
return nil, fmt.Errorf("error initializing plugins: %s", err)
}
return plugins, nil
}
func printErr(err error) int {
fmt.Fprintf(os.Stderr, "Error: %s\n", err.Error())
return 1
}
func BuildDefaultEnv(ctx context.Context, req *cmds.Request) (cmds.Environment, error) {
return BuildEnv(nil)(ctx, req)
}
// BuildEnv creates an environment to be used with the kubo CLI. Note: the plugin preloader should only call functionsView on GitHub (pinned to 329838acdf)
Solutions
- Read the wrapped error to identify the failing plugin and remove it from <IPFS_PATH>/plugins, then restart.
- Deduplicate: remove duplicate copies of the same plugin from the plugins directory.
- Rebuild the plugin against the exact kubo/plugin API version of your binary; plugin .so files must match the kubo version they were built for.
- Run with GOLOG_LOG_LEVEL=debug for a more precise failure point if the wrapped error is vague.
Example fix
// before ~/.ipfs/plugins/myplugin.so built against kubo v0.20 // after rebuild plugin against the current kubo version and replace the .so
Defensive patterns
Strategy: try-catch
Validate before calling
// before daemon start, check for duplicate plugin files
seen := map[string]struct{}{}
entries, _ := os.ReadDir(filepath.Join(repoPath, "plugins"))
for _, e := range entries {
if _, dup := seen[e.Name()]; dup {
log.Fatalf("duplicate plugin %s in %s/plugins", e.Name(), repoPath)
}
seen[e.Name()] = struct{}{}
} Try / catch
plugins, err := loadPlugins(repoPath, preload)
if err != nil && strings.Contains(err.Error(), "initializing plugins") {
log.Printf("plugin Init failed: %v — remove the offending plugin from %s/plugins", err, repoPath)
return err
} Prevention
- Keep exactly one copy of each plugin in the plugins directory
- Rebuild plugins for the exact kubo version; .so plugins are not portable across versions
- Run the daemon with GOLOG_LOG_LEVEL=debug while installing new plugins
When it happens
Trigger: Daemon startup with a plugin whose Init returns an error: duplicate plugin names, plugin type registration conflicts, or plugin code failing on its internal setup. Also triggered by corrupted/incompatible .so files that fail during initialization.
Common situations: Two copies of the same plugin in the plugins dir; a plugin compiled against a different kubo/plugin API version; plugins requiring environment (paths, files) not present in the container.
Related errors
- error loading plugins: %s
- error loading plugins (preload): %s
- serveHTTPGateway: GetConfig() failed: %s
- cannot create libp2p gateway: node PeerHost is nil (this sho
- ipfs api address could not be found
AI-assisted analysis of ipfs/kubo@329838acdf (2026-09-03).
Data as JSON: /api/errors/3186685106b223e6.
Report an issue: GitHub.