Prerequisites
- Cal.com development environment set up
- Node.js 10+ installed
- Yarn package manager
- Basic knowledge of TypeScript and React
Step 1: Create Your App
Use the app-store CLI to scaffold a new app:Interactive Mode
- App name - Display name for your app
- Description - Short description (keep under 10 words)
- Category - Choose from: analytics, automation, calendar, conferencing, crm, messaging, payment, other
- Publisher - Your name or company
- Email - Contact email
- Template - Starting template for your app
Non-Interactive Mode
For automation or CI/CD, pass all options as flags:The app slug is automatically generated from the name by converting to lowercase and replacing spaces with hyphens.
Step 2: Choose a Template
The CLI offers several templates based on your app’s functionality:basic
A minimal app that can be installed with no additional features. Good starting point for simple integrations.event-type-app-card
Adds a card to the event type configuration. Use for apps that extend event types (e.g., Giphy, QR Code). Use case: Payment apps, custom booking fields, event-specific featuresbooking-pages-tag
Injects tags into booking pages (e.g., analytics, tracking scripts). Use case: Google Analytics, Facebook Pixel, custom trackingevent-type-location-video-static
Adds a static video conferencing location to event types. Use case: Custom video providers that don’t require dynamic room creationgeneral-app-settings
Provides a settings interface in the app configuration. Use case: Apps requiring user configurationlink-as-an-app
Creates an app that redirects to an external URL. Use case: External tools, documentation linksStep 3: App Structure
Your new app is created inpackages/app-store/your-app-slug/ with this structure:
Step 4: Configure Your App
Editconfig.json to customize your app’s metadata:
Step 5: Add Dependencies
Updatepackage.json to include any required dependencies:
Step 6: Define Schemas
Editzod.ts to define validation schemas for your app:
appKeysSchema credentials are stored encrypted and never exposed in API responses.Step 7: Implement Installation Handler
Editapi/add.ts to handle app installation:
Step 8: Add Business Logic
Create service files in thelib/ directory based on your app type:
Calendar App
packages/app-store/my-calendar/lib/CalendarService.ts
Payment App
packages/app-store/my-payment/lib/PaymentService.ts
Step 9: Add UI Components
Create React components for your app’s UI:packages/app-store/my-app/components/EventTypeAppCardInterface.tsx
Step 10: Generate App Files
Generate the app registry files:*.generated.ts files that register your app with the Cal.com platform.
Step 11: Test Your App
Start the development server:- Navigate to
http://localhost:3000/settings/admin/apps - Find your app in the list
- Enable it as an admin
- Install it from
http://localhost:3000/apps/your-app-slug - Test the installation flow
Step 12: Add App Store Assets
Customize your app’s App Store presence:DESCRIPTION.md
Add images and detailed description:Include at least 4 images. Use only filenames (e.g.,
1.jpeg), not paths.README.md
Add installation instructions:Step 13: Handle Environment Variables
Define admin-configurable settings inzod.ts:
/settings/admin for modification.
Watch Mode
During development, use watch mode to automatically regenerate files:Troubleshooting
App Not Appearing
- Ensure
yarn buildcompleted successfully - Check that
config.jsonis valid JSON - Restart the dev server
- Enable the app in
/settings/admin/apps
Type Errors
Run type checks:Generated Files Not Updating
Next Steps
App Types
Learn about different app service types
CLI Reference
Complete CLI command reference
Contributing
Guidelines for contributing apps to Cal.com
Examples
Browse existing apps for examples