Molunerfinn/PicGo · error · Error
Imported plugin not found
Error message
Imported plugin not found
What it means
After the main process reports a successful local plugin import, importLocalPlugin refreshes the installed plugin list and searches for the imported plugin by fullName OR short name. This error is thrown when the import succeeded at the IPC level but the plugin never appears in the refreshed pluginsInstalled list, i.e. the plugin is on disk but not registered as installed.
Source
Thrown at src/renderer/store/plugins/actions.ts:403
try {
const result = await pluginsAdapter.importLocalPlugin()
if (!result.success) {
throw new Error(result.error || 'Import local plugin failed')
}
if (!result.data) {
return null
}
await appActions.hydrateAppState()
const installedPlugins = await pluginsAdapter.getInstalledPlugins()
pluginStoreActions.setInstalledPlugins(installedPlugins.map(mapInstalledPluginItem))
const installedPlugin = useAppStore.getState().pluginsInstalled.find(
(item) => item.fullName === result.data || item.name === result.data
)
if (!installedPlugin) {
throw new Error('Imported plugin not found')
}
toast.success(i18n.t('PLUGIN_IMPORT_SUCCEED'))
return {
path: result.data,
installedPlugin
}
} finally {
pluginStoreActions.setImportingLocal(false)
}
}
}
View on GitHub (pinned to 07ec7068a5)
Solutions
- Re-hydrate the installed plugin list and retry the lookup by both fullName and name before giving up.
- Confirm the plugin's package name matches the folder/identifier returned by the import adapter.
- Check main-process plugin registration logs to see why the imported package was not added to the installed list.
- Manually restart plugin refresh (reload app state) and verify the plugin shows up in settings before using it.
Example fix
// before
const imported = await pluginStoreActions.importLocalPlugin()
const plugin = imported?.installedPlugin
// after
try {
const imported = await pluginStoreActions.importLocalPlugin()
} catch (err) {
if ((err as Error).message === 'Imported plugin not found') {
await appActions.hydrateAppState()
toast.warning(i18n.t('PLUGIN_IMPORT_VERIFY_FAILED'))
return
}
throw err
} Defensive patterns
Strategy: validation
Validate before calling
await appActions.hydrateAppState()
const found = useAppStore.getState().pluginsInstalled.find(
(item) => item.fullName === result.data || item.name === result.data
)
if (!found) {
// treat as failed import: plugin on disk but not registered
return null
} Type guard
function isRegistered(
plugin: InstalledPlugin | undefined,
identifier: string
): plugin is InstalledPlugin {
return !!plugin &&
(plugin.fullName === identifier || plugin.name === identifier)
} Try / catch
try {
const imported = await pluginStoreActions.importLocalPlugin()
} catch (err) {
if ((err as Error).message === 'Imported plugin not found') {
await appActions.hydrateAppState() // resync then retry lookup
}
} Prevention
- Ensure the imported package name matches its directory/identifier.
- Re-hydrate plugin state after any install/import before consuming it.
- Log main-process registration results to catch silently skipped plugins.
When it happens
Trigger: The adapter resolves with success:true and data set to the plugin path, but after mapInstalledPluginItem over the refreshed list, no item matches item.fullName === result.data or item.name === result.data — e.g. the main process installed the package but plugin discovery/registration skipped it.
Common situations: Plugin installed under a directory name that does not match its package name; plugin registered under a scoped name (e.g. @scope/picgo-plugin-x) so neither fullName nor name equals the path; app state hydration raced ahead of the install completion.
Related errors
- Transformer not found
- Import local plugin failed
- PICGO_CLOUD_CONFIG_SYNC_LOCAL_CONFIG_INVALID
- Failed to refresh plugin config schema
- Failed to read local plugin readme
AI-assisted analysis of Molunerfinn/PicGo@07ec7068a5 (2026-08-30).
Data as JSON: /api/errors/1859241ccc04f8f2.
Report an issue: GitHub.