calcom/cal.diy · error · Error

Default conferencing app '${defaultApp.appSlug}' doesnt exis

Error message

Default conferencing app '${defaultApp.appSlug}' doesnt exist.

What it means

Thrown by bulkUpdateEventsToDefaultLocation when the defaultConferencingApp.appSlug stored in user metadata does not resolve to a registered app (getAppFromSlug returns undefined) or that app has no location type in its appData. The stored slug is stale or refers to an app no longer available.

Source

Thrown at packages/app-store/_utils/bulkUpdateEventsToDefaultLocation.ts:29

export const bulkUpdateEventsToDefaultLocation = async ({
  eventTypeIds,
  user,
  prisma,
}: {
  eventTypeIds: number[];
  user: Pick<User, "id" | "metadata">;
  prisma: PrismaLike;
}) => {
  const defaultApp = userMetadataSchema.parse(user.metadata)?.defaultConferencingApp;

  if (!defaultApp) {
    throw new Error("Default conferencing app not set");
  }

  const foundApp = getAppFromSlug(defaultApp.appSlug);
  const appType = foundApp?.appData?.location?.type;
  if (!appType) {
    throw new Error(`Default conferencing app '${defaultApp.appSlug}' doesnt exist.`);
  }

  const credential = await prisma.credential.findFirst({
    where: {
      userId: user.id,
      appId: foundApp.slug,
    },
    select: {
      id: true,
    },
  });

  const eventTypesToUpdate = await prisma.eventType.findMany({
    where: {
      id: {
        in: eventTypeIds,
      },
      userId: user.id,

View on GitHub (pinned to 176037d0af)

Solutions

  1. Have the user re-pick a default conferencing app so metadata stores a current, valid slug.
  2. If an app was renamed, migrate affected users' metadata to the new slug.
  3. Verify the app is installed and generated in the app-store so getAppFromSlug finds it.
  4. Guard callers: clear the default and prompt re-selection when getAppFromSlug returns undefined.

Example fix

// before - trusting stored metadata blindly
await bulkUpdateEventsToDefaultLocation({ eventTypeIds, user, prisma });
// after - validate the slug resolves
import { getAppFromSlug } from '@calcom/app-store/utils';
const slug = userMetadataSchema.parse(user.metadata)?.defaultConferencingApp?.appSlug;
if (!slug || !getAppFromSlug(slug)?.appData?.location?.type) {
  return res.status(400).json({ message: 'Default conferencing app is no longer available' });
}
Defensive patterns

Strategy: validation

Validate before calling

import { getAppFromSlug } from '@calcom/app-store/utils';
const slug = userMetadataSchema.parse(user.metadata)?.defaultConferencingApp?.appSlug;
if (!slug || !getAppFromSlug(slug)?.appData?.location?.type) {
  return res.status(400).json({ message: 'Default conferencing app is no longer available' });
}

Type guard

function isUsableConferencingApp(slug: string): boolean {
  return !!getAppFromSlug(slug)?.appData?.location?.type;
}

Try / catch

null

Prevention

When it happens

Trigger: User metadata points to defaultConferencingApp.appSlug that is not in the app registry, or the app exists but exposes no appData.location.type. Happens when an app was uninstalled/renamed/disabled after the user set it as default.

Common situations: App slug renamed in an upgrade; app package removed from the build; user manually edited metadata; app disabled via feature flags; the app never had a conferencing location type (misconfigured as a default conferencing app).

Related errors


AI-assisted analysis of calcom/cal.diy@176037d0af (2026-08-12). Data as JSON: /api/errors/004cef9da3b4ad30. Report an issue: GitHub.