janhq/jan · error · Error
Extension does not support backend updates
Error message
Extension does not support backend updates
What it means
Thrown when an extension was found (either by name or via the fuzzy fallback) but it lacks the `getSettings` or `updateBackend` methods — i.e. it is not the llamacpp extension or is an older/incompatible version. The `'method' in object` duck-type check is the capability gate.
Source
Thrown at web-app/src/hooks/useBackendUpdater.ts:323
(ext) =>
ext.constructor.name.toLowerCase().includes('llamacpp') ||
(ext.type &&
ext.type()?.toString().toLowerCase().includes('inference'))
)
if (!possibleExtension) {
throw new Error('LlamaCpp extension not found')
}
extensionToUse = possibleExtension
}
if (
!extensionToUse ||
!('getSettings' in extensionToUse) ||
!('updateBackend' in extensionToUse)
) {
throw new Error('Extension does not support backend updates')
}
const extension = extensionToUse as LlamacppExtension
// Use the exact target backend from checkBackendForUpdates if available,
// to avoid mismatches between old/new backend name formats
let targetBackendString = updateState.updateInfo.targetBackend
if (targetBackendString) {
// Validate and normalize the provided target backend string
const rawParts = targetBackendString.split('/')
const versionPart = rawParts[0]?.trim()
const backendTypePart = rawParts[1]?.trim()
if (rawParts.length !== 2 || !versionPart || !backendTypePart) {
// Malformed targetBackend; fall back to constructing from current settings
const currentBackendType = await getCurrentBackendTypeFromSettings(
extensionView on GitHub (pinned to fad3f12a14)
Solutions
- Update the llamacpp extension to a version that implements `updateBackend`.
- Disable other extensions whose names/type strings could shadow the fuzzy matcher.
- Prefer the exact `getByName('llamacpp-extension')` result and only fall back with a stricter type check.
Example fix
// before
if (!extensionToUse || !('getSettings' in extensionToUse) || !('updateBackend' in extensionToUse)) {
throw new Error('Extension does not support backend updates')
}
// after
if (!extensionToUse || typeof extensionToUse.updateBackend !== 'function') {
throw new Error(
'Installed llamacpp extension does not support backend updates. Update the extension.'
)
} Defensive patterns
Strategy: type-guard
Validate before calling
if (!extensionToUse || typeof extensionToUse.updateBackend !== 'function' || typeof extensionToUse.getSettings !== 'function') {
toast.error('Incompatible extension', { description: 'Update the llamacpp extension to support backend updates.' })
return
} Type guard
function supportsBackendUpdates(ext: unknown): ext is LlamacppExtension {
return !!ext && typeof (ext as any).getSettings === 'function' && typeof (ext as any).updateBackend === 'function'
} Try / catch
if (!supportsBackendUpdates(extensionToUse)) {
toast.error('Extension does not support backend updates', { description: 'Update the llamacpp extension.' })
return
} Prevention
- Use `typeof fn === 'function'` rather than `'fn' in obj` — it catches non-function shadowing.
- Update the llamacpp extension whenever the host app is upgraded.
- Avoid the fuzzy matcher picking a non-llamacpp inference extension.
When it happens
Trigger: The fuzzy matcher picked the wrong extension (its constructor name coincidentally contained 'llamacpp' or its type contained 'inference') but that extension does not implement backend updates; or the installed llamacpp extension is an old version predating `updateBackend`.
Common situations: Another inference extension shadows llamacpp; extension version mismatch after partial upgrade; a custom/third-party extension named similarly but lacking the API.
Related errors
- LlamaCpp extension not found
- Extension does not support backend installation
- Extension does not support CUDA runtime installation
- llamacpp extension not available
- llamacpp extension not available
AI-assisted analysis of janhq/jan@fad3f12a14 (2026-08-12).
Data as JSON: /api/errors/7b87c36eb07a081d.
Report an issue: GitHub.