paperclipai/paperclip · error
Plugin ${manifest.id} routePath "${conflictingRoute}" confli
Error message
Plugin ${manifest.id} routePath "${conflictingRoute}" conflicts with installed plugin ${plugin.pluginKey} What it means
Route-conflict guard: a routePath the manifest requests is already claimed by a different installed plugin. UI plugin pages occupy a global route namespace, so first-come wins; the conflicting manifest routePath is at fault.
Source
Thrown at server/src/services/plugin-loader.ts:1169
async function assertPageRoutePathsAvailable(manifest: PaperclipPluginManifestV1): Promise<void> {
const requestedRoutePaths = getDeclaredPageRoutePaths(manifest);
if (requestedRoutePaths.length === 0) return;
const uniqueRequested = new Set(requestedRoutePaths);
if (uniqueRequested.size !== requestedRoutePaths.length) {
throw new Error(`Plugin ${manifest.id} declares duplicate page routePath values`);
}
const installedPlugins = await registry.listInstalled();
for (const plugin of installedPlugins) {
if (plugin.pluginKey === manifest.id) continue;
const installedManifest = plugin.manifestJson as PaperclipPluginManifestV1 | null;
if (!installedManifest) continue;
const installedRoutePaths = new Set(getDeclaredPageRoutePaths(installedManifest));
const conflictingRoute = requestedRoutePaths.find((routePath) => installedRoutePaths.has(routePath));
if (conflictingRoute) {
throw new Error(
`Plugin ${manifest.id} routePath "${conflictingRoute}" conflicts with installed plugin ${plugin.pluginKey}`,
);
}
}
}
// -------------------------------------------------------------------------
// Internal helpers
// -------------------------------------------------------------------------
/**
* Fetch a plugin from npm or local path, then parse and validate its manifest.
*
* This internal helper encapsulates the core plugin retrieval and validation
* logic used by both install and upgrade operations. It handles:
* 1. Resolving the package from npm or local filesystem.
* 2. Installing the package via npm if necessary.
* 3. Reading and parsing the plugin manifest.View on GitHub (pinned to 120ae5428f)
Solutions
- Change the plugin's conflicting routePath to a unique value, or uninstall the other plugin that already owns that route.
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at server/src/services/plugin-loader.ts:1169 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of paperclipai/paperclip@120ae5428f (2026-08-18).
Data as JSON: /api/errors/e5d4210de9ac2242.
Report an issue: GitHub.