Files
chainlit--chainlit/.github/copilot-instructions.md
T
wehub-resource-sync b7f52be4c9
Copilot Setup Steps / copilot-setup-steps (push) Waiting to run
CI / Run CI (push) Has been cancelled
CI / check-backend (push) Has been cancelled
CI / check-frontend (push) Has been cancelled
CI / tests (push) Has been cancelled
CI / e2e-tests (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:48:47 +08:00

5.8 KiB

Chainlit Development Instructions

Chainlit is a Python framework for building conversational AI applications with Python backend and React frontend. It uses uv for Python dependency management and pnpm for Node.js packages.

Always reference these instructions first and fallback to search or bash commands only when you encounter unexpected information that does not match the info here.

Working Effectively

Bootstrap, Build, and Test the Repository

CRITICAL: All commands must complete - NEVER CANCEL any build or test operations. Use appropriate timeouts.

  1. Install Dependencies (Required first):

    # Install uv (if not available)
    python3 -m pip install pipx
    python3 -m pipx install uv
    export PATH="$HOME/.local/bin:$PATH"
    
    # Install pnpm (if not available)
    npm install -g pnpm
    
    # Install Python dependencies - takes ~2 minutes, NEVER CANCEL
    cd backend
    uv sync --extra tests --extra mypy --extra dev --extra custom-data
    # Timeout: Use 300+ seconds (5+ minutes)
    
    # Install Node.js dependencies - takes ~3 minutes, NEVER CANCEL
    cd ..
    pnpm install --frozen-lockfile
    # Timeout: Use 600+ seconds (10+ minutes)
    # NOTE: Cypress download may fail due to network restrictions - this is expected in CI environments
    
  2. Run Tests:

    # Backend tests - takes ~17 seconds, NEVER CANCEL
    cd backend
    export PATH="$HOME/.local/bin:$PATH"
    uv run pytest --cov=chainlit/
    # Timeout: Use 120+ seconds (2+ minutes)
    
    # Frontend tests - takes ~4 seconds
    cd ../frontend
    pnpm test
    # Timeout: Use 60 seconds
    
    # E2E tests require Cypress download - may not work in restricted environments
    # If available: pnpm test:e2e (takes variable time depending on tests)
    
  3. Run Development Servers:

    # Start backend (in one terminal)
    cd backend
    export PATH="$HOME/.local/bin:$PATH"
    uv run chainlit run chainlit/sample/hello.py -h
    # Available at http://localhost:8000
    
    # Start frontend dev server (in another terminal)
    cd frontend
    pnpm run dev
    # Available at http://localhost:5173/
    

Validation

Manual Validation Requirements

  • ALWAYS manually validate any changes by running complete scenarios.
  • ALWAYS test the Chainlit application after making changes.
  • Create a test app and verify it runs: uv run chainlit run /path/to/test.py -h
  • ALWAYS run through at least one complete user workflow after making changes.

Linting and Formatting - takes ~2 minutes, NEVER CANCEL

# Lint (check)
pnpm lint
# Timeout: Use 300+ seconds (5+ minutes)

# Lint (auto-fix)
pnpm lint:fix

# Check formatting
pnpm format-check

# Fix formatting
pnpm format

# Python (scripts/ wrappers around ruff and mypy)
uv run scripts/lint.py
uv run scripts/format.py
uv run scripts/format.py --check

CI Requirements

  • ALWAYS run pnpm lint and pnpm format-check before committing or the CI (.github/workflows/ci.yaml) will fail.
  • The CI runs: pytest, lint-backend, lint-ui, and e2e-tests.
  • NEVER CANCEL any CI commands - they take time but must complete.

Key Project Structure

Repository Root

/
├── README.md
├── CONTRIBUTING.md
├── package.json              # Root pnpm workspace config
├── pnpm-workspace.yaml       # Workspace definition
├── backend/                  # Python backend with uv
├── frontend/                 # React frontend app
├── libs/
│   ├── react-client/         # React client library
│   └── copilot/             # Copilot functionality
├── cypress/                  # E2E tests
└── .github/
    ├── workflows/            # CI/CD pipelines
    └── actions/              # Reusable GitHub actions

Working with the Backend

  • Technology: Python 3.10+ with uv, FastAPI, SocketIO
  • Entry point: backend/chainlit/
  • Tests: backend/tests/
  • Dependencies: Defined in backend/pyproject.toml
  • Hello app: backend/chainlit/sample/hello.py

Working with the Frontend

  • Technology: React 18+ with Vite, TypeScript, Tailwind CSS
  • Entry point: frontend/src/
  • Dependencies: Defined in frontend/package.json
  • Build output: frontend/dist/

Common Tasks

Creating a New Chainlit App

# Create app.py
import chainlit as cl

@cl.on_message
async def main(message: cl.Message):
    await cl.Message(content=f"You said: {message.content}").send()

# Run it
uv run chainlit run app.py -w

Timing Expectations

  • pnpm install: ~3 minutes (may fail on Cypress - this is normal)
  • uv install: ~2 minutes
  • pnpm build: ~1 minute
  • pnpm run lint: ~2 minutes
  • Backend tests: ~17 seconds
  • Frontend tests: ~4 seconds
  • pnpm format-check: ~12 seconds
  • pnpm format: ~12 seconds

Common Gotchas

  • NEVER CANCEL long-running operations - they need time to complete.
  • Cypress download often fails in CI environments - this is expected.
  • Use uv run prefix for all Python commands in backend.
  • Use export PATH="$HOME/.local/bin:$PATH" to ensure uv is available.
  • Python lint/format/type-check: use uv run scripts/lint.py, uv run scripts/format.py, uv run scripts/type_check.py from repo root.
  • Frontend dev server connects to backend at localhost:8000.
  • Always start backend before frontend for development.

File Locations for Quick Reference

  • Main CLI: backend/chainlit/cli/
  • Server code: backend/chainlit/server.py
  • Frontend app: frontend/src/App.tsx
  • React client: libs/react-client/src/
  • CI workflows: .github/workflows/ci.yaml
  • uv config: backend/pyproject.toml
  • Frontend config: frontend/package.json

Requirements

  • Python: >= 3.10
  • Node.js: >= 20 (24+ recommended)
  • uv: 2.1.3 (install via pipx)
  • pnpm: Latest (install via npm)