Open-Source Wikis

/

Cal.com

/

Apps

calcom/cal.com

Apps

Cal.diy ships three deployable apps from one monorepo. Each has a distinct runtime and audience.

App Path Framework Audience
Web apps/web Next.js 13+ (App Router + Pages Router) End users, embeds, the tRPC API
API v2 apps/api/v2 NestJS Public REST API, Platform SDK
Docs apps/docs MintLify Public documentation site

There is also a thin apps/api/index.js (with a package.json) that historically acted as a routing entry point in front of the v1 and v2 APIs. The current proxy logic for the web app lives in apps/web/proxy.ts.

Where apps integrate with packages

graph LR
    Web[apps/web] -->|business logic| Features[packages/features]
    Web -->|UI primitives| UI[packages/ui]
    Web -->|tRPC| TRPC[packages/trpc]
    Web -->|Prisma| Prisma[packages/prisma]
    Web -->|i18n| I18n[packages/i18n]
    Web -->|integrations| AppStore[packages/app-store]
    Web -->|emails| Emails[packages/emails]
    Web -->|sms| Sms[packages/sms]
    Web -->|embed JS| Embeds[packages/embeds]

    Api[apps/api/v2] -->|via| PlatformLibs[packages/platform/libraries]
    PlatformLibs -->|re-exports| Features
    PlatformLibs -->|re-exports| TRPC
    Api -->|Prisma| Prisma
    Api -->|generated types| PlatformTypes[packages/platform/types]

    Docs[apps/docs]

The diagram captures one of the most important conventions in the repo: apps/api/v2 does not import from @calcom/features or @calcom/trpc directly. It goes through packages/platform/libraries/index.ts, which re-exports the symbols it needs. This indirection is documented in AGENTS.md and exists because apps/api/v2's tsconfig.json doesn't have path mappings for those packages.

Per-app dive-ins

  • Web — the Next.js application
  • API v2 — the NestJS REST service
  • Docs — the MintLify documentation site

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

Apps – Cal.com wiki | Factory