Skip to main content
Create a new Pipecat project with guided setup for bot type, transport, AI services, and deployment options. Supports both an interactive wizard and a fully non-interactive mode for automation. Usage:
pipecat create [TARGET_DIR] [OPTIONS]
To make an existing project agent-ready (so an AI coding assistant follows Pipecat conventions and can drive pipecat create for you), see pipecat init.
Arguments:
TARGET_DIR
string
The exact directory to scaffold into. pipecat create . scaffolds into the current directory and pipecat create my-bot into ./my-bot, with the project name derived from the directory. Omit it to instead create a <name> subfolder under --output (or the current directory). Pass either TARGET_DIR or --output, not both.
Options:
--output / -o
string
Output directory where files will be saved. Defaults to current directory.
--name / -n
string
Project name. Providing this flag triggers non-interactive mode.
--bot-type / -b
string
Bot type: web or telephony. Optional — inferred from --transport when omitted (telephony if any transport is a telephony provider, otherwise web).
--transport / -t
string
Transport provider. Repeatable for multiple transports (e.g. -t daily -t smallwebrtc). Valid values: daily, smallwebrtc, twilio, telnyx, plivo, exotel, daily_pstn, twilio_daily_sip.
--mode / -m
string
Pipeline mode: cascade or realtime.
--stt
string
Speech-to-Text service (cascade mode). e.g. deepgram_stt, openai_stt.
--llm
string
Language model service (cascade mode). e.g. openai_llm, anthropic_llm.
--tts
string
Text-to-Speech service (cascade mode). e.g. cartesia_tts, elevenlabs_tts.
--realtime
string
Realtime service (realtime mode). e.g. openai_realtime, gemini_live_realtime.
--video
string
Video avatar service (web bots only). e.g. heygen_video, tavus_video, simli_video.
--client-framework
string
Client framework (web bots only): react, vanilla, or none.
--client-server
string
Client dev server (when using --client-framework react): vite or nextjs.
--daily-pstn-mode
string
Daily PSTN mode (required when transport is daily_pstn): dial-in or dial-out.
--twilio-daily-sip-mode
string
Twilio + Daily SIP mode (required when transport is twilio_daily_sip): dial-in or dial-out.
--recording / --no-recording
boolean
default:"false"
Enable audio recording.
--transcription / --no-transcription
boolean
default:"false"
Enable transcription logging.
--video-input / --no-video-input
boolean
default:"false"
Enable video input (web bots only).
--video-output / --no-video-output
boolean
default:"false"
Enable video output (web bots only).
--deploy-to-cloud / --no-deploy-to-cloud
boolean
default:"true"
Generate Pipecat Cloud deployment files (Dockerfile, pcc-deploy.toml).
--enable-krisp / --no-enable-krisp
boolean
default:"false"
Enable Krisp noise cancellation (requires cloud deployment).
--observability / --no-observability
boolean
default:"false"
Enable observability.
--eval / --no-eval
boolean
default:"false"
Make the generated bot eval-ready: add an eval transport entry and starter scenarios in server/evals/, plus the dependencies to run them. See the evals docs for the verification workflow.
--config / -c
string
Path to a JSON config file. Triggers non-interactive mode. CLI flags override file values.
--dry-run
boolean
default:"false"
Print the resolved configuration as JSON without generating any files.
--list-options
boolean
default:"false"
Print all available service options as JSON and exit. Useful for CI scripts and coding agents that need to discover valid values at runtime.

Quickstart Project

To scaffold the canned quickstart project (sensible defaults, no prompts):
pipecat create quickstart

Interactive Setup

When run without --name or --config, the CLI guides you through selecting:
  • Bot type and client framework - Phone, web (Next.js, Vite, Vanilla JS), or mobile
  • Transport provider - Daily, Twilio, Telnyx, Plivo, Exotel
  • Pipeline mode - Cascade or Realtime
  • AI services - STT, LLM, and TTS providers
  • Optional features - Additional capabilities for your bot
  • Deployment target - Local development or Pipecat Cloud

Non-Interactive Mode

