This file provides guidance to AI coding agents working in this repository.
This is the Cloudflare Workers SDK monorepo containing tools and libraries for developing, testing, and deploying applications on Cloudflare. The main components are Wrangler (CLI), Miniflare (local dev simulator), and Create Cloudflare (project scaffolding).
Package Management:
- Use
pnpm- never use npm or yarn pnpm install- Install dependencies for all packagespnpm build- Build all packages (uses Turbo for caching)
Testing:
pnpm test:ci- Run tests in CI modepnpm test:e2e- Run end-to-end tests (requires Cloudflare credentials)pnpm test -F <package> "pattern"- Run a single test by name pattern
Code Quality:
pnpm check- Run all checks (lint, type, format)pnpm fix- Auto-fix linting issues and format code
Working with Specific Packages:
pnpm run build --filter <package-name>- Build specific packagepnpm run test:ci --filter <package-name>- Test specific packagepnpm --filter <package> test:watch- Watch mode for a specific package
Core Tools:
packages/wrangler/- Main CLI tool for Workers development and deploymentpackages/miniflare/- Local development simulator powered by workerd runtimepackages/create-cloudflare/- Project scaffolding CLI (C3)packages/vite-plugin-cloudflare/- Vite plugin for Cloudflare Workers
Development & Testing:
packages/vitest-pool-workers/- Vitest integration for testing Workers in actual runtimepackages/chrome-devtools-patches/- Modified Chrome DevTools for Workers debugging
Shared Libraries:
packages/pages-shared/- Code shared between Wrangler and Cloudflare Pagespackages/workers-shared/- Code shared between Wrangler and Workers Assetspackages/workers-utils/- Utility package for common Worker operationspackages/workflows-shared/- Internal Cloudflare Workflows functionalitypackages/containers-shared/- Shared container functionalitypackages/unenv-preset/- Cloudflare preset for unenv (Node.js polyfills)packages/cli/- SDK for building workers-sdk CLIspackages/kv-asset-handler/- KV-based asset handling for Workers Sites
Build System:
- Turbo (turborepo) orchestrates builds across packages
- TypeScript compilation with shared configs in
packages/workers-tsconfig/ - Shared ESLint config in
packages/eslint-config-shared/ - Dependency management via pnpm catalog system
Requirements:
- Node.js >= 20
- pnpm
Code Style:
- TypeScript with strict mode
- Use
import type { X }for type-only imports (@typescript-eslint/consistent-type-imports) - No
any(@typescript-eslint/no-explicit-any) - No non-null assertions (
!) - No floating promises - must be awaited or explicitly voided (
@typescript-eslint/no-floating-promises) - Always use curly braces for control flow (
curly: error) - Use
node:prefix for Node.js imports (import/enforce-node-protocol-usage) - Prefix unused variables with
_ - No
.only()in tests (no-only-tests/no-only-tests) - Format with Prettier - run
pnpm prettifyin the workspace root before committing - All changes to published packages require a changeset (see below)
Testing Standards:
- Unit tests with Vitest for all packages
- Fixture tests in
/fixturesdirectory for filesystem/Worker scenarios - E2E tests require real Cloudflare account credentials
- Use
vitest-pool-workersfor testing actual Workers runtime behavior
Git Workflow:
- Check you are not on main before committing. Create a new branch for your work from main if needed.
- Clean commit history required before first review
- Never commit without changesets for user-facing changes
- PR template requirements: Remove "Fixes #..." line when no relevant issue exists, keep all checkboxes (don't delete unchecked ones)
Creating Pull Requests:
- Always use the PR template from
.github/pull_request_template.md - PR title format:
[package name] description(e.g.[wrangler] Fix bug in dev command) - If the change doesn't require a changeset, add the
no-changeset-requiredlabel
/fixtures- Test fixtures and example applications/packages/wrangler/src- Main Wrangler CLI source code/packages/miniflare/src- Miniflare source/tools- Build scripts and deployment utilitiesturbo.json- Turbo build configurationpnpm-workspace.yaml- Workspace configuration
Package-specific tests: Most packages have their own test suites Integration tests: Use fixtures to test real-world scenarios E2E tests: Test against actual Cloudflare services (requires auth) Workers runtime tests: Use vitest-pool-workers for workerd-specific behavior
Run pnpm check before submitting changes to ensure all quality gates pass.
Every change to package code requires a changeset or it will not trigger a release. Read .changeset/README.md before creating changesets.