{"record":{"id":"4256ac9fbf1815b5","repo":"Budibase/budibase","slug":"no-datasource-implementation-found-called-inte","errorCode":null,"errorMessage":"No datasource implementation found called: \"${integration}\"","messagePattern":"No datasource implementation found called: \"(.+?)\"","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/server/src/integrations/index.ts","lineNumber":137,"sourceCode":"): Promise<IntegrationBaseConstructor> {\n  if (INTEGRATIONS[integration]) {\n    return INTEGRATIONS[integration]\n  }\n  if (env.SELF_HOSTED) {\n    const plugins = await sdk.plugins.fetch(PluginType.DATASOURCE)\n    for (let plugin of plugins) {\n      if (plugin.name === integration) {\n        // need to use commonJS require due to its dynamic runtime nature\n        const retrieved = await getDatasourcePlugin(plugin)\n        if (retrieved.integration) {\n          return retrieved.integration\n        } else {\n          return retrieved\n        }\n      }\n    }\n  }\n  throw new Error(`No datasource implementation found called: \"${integration}\"`)\n}\n\nexport default {\n  getDefinitions,\n  getIntegration,\n}\n","sourceCodeStart":119,"sourceCodeEnd":144,"githubUrl":"https://github.com/Budibase/budibase/blob/a81a902e9a8fe55b467d106765f6638f12e35c49/packages/server/src/integrations/index.ts#L119-L144","documentation":"getIntegration() resolves a datasource SourceName to its implementation class from the built-in INTEGRATIONS registry. If the name is not registered, it falls back to loading a self-hosted datasource plugin; only when neither path finds a match does it throw 'No datasource implementation found called: \"<integration>\"'. This means Budibase simply has no connector for that source name in the current deployment.","triggerScenarios":"Passing a SourceName that is not in the INTEGRATIONS map (typo, custom string, removed/renamed integration), or referencing a datasource plugin that is not installed/loaded while running self-hosted (plugins.fetch returns nothing matching), or calling getIntegration on a cloud (non SELF_HOSTED) deployment where plugin fallback is skipped.","commonSituations":"A datasource document in CouchDB references an integration from an older/newer Budibase version; a custom plugin was uninstalled or failed to load; user data was migrated between environments and carries an unsupported source name; hand-edited or imported app definitions contain an invalid sourceId.","solutions":["Check the datasource's source value against SourceName / getDefinitions() output and correct it to a supported name","If it should be a plugin datasource, verify the plugin is installed and that SELF_HOSTED=true so the plugin registry is consulted","Reinstall or fix the failing plugin so it exposes integration (its module must resolve at runtime)","Upgrade/downgrade Budibase so the integration named in the app definition exists; if migrating apps, re-create the datasource with a supported connector"],"exampleFix":"// before: referencing a name that is not a registered integration\nconst integration = await getIntegration(\"PostgresSQL\" as SourceName)\n// after: use the exact SourceName value\nconst integration = await getIntegration(SourceName.POSTGRES)","handlingStrategy":"validation","validationCode":"import { getDefinitions, getIntegration, SourceName } from \"@budibase/types\"\nconst definitions = await getDefinitions()\nif (!definitions[source]) {\n  throw new Error(`Unsupported datasource: ${source}`)\n}\nawait getIntegration(source)","typeGuard":"function isSupportedSource(source: string): source is SourceName {\n  return Object.values(SourceName).includes(source as SourceName)\n}","tryCatchPattern":"try {\n  const integration = await getIntegration(source)\n  return new integration(config)\n} catch (err) {\n  if (err.message.startsWith(\"No datasource implementation found\")) {\n    throw new Error(`Datasource \"${source}\" is not installed in this deployment`, { cause: err })\n  }\n  throw err\n}","preventionTips":["Only reference SourceName enum values, never free-form strings","Keep datasource plugin installs in sync across environments (self-hosted requires SELF_HOSTED=true)","After importing/migrating apps, verify every datasource resolves via getDefinitions()","Pin Budibase versions consistently so integration registries match app definitions"],"tags":["datasource","integration-registry","plugins","configuration"],"backgroundTag":"unknown-datasource-type","analyzedSha":"a81a902e9a8fe55b467d106765f6638f12e35c49","analyzedAt":"2026-08-29T01:03:10.972Z","schemaVersion":2},"datasetVersion":"2026-08-29T02:17:18.158Z"}