calcom/cal.com
Other packages
A grab-bag of smaller workspaces. Each is too thin for its own page, but worth knowing about.
dayjs
packages/dayjs ships a single pre-configured Day.js bundle with the plugins Cal.diy needs (utc, timezone, customParseFormat, relativeTime, localizedFormat, weekOfYear, isBetween, minMax, duration). The convention: every internal package imports Day.js from @calcom/dayjs, never directly from dayjs. This guarantees plugins are loaded.
A patch in .yarn/patches/dayjs-npm-1.11.4-97921cd375.patch fixes a long-standing timezone bug; pinned via resolutions in the root package.json.
AGENTS.md notes:
Use
date-fnsor nativeDateinstead of Day.js when timezone awareness isn't needed.
The codebase is gradually shifting away from Day.js for non-timezone code paths, but Day.js remains the single source of truth for booking-time math.
i18n
packages/i18n contains next-i18next configuration plus the per-locale JSON bundles under packages/i18n/locales/<locale>/common.json. The English bundle is canonical; other locales are translated by the community.
The web app mirrors translations to apps/web/public/static/locales/ for client-side fetching. The script i18n.json and the workflow .github/workflows/i18n.yml automate the propagation. i18n-unused (configured by i18n-unused.config.js) catches dead keys.
When adding UI strings:
- Add the key to
packages/i18n/locales/en/common.json(AGENTS.mdmandate). - Reference it via
useLocale()/t(...)in the component. - The mirror to
apps/web/public/static/locales/en/common.jsonhappens via the i18n workflow.
kysely
packages/kysely/types.ts is the generated Kysely-compatible type set produced by the prisma-kysely generator (declared in packages/prisma/schema.prisma). It is used wherever raw SQL is needed — primarily PBAC and analytics queries that don't fit the Prisma DSL well.
sms
packages/sms wraps Twilio (and any future SMS provider). Used by booking SMS reminders and 2FA flows. Cron jobs (cron-scheduleSMSReminders.yml, cron-scheduleWhatsappReminders.yml, cron-checkSmsPrices.yml) drive the reminder schedule.
types
packages/types/ holds shared TypeScript declarations that don't belong to a single domain:
Calendar.d.ts— theCalendarinterface that every calendar app-store adapter implements.EventManager.d.ts,Event.d.ts,Booking.d.ts,EventBusyDate.d.ts— booking pipeline types.VideoApiAdapter.d.ts— video integration interface.payment.d.ts,pricing.d.ts— payment + pricing types.
If you are working in a context where you need a Cal.diy-specific type that isn't generated by Prisma or Zod, this is where it usually lives.
tsconfig
packages/tsconfig/ is a set of shared tsconfig.json presets. Workspaces extend one of base.json, nextjs.json, react-library.json, or nestjs.json.
testing
packages/testing/ provides shared test fixtures and the booking scenario builder at packages/testing/src/lib/bookingScenario/bookingScenario.ts. This file alone is over 2,000 lines and is the foundation of the booking test suite.
debugging
packages/debugging/ exposes a debug-focused logger and helpers. Used sparingly inside packages/features/troubleshooter.
di
packages/di/ provides a micro DI container used by every domain's di/ directory. It supports interface-to-class binding, request scoping, and singletons. Tests inject mock implementations through this container.
coss-ui
packages/coss-ui/ (Community Open-Source UI) is a smaller token package shared between Cal.diy and the marketing site. It overlaps with @calcom/ui. The scripts/pull-coss-ui-components.ts script syncs components.
config
packages/config/ aggregates runtime configuration helpers — feature flags defaults, domain redirects, and similar.
Built by Factory AutoWiki from public repository content. It is a generated preview for codebase exploration, not source-maintained documentation.