Open-Source Wikis

/

Cal.com

/

Packages

/

app-store

calcom/cal.com

app-store

Purpose

packages/app-store/ is Cal.diy's third-party-integration directory: 111 sub-packages that connect the product to calendars (Google, Office 365, Apple, CalDAV, Lark, Feishu), conferencing (Zoom, Daily, Google Meet, Webex, Jitsi, Office 365 Video, Whereby, Element Call, ...), payments (Stripe, PayPal, HitPay, btcpayserver, Mock), CRMs (HubSpot, Salesforce, Close, Pipedrive, Attio, Zoho, Lyra, Linear), analytics (Plausible, PostHog, GA4, Fathom, Matomo, Umami, MetaPixel, GTM, Databuddy, Twipla), automation (Zapier, n8n, Make, Pipedream), AI receptionists (Retell, Bolna, Synthflow, Telli, Famulor, Greetmate, Lindy, Monobot, Millis, Fonio), messaging (Telegram, Discord, Signal, WhatsApp, Intercom), and a long tail of tools (Linear, Granola, Raycast, Vimcal, Amie, Framer, ...).

A companion package, packages/app-store-cli, owns the CLI used to scaffold and edit these integrations.

Directory layout

packages/app-store/
├── _components/, _lib/, _pages/, _utils/   # Shared scaffolding (renderers, install button, types)
├── _appRegistry.ts                         # Build-time registry indexer
├── apps.metadata.generated.ts (11 KB)      # Generated registry (DO NOT EDIT)
├── apps.server.generated.ts (3.7 KB)       # Server-side registry (DO NOT EDIT)
├── apps.schemas.generated.ts               # Zod schemas (DO NOT EDIT)
├── apps.keys-schemas.generated.ts          # Per-app credential key schemas (DO NOT EDIT)
├── apps.browser.generated.tsx              # Client-side registry (DO NOT EDIT)
├── analytics.services.generated.ts         # Per-category registries (DO NOT EDIT)
├── calendar.services.generated.ts
├── crm.apps.generated.ts
├── payment.services.generated.ts
├── video.adapters.generated.ts
├── bookerApps.metadata.generated.ts
├── redirect-apps.generated.ts
├── server.ts                               # Server-side helpers
├── locations.ts                            # Location strings (Zoom, Google Meet, ...)
├── utils.ts / utils.test.ts
├── delegationCredential.ts                 # Per-app delegation helper
├── appStoreMetaData.ts                     # Aggregated metadata
├── eventTypeAppCardZod.ts                  # Per-app event-type card schema
├── tests/                                  # Cross-app tests
├── templates/                              # Templates used by app-store-cli to scaffold new apps
└── <appName>/                              # 111 individual integrations
    ├── api/                                # OAuth / webhook handlers
    ├── components/                         # React UI for the install flow
    ├── lib/                                # Service classes (CalendarService, VideoApiAdapter, ...)
    ├── static/                             # Logo / screenshots
    ├── _metadata.ts                        # Constants (slug, type, categories, ...)
    ├── config.json                         # User-facing app metadata
    ├── package.json
    └── index.ts

The _-prefixed directories are conventional "private" support code; numbered/lettered directories are individual integrations.

How an integration is wired in

graph LR
    Authoring[Author writes <app>/config.json + lib/CalendarService.ts]
    CLI[app-store-cli walks packages/app-store/*]
    Generated[*.generated.ts files]
    Web[apps/web reads metadata + adapters]
    Browser[apps/web client renders install button + settings]
    Authoring --> CLI
    CLI --> Generated
    Generated --> Web
    Generated --> Browser

The CLI source is packages/app-store-cli. It produces:

  • apps.metadata.generated.ts — every app's user-visible metadata (name, description, categories, logo path)
  • apps.server.generated.ts — server-side imports (handlers, services)
  • apps.browser.generated.tsx — lazy-loaded React components for the install flow
  • apps.schemas.generated.ts — combined Zod schema covering every app's event-type card
  • apps.keys-schemas.generated.ts — per-app credential key schemas (used to validate the encrypted Credential.key JSON)
  • Per-category registries: calendar.services.generated.ts, analytics.services.generated.ts, crm.apps.generated.ts, payment.services.generated.ts, video.adapters.generated.ts

AGENTS.md explicitly forbids editing any *.generated.* file by hand.

Categories and adapter shapes

Category Adapter shape Example Generated registry
Calendar CalendarService extending BaseCalendarService googlecalendar/lib/CalendarService.ts calendar.services.generated.ts
Conferencing / video VideoApiAdapter dailyvideo/lib/VideoApiAdapter.ts, zoomvideo/lib/VideoApiAdapter.ts video.adapters.generated.ts
Payment PaymentService stripepayment/lib/PaymentService.ts, paypal/lib/PaymentService.ts payment.services.generated.ts
CRM CrmService hubspot/lib/CrmService.ts, salesforce/lib/CrmService.ts crm.apps.generated.ts
Analytics AnalyticsService posthog/lib/AnalyticsService.ts analytics.services.generated.ts
Automation / messaging / other Per-app handlers in api/ zapier/api/, telegram/api/ apps.server.generated.ts

The Calendar, VideoApiAdapter, PaymentService, and CrmService interfaces are defined in packages/types/ and packages/lib/. New apps in a category just implement the existing interface.

Authoring flow

yarn create-app                  # interactive scaffold
yarn edit-app                    # edit an existing app's config
yarn delete-app                  # remove an app cleanly
yarn app-store:build             # rebuild all *.generated.* files
yarn app-store:watch             # rebuild on change during dev

Under the hood, yarn create-app runs packages/app-store-cli which copies a template from packages/app-store/templates/ and walks the user through the metadata.

Credential storage

Every installed app stores its OAuth tokens / API keys in the Credential Prisma table. The key JSON column is encrypted with CALENDSO_ENCRYPTION_KEY and validated against the per-app schema in apps.keys-schemas.generated.ts. Never select credential.key into anything that flows to a client (AGENTS.md).

packages/lib/delegationCredential.ts and packages/features/credentials handle the rare case of system-wide delegation credentials (e.g., Google Workspace domain-wide delegation).

Notable individual apps

  • googlecalendar — the original calendar provider; reference for new calendar adapters.
  • office365calendar / exchangecalendar / exchange2013calendar / exchange2016calendar — Microsoft graph + Exchange variants.
  • caldavcalendar / applecalendar / ics-feedcalendar — CalDAV-based providers.
  • larkcalendar / feishucalendar / zohocalendar — non-US providers.
  • dailyvideo — first-party video, owned by Cal.com (uses Daily.co).
  • stripepayment — first-class payment provider; deeply integrated with the booking pipeline (deposits, no-show fees, refund flow).
  • zapier, n8n, make, pipedream — automation outbound webhooks.
  • hubspot, salesforce, pipedrive-crm, closecom, attio, zoho-bigin, zohocrm — CRM dispatch on booking events.
  • retell-ai, bolna, synthflow, telli, famulor, greetmate-ai, monobot, millis-ai, fonio-ai, lindy — AI voice receptionists.

Integration points

  • Booking pipeline consumes calendar adapters (getBusyTimes, createEvent, updateEvent, deleteEvent), video adapters (createMeeting, ...), and payment services.
  • Event-type editor uses generated React components from apps.browser.generated.tsx to render per-app config cards.
  • Admin UI under apps/web/app/(use-page-wrapper)/(main-nav)/apps/ lists installed apps and surfaces the per-app components/ install flow.

Entry points for modification

  • Adding a new integration: yarn create-app. Pick a template (calendar, video, payment, CRM, analytics, generic). Implement the adapter interface in lib/. Add OAuth handlers in api/. Run yarn app-store:build.
  • Updating credentials schema: edit the per-app zod definition; the regeneration will update apps.keys-schemas.generated.ts.
  • Disabling an integration: set published: false in the app's config.json and rebuild.

Built by Factory AutoWiki from public repository content. It is a generated preview for codebase exploration, not source-maintained documentation.

app-store – Cal.com wiki | Factory