ruvnet/ruflo · error
Plugin ${name} requires core version >= ${resolvedPlugin.met
Error message
Plugin ${name} requires core version >= ${resolvedPlugin.metadata.minCoreVersion}, but current version is ${this.config.coreVersion} What it means
Thrown by EnhancedPluginRegistry.register() during core-version compatibility checking. If plugin.metadata.minCoreVersion is set, the registry builds the constraint '>=' + minCoreVersion and tests it against config.coreVersion (the version the registry was constructed with) using satisfiesVersion. A miss means the plugin requires a newer core than this registry claims to be, and registration aborts before dependencies are parsed.
Source
Thrown at v3/@claude-flow/plugins/src/registry/enhanced-plugin-registry.ts:303
}
const name = resolvedPlugin.metadata.name;
const version = resolvedPlugin.metadata.version;
// Check for duplicates
if (this.plugins.has(name)) {
throw new Error(`Plugin ${name} already registered`);
}
// Check max plugins
if (this.config.maxPlugins && this.plugins.size >= this.config.maxPlugins) {
throw new Error(`Maximum plugin limit (${this.config.maxPlugins}) reached`);
}
// Check core version compatibility
if (resolvedPlugin.metadata.minCoreVersion) {
if (!satisfiesVersion(`>=${resolvedPlugin.metadata.minCoreVersion}`, this.config.coreVersion)) {
throw new Error(
`Plugin ${name} requires core version >= ${resolvedPlugin.metadata.minCoreVersion}, ` +
`but current version is ${this.config.coreVersion}`
);
}
}
if (resolvedPlugin.metadata.maxCoreVersion) {
if (!satisfiesVersion(`<=${resolvedPlugin.metadata.maxCoreVersion}`, this.config.coreVersion)) {
throw new Error(
`Plugin ${name} requires core version <= ${resolvedPlugin.metadata.maxCoreVersion}, ` +
`but current version is ${this.config.coreVersion}`
);
}
}
// Parse dependencies
const dependencies = this.parseDependencies(resolvedPlugin.metadata.dependencies);
// Add to dependency graphView on GitHub (pinned to fa13ee4ad6)
Solutions
- Upgrade the host/core so config.coreVersion satisfies the plugin's minCoreVersion
- If the plugin actually runs fine on your core, lower or remove its metadata.minCoreVersion and rebuild
- Set config.coreVersion to the real core package version (import from package.json) instead of a hardcoded stale string
- Pin a compatible older release of the plugin whose minCoreVersion your core satisfies
Example fix
// before
const registry = new EnhancedPluginRegistry({ coreVersion: '3.0.0' });
await registry.register(plugin); // plugin.metadata.minCoreVersion = '3.2.0' -> throws
// after
import { version as CORE_VERSION } from '@claude-flow/core/package.json';
const registry = new EnhancedPluginRegistry({ coreVersion: CORE_VERSION }); // '3.4.1'
await registry.register(plugin); Defensive patterns
Strategy: validation
Validate before calling
const minCore = plugin.metadata.minCoreVersion;
if (minCore && !satisfiesSemver(coreVersion, `>=${minCore}`)) {
throw new Error(
`skip ${plugin.metadata.name}: needs core >= ${minCore}, host is ${coreVersion}`
);
}
await registry.register(plugin); Prevention
- Feed config.coreVersion from the actual core package version (import from package.json), never a hardcoded string
- Include plugin/core version pairs in your review when upgrading either side
- Gate plugin loading on a version-compatibility check in your bootstrap so skips are logged, not thrown
When it happens
Trigger: Registering a plugin declaring minCoreVersion '3.2.0' against a registry constructed with coreVersion '3.0.0' or '2.x'; coreVersion omitted/defaulted to an older value in the registry config; plugin built against newer SDK APIs (hence the min bound) loaded into an older host; version strings that satisfiesVersion fails to compare as expected.
Common situations: Upgrading a third-party plugin package without upgrading the host application; copy-pasting registry config with a stale coreVersion instead of the actual package version; local dev running an older branch while the plugin comes from a newer branch.
Related errors
- Plugin ${name} requires core version <= ${resolvedPlugin.met
- Invalid plugin: does not implement IPlugin interface
- Plugin ${name} already registered
- Maximum plugin limit (${this.config.maxPlugins}) reached
- Plugin ${name} not found
AI-assisted analysis of ruvnet/ruflo@fa13ee4ad6 (2026-08-18).
Data as JSON: /api/errors/81c875c5f56c8dcf.
Report an issue: GitHub.