# LangGraphJS Development Guide

## Build & Test Commands
- Build: `pnpm build`
- Lint: `pnpm lint` (fix with `pnpm lint:fix`) — uses oxlint
- Format: `pnpm format` (check with `pnpm format:check`) — uses oxfmt
- Test: `pnpm test` (single test: `pnpm test:single /path/to/yourtest.test.ts`)
- Integration tests: `pnpm test:int` (start deps: `pnpm test:int:deps`, stop: `pnpm test:int:deps:down`)

## Code Style Guidelines
- **TypeScript**: Target ES2021, NodeNext modules, strict typing enabled
- **Formatting**: 2-space indentation, 80 char width, double quotes, semicolons required
- **Naming**: camelCase (variables/functions), CamelCase (classes), UPPER_CASE (constants)
- **Files**: lowercase .ts, tests use .test.ts or .int.test.ts for integration
- **Error Handling**: Custom error classes that extend BaseLangGraphError
- **Imports**: ES modules with file extensions, order: external deps → internal modules → types
- **Project Structure**: Monorepo with pnpm workspaces, libs/ for packages, examples/ for demos
- **New Features**: Match patterns of existing code, ensure proper testing, discuss major abstractions in issues

## Library Architecture

### System Layers
- **Channels Layer**: Base communication & state management (BaseChannel, LastValue, Topic)
- **Checkpointer Layer**: Persistence and state serialization across backends
- **Pregel Layer**: Message passing execution engine with superstep-based computation
- **Graph Layer**: High-level APIs for workflow definition (Graph, StateGraph)

### Key Dependencies
- Channels provide state management primitives used by Pregel nodes
- Checkpointer enables persistence, serialization, and time-travel debugging
- Pregel implements the execution engine using channels for communication
- Graph builds on Pregel adding workflow semantics and node/edge definitions
- StateGraph extends Graph with shared state management capabilities