Skip to main content
The App Store CLI provides tools for creating, editing, and managing Cal.com apps.

Installation

The CLI is included in the Cal.com monorepo:

Commands

create

Create a new app in the app store.

Interactive Mode

Run without flags to use the interactive wizard:
You’ll be prompted for:
  • App name
  • Description
  • Category
  • Publisher name
  • Publisher email
  • Template selection

Non-Interactive Mode

Provide all options as flags for automation:

Options

string
required
App display name. The slug is automatically generated from this.
string
required
Short description (recommended max 10 words). Longer descriptions go in DESCRIPTION.md.
string
required
App category. Options:
  • analytics - Analytics and tracking
  • automation - AI & Automation
  • calendar - Calendar integrations
  • conferencing - Video conferencing
  • crm - CRM integrations
  • messaging - Messaging services
  • payment - Payment processing
  • other - Other apps
string
default:"Your Name"
Publisher name or company
string
default:"email@example.com"
Publisher contact email
string
required
Template to use. Options:
  • basic - Minimal installable app
  • event-type-app-card - Event type configuration card
  • booking-pages-tag - Booking page tags/scripts
  • event-type-location-video-static - Static video location
  • general-app-settings - App settings interface
  • link-as-an-app - External link redirect
Required when using link-as-an-app template. The external URL to redirect to.

Example

Output:

create-template

Create a new app template (for Cal.com core developers).
Templates are stored in packages/app-store/templates/ and used as scaffolds for new apps.
Most developers should use create, not create-template. Templates are for creating reusable scaffolds.

edit

Edit an existing app’s configuration.

Options

string
required
The slug of the app to edit (matches the directory name)

Example

The interactive wizard will pre-fill existing values and allow you to modify:
  • App name
  • Description
  • Category
  • Publisher
  • Email
  • Template
Changing the slug will rename the app directory. Ensure no other processes are accessing the app files.

edit-template

Edit an existing template.

delete

Delete an app from the app store.
This permanently deletes the app directory and all its contents. This action cannot be undone.

Options

string
required
The slug of the app to delete

Example

delete-template

Delete a template.

Build Commands

The CLI includes build commands for generating app registry files.

build

Generate app registry files once:
This generates:
  • apps.metadata.generated.ts
  • apps.schemas.generated.ts
  • apps.server.generated.ts
  • apps.browser.generated.tsx
  • calendar.services.generated.ts
  • crm.apps.generated.ts
  • payment.services.generated.ts
  • video.adapters.generated.ts
  • analytics.services.generated.ts
  • redirect-apps.generated.ts

watch

Watch for changes and regenerate files automatically:
Useful during development. The CLI watches for:
  • New app directories
  • Changes to config.json files
  • Deleted app directories
Run yarn watch in a separate terminal during development to automatically regenerate registry files.

Package.json Scripts

The CLI package defines these scripts:
  • yarn build - Generate registry files
  • yarn cli <command> - Run CLI commands
  • yarn watch - Watch mode
  • yarn generate - Alias for build

Slug Generation

The CLI automatically generates slugs from app names:
  • Converts to lowercase
  • Replaces non-alphanumeric characters with hyphens
  • Example: “My Custom App” → “my-custom-app”
The slug is used as:
  • Directory name in packages/app-store/
  • App URL path: /apps/<slug>
  • Package name: @calcom/<slug>
  • App identifier in the database

File Generation

The build process scans all app directories and generates registry files that:
  1. Import app metadata from config.json or _metadata.ts
  2. Export app schemas from zod.ts
  3. Register API handlers from api/index.ts
  4. Map UI components from components/
  5. Register services from lib/ (Calendar, CRM, Payment, Video, Analytics)

Generation Process

E2E Mode

In E2E test mode (NEXT_PUBLIC_IS_E2E=1), calendar, video, and analytics services are disabled:

Validation

The CLI validates:
  • Category must be one of the valid categories
  • Template must exist in packages/app-store/templates/
  • External link URL required for link-as-an-app template
  • Config.json must be valid JSON and match AppMetaSchema

Templates

Templates are located in packages/app-store/templates/:
Each template includes:
  • config.json - Template metadata
  • package.json - Dependencies
  • index.ts - Exports
  • zod.ts - Schemas
  • api/ - API handlers
  • components/ - UI components (if applicable)
  • static/icon.svg - Placeholder icon

Cross-Platform Support

The CLI supports Windows, macOS, and Linux:
  • Windows: Uses xcopy, move, mkdir, rd commands
  • Unix: Uses cp, mv, mkdir, rm commands
Platform detection is automatic based on os.platform().

Troubleshooting

Command Not Found

Ensure you’re in the correct directory:

Invalid Template

List available templates:

Invalid Category

Valid categories:
  • analytics
  • automation
  • calendar
  • conferencing
  • crm
  • messaging
  • payment
  • other

App Not Appearing

After creating an app:
  1. Run yarn build to regenerate registry files
  2. Restart the dev server
  3. Enable the app in /settings/admin/apps

Directory Already Exists

The CLI won’t overwrite existing apps. Use edit to modify an existing app or delete to remove it first.

Advanced Usage

CI/CD Integration

Use non-interactive mode in CI pipelines:

Scripting

Create multiple apps with a script:

Custom Templates

Create your own templates:
  1. Use yarn cli create-template to create a template
  2. Customize the scaffold files
  3. Use it with --template your-template-name

Next Steps

Build an App

Complete guide to building your first app

App Types

Learn about different app service types

Source Code

View the CLI source code