Skip to content

Configuration Reference

code2cast stores project configuration in .code2cast/config.json at the root of your project.

Example

json
{
  "name": "My Project",
  "description": "A brief summary of what this project does",
  "include": [
    "**/*.ts",
    "**/*.tsx",
    "**/*.js",
    "**/*.jsx",
    "**/*.py",
    "**/*.go",
    "**/*.rs"
  ],
  "exclude": [
    "node_modules",
    "dist",
    ".next",
    ".git",
    "*.lock"
  ],
  "theme": "casual",
  "durationMinutes": 5,
  "cast": [
    {
      "name": "Host",
      "role": "host"
    },
    {
      "name": "Guest",
      "role": "guest"
    }
  ]
}

Fields

name

string · Required

Display name for the project

Minimum length: 1

description

string · Optional

Short description of the project

include

string[] · Optional · Default: ["**/*.ts","**/*.tsx","**/*.js","**/*.jsx","**/*.py","**/*.go","**/*.rs"]

Glob patterns for files to include when analysing the codebase

exclude

string[] · Optional · Default: ["node_modules","dist",".next",".git","*.lock"]

Glob patterns for files to exclude

voiceModel

string · Optional

Preferred voice model for audio generation

theme

"casual" | "technical" | "entertaining" | "executive" · Optional · Default: "casual"

Podcast tone — casual, technical, entertaining, or executive

durationMinutes

number · Optional · Default: 5

Target episode duration in minutes (decimals allowed, e.g. 0.5 for 30 seconds)

Must be greater than 0

cast

object[] · Optional · Default: [{"name":"Host","role":"host"},{"name":"Guest","role":"guest"}]

Podcast speakers — each with a name, role, optional persona description, and optional ElevenLabs voice ID

Themes

casual

Like chatting with a friend about code

technical

Detailed and thorough, aimed at engineers

entertaining

Light-hearted with humour and analogies

executive

High-level, focused on impact and decisions

JSON Schema

The full JSON Schema for the configuration file, generated from the Zod schema:

json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "minLength": 1,
      "description": "Display name for the project"
    },
    "description": {
      "description": "Short description of the project",
      "type": "string"
    },
    "include": {
      "default": [
        "**/*.ts",
        "**/*.tsx",
        "**/*.js",
        "**/*.jsx",
        "**/*.py",
        "**/*.go",
        "**/*.rs"
      ],
      "description": "Glob patterns for files to include when analysing the codebase",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "exclude": {
      "default": [
        "node_modules",
        "dist",
        ".next",
        ".git",
        "*.lock"
      ],
      "description": "Glob patterns for files to exclude",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "voiceModel": {
      "description": "Preferred voice model for audio generation",
      "type": "string"
    },
    "theme": {
      "default": "casual",
      "description": "Podcast tone — casual, technical, entertaining, or executive",
      "type": "string",
      "enum": [
        "casual",
        "technical",
        "entertaining",
        "executive"
      ]
    },
    "durationMinutes": {
      "default": 5,
      "description": "Target episode duration in minutes (decimals allowed, e.g. 0.5 for 30 seconds)",
      "type": "number",
      "exclusiveMinimum": 0
    },
    "cast": {
      "default": [
        {
          "name": "Host",
          "role": "host"
        },
        {
          "name": "Guest",
          "role": "guest"
        }
      ],
      "description": "Podcast speakers — each with a name, role, optional persona description, and optional ElevenLabs voice ID",
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "description": "Speaker name as it appears in the script (e.g. Alex, Dr. Smith)"
          },
          "role": {
            "type": "string",
            "enum": [
              "host",
              "guest",
              "narrator"
            ],
            "description": "Speaker role: host drives the conversation, guest provides insights, narrator for solo episodes"
          },
          "description": {
            "description": "Brief persona description for script generation (e.g. 'Chief architect', 'Junior developer exploring the codebase')",
            "type": "string"
          },
          "voiceId": {
            "description": "ElevenLabs voice ID for this speaker. If omitted, a default voice is assigned.",
            "type": "string"
          }
        },
        "required": [
          "name",
          "role"
        ],
        "additionalProperties": false
      }
    }
  },
  "required": [
    "name",
    "include",
    "exclude",
    "theme",
    "durationMinutes",
    "cast"
  ],
  "additionalProperties": false
}