> ## Documentation Index
> Fetch the complete documentation index at: https://docs.pipecat.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# init

> Scaffold a new Pipecat project with an interactive wizard or CLI flags

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:**

```shell theme={null}
pipecat init [OPTIONS]
```

**Options:**

<ParamField path="--output / -o" type="string">
  Output directory where files will be saved. Defaults to current directory.
</ParamField>

<ParamField path="--name / -n" type="string">
  Project name. Providing this flag triggers non-interactive mode.
</ParamField>

<ParamField path="--bot-type / -b" type="string">
  Bot type: `web` or `telephony`.
</ParamField>

<ParamField path="--transport / -t" type="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`.
</ParamField>

<ParamField path="--mode / -m" type="string">
  Pipeline mode: `cascade` or `realtime`.
</ParamField>

<ParamField path="--stt" type="string">
  Speech-to-Text service (cascade mode). e.g. `deepgram_stt`, `openai_stt`.
</ParamField>

<ParamField path="--llm" type="string">
  Language model service (cascade mode). e.g. `openai_llm`, `anthropic_llm`.
</ParamField>

<ParamField path="--tts" type="string">
  Text-to-Speech service (cascade mode). e.g. `cartesia_tts`, `elevenlabs_tts`.
</ParamField>

<ParamField path="--realtime" type="string">
  Realtime service (realtime mode). e.g. `openai_realtime`,
  `gemini_live_realtime`.
</ParamField>

<ParamField path="--video" type="string">
  Video avatar service (web bots only). e.g. `heygen_video`, `tavus_video`,
  `simli_video`.
</ParamField>

<ParamField path="--client-framework" type="string">
  Client framework (web bots only): `react`, `vanilla`, or `none`.
</ParamField>

<ParamField path="--client-server" type="string">
  Client dev server (when using `--client-framework react`): `vite` or `nextjs`.
</ParamField>

<ParamField path="--daily-pstn-mode" type="string">
  Daily PSTN mode (required when transport is `daily_pstn`): `dial-in` or
  `dial-out`.
</ParamField>

<ParamField path="--twilio-daily-sip-mode" type="string">
  Twilio + Daily SIP mode (required when transport is `twilio_daily_sip`):
  `dial-in` or `dial-out`.
</ParamField>

<ParamField path="--recording / --no-recording" type="boolean" default="false">
  Enable audio recording.
</ParamField>

<ParamField path="--transcription / --no-transcription" type="boolean" default="false">
  Enable transcription logging.
</ParamField>

<ParamField path="--video-input / --no-video-input" type="boolean" default="false">
  Enable video input (web bots only).
</ParamField>

<ParamField path="--video-output / --no-video-output" type="boolean" default="false">
  Enable video output (web bots only).
</ParamField>

<ParamField path="--deploy-to-cloud / --no-deploy-to-cloud" type="boolean" default="true">
  Generate Pipecat Cloud deployment files (Dockerfile, pcc-deploy.toml).
</ParamField>

<ParamField path="--enable-krisp / --no-enable-krisp" type="boolean" default="false">
  Enable Krisp noise cancellation (requires cloud deployment).
</ParamField>

<ParamField path="--observability / --no-observability" type="boolean" default="false">
  Enable observability.
</ParamField>

<ParamField path="--config / -c" type="string">
  Path to a JSON config file. Triggers non-interactive mode. CLI flags override
  file values.
</ParamField>

<ParamField path="--dry-run" type="boolean" default="false">
  Print the resolved configuration as JSON without generating any files.
</ParamField>

<ParamField path="--list-options" type="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.
</ParamField>

## 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.

All required fields must be specified or the command exits with a list of all missing/invalid fields.

## Examples

### Interactive Wizard

```shell theme={null}
pipecat init
```

### Non-Interactive (Cascade)

```shell theme={null}
pipecat init --name my-bot --bot-type web --transport daily \
  --mode cascade --stt deepgram_stt --llm openai_llm --tts cartesia_tts
```

### Non-Interactive (Realtime)

```shell theme={null}
pipecat init --name rt-bot --bot-type web --transport smallwebrtc \
  --mode realtime --realtime openai_realtime
```

### Multiple Transports

```shell theme={null}
pipecat init --name my-bot --bot-type web \
  --transport daily --transport smallwebrtc \
  --mode cascade --stt deepgram_stt --llm openai_llm --tts cartesia_tts
```

### With React Client

```shell theme={null}
pipecat init --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

```shell theme={null}
pipecat init --name call-bot --bot-type telephony --transport twilio \
  --mode cascade --stt deepgram_stt --llm openai_llm --tts cartesia_tts
```

### Discover Available Options

```shell theme={null}
# List all valid service values as JSON
pipecat init --list-options
```

Output:

```json theme={null}
{
  "bot_type": ["web", "telephony"],
  "transports": {
    "web": ["daily", "smallwebrtc"],
    "telephony": ["twilio", "twilio_daily_sip_dialin", "twilio_daily_sip_dialout", ...]
  },
  "stt": ["deepgram_stt", "openai_stt", ...],
  "llm": ["openai_llm", "anthropic_llm", ...],
  "tts": ["cartesia_tts", "elevenlabs_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:

```shell theme={null}
options=$(pipecat init --list-options)
tts=$(echo "$options" | jq -r '.tts[0]')
```

### Dry Run

```shell theme={null}
# Preview resolved config as JSON without generating files
pipecat init --name my-bot --bot-type web --transport daily \
  --mode cascade --stt deepgram_stt --llm openai_llm --tts cartesia_tts \
  --dry-run
```

### From Config File

```shell theme={null}
pipecat init --config project-config.json
```

Sample `project-config.json`:

```json theme={null}
{
  "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:

```shell theme={null}
pipecat init --config base-config.json --name custom-name --no-deploy-to-cloud
```

### Specify Output Directory

```shell theme={null}
pipecat init --output my-bot
```

## Generated Project Structure

```
mybot/
├── server/                 # Python bot server
│   ├── bot.py              # Main bot implementation
│   ├── 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
```