When --name or --config is provided, all configuration is taken from CLI flags or a JSON config file with no interactive prompts. This is useful for automation, scripting, and coding agents. (When you scaffold in place with a TARGET_DIR, supplying --bot-type or --config is enough to go non-interactive — the project name is derived from the directory.) All required fields must be specified or the command exits with a list of all missing/invalid fields. Bot type is not required — it’s inferred from --transport when omitted.

Examples

Interactive Wizard

pipecat create

In-Place (current directory)

pipecat create . --transport daily --mode cascade \
  --stt deepgram_stt --llm openai_llm --tts cartesia_tts
Scaffolds into the current directory, deriving the project name from it. Bot type is inferred from the transport (web here), so --bot-type is optional.

Non-Interactive (Cascade)

pipecat create --name my-bot --bot-type web --transport daily \
  --mode cascade --stt deepgram_stt --llm openai_llm --tts cartesia_tts

Non-Interactive (Realtime)

pipecat create --name rt-bot --bot-type web --transport smallwebrtc \
  --mode realtime --realtime openai_realtime

Multiple Transports

pipecat create --name my-bot --bot-type web \
  --transport daily --transport smallwebrtc \
  --mode cascade --stt deepgram_stt --llm openai_llm --tts cartesia_tts

With React Client

pipecat create --name my-bot --bot-type web --transport daily \
  --mode cascade --stt deepgram_stt --llm openai_llm --tts cartesia_tts \
  --client-framework react --client-server vite

Telephony

pipecat create --name call-bot --bot-type telephony --transport twilio \
  --mode cascade --stt deepgram_stt --llm openai_llm --tts cartesia_tts

Eval-Ready Bot

pipecat create --name my-bot --bot-type web --transport daily \
  --mode cascade --stt deepgram_stt --llm openai_llm --tts cartesia_tts \
  --eval

Discover Available Options

# List all valid service values as JSON
pipecat create --list-options
Output:
{
  "bot_type": ["web", "telephony"],
  "transports": {
    "web": ["daily", "smallwebrtc"],
    "telephony": ["twilio", "twilio_daily_sip_dialin", "twilio_daily_sip_dialout", ...]
  },
  "stt": ["deepgram_stt", "mistral_stt", "openai_stt", "xai_stt", ...],
  "llm": ["openai_llm", "anthropic_llm", ...],
  "tts": ["cartesia_tts", "elevenlabs_tts", "soniox_tts", ...],
  "realtime": ["openai_realtime", "gemini_live_realtime", ...],
  "video": ["heygen_video", "tavus_video", "simli_video"]
}
This is useful for scripting — for example, to pick a random TTS provider:
options=$(pipecat create --list-options)
tts=$(echo "$options" | jq -r '.tts[0]')

Dry Run

# Preview resolved config as JSON without generating files
pipecat create --name my-bot --bot-type web --transport daily \
  --mode cascade --stt deepgram_stt --llm openai_llm --tts cartesia_tts \
  --dry-run

From Config File

pipecat create --config project-config.json
Sample project-config.json:
{
  "project_name": "my-bot",
  "bot_type": "web",
  "transports": ["daily"],
  "mode": "cascade",
  "stt_service": "deepgram_stt",
  "llm_service": "openai_llm",
  "tts_service": "cartesia_tts",
  "recording": false,
  "transcription": false,
  "deploy_to_cloud": true,
  "enable_krisp": false,
  "enable_observability": false
}
CLI flags override any values in the file, so you can use a base config and customize per-run:
pipecat create --config base-config.json --name custom-name --no-deploy-to-cloud

Specify Output Directory

pipecat create --output my-bot

Generated Project Structure

mybot/
├── server/                 # Python bot server
│   ├── bot.py              # Main bot implementation
│   ├── evals/              # Starter eval scenarios (with --eval)
│   ├── pyproject.toml      # Python dependencies
│   ├── .env.example        # Environment variables template
│   ├── Dockerfile          # Container image (if cloud enabled)
│   └── pcc-deploy.toml     # Deployment config (if cloud enabled)
├── client/                 # Web client (if generated)
│   ├── src/
│   ├── package.json
│   └── ...
├── .gitignore
└── README.md               # Project setup instructions