Workspace Overview
The repository is divided into several workspace groups defined inpnpm-workspace.yaml:
Directory Structure
Key Packages
Public Packages
| Package | Path | Description |
|---|---|---|
langchain | libs/langchain/ | Main package with agents, chains, and orchestration |
@langchain/core | libs/langchain-core/ | Core abstractions and base classes (Runnable, BaseMessage, etc.) |
@langchain/community | libs/langchain-community/ | Community-maintained integrations |
@langchain/textsplitters | libs/langchain-textsplitters/ | Text splitting utilities |
@langchain/openai | libs/providers/langchain-openai/ | OpenAI integration (chat models, embeddings) |
@langchain/anthropic | libs/providers/langchain-anthropic/ | Anthropic integration |
@langchain/google-genai | libs/providers/langchain-google-genai/ | Google Generative AI integration |
@langchain/google-vertexai | libs/providers/langchain-google-vertexai/ | Google Vertex AI integration |
@langchain/aws | libs/providers/langchain-aws/ | AWS integrations (Bedrock) |
@langchain/cohere | libs/providers/langchain-cohere/ | Cohere integration |
| Other providers | libs/providers/langchain-*/ | Additional first-party integrations |
Internal Packages
| Package | Path | Description |
|---|---|---|
@langchain/build | internal/build/ | Build utilities and scripts |
@langchain/eslint | internal/eslint/ | Shared ESLint configuration and rules |
@langchain/tsconfig | internal/tsconfig/ | Shared TypeScript configuration |
@langchain/standard-tests | internal/standard-tests/ | Standard test suite for integrations |
@langchain/model-profiles | internal/model-profiles/ | Model profiles for testing |
@langchain/test-helpers | internal/test-helpers/ | Shared test utilities |
Tools
| Package | Path | Description |
|---|---|---|
create-langchain-integration | libs/create-langchain-integration/ | CLI for scaffolding integration packages |
Package Dependencies
Dependency Graph
The packages have a clear dependency hierarchy:Workspace References
Packages useworkspace: protocol for internal dependencies:
workspace:^- Use the workspace version, publish with caret rangeworkspace:*- Use the workspace version, publish with exact version
Build System
Turborepo
Turborepo orchestrates tasks across the monorepo with caching and parallelization. Configuration (turbo.json):
- Task dependencies:
build:compilemust complete beforetest - Incremental builds: Only rebuilds changed packages
- Remote caching: Share build cache across team (if configured)
- Parallel execution: Runs independent tasks in parallel
Build Pipeline
Each package follows a similar build pipeline:- TypeScript compilation -
tsdowncompiles TypeScript to ESM and CJS - Type generation - Generate
.d.tsand.d.ctsdeclaration files - Source maps - Generate source maps for debugging
tsdown Configuration
Packages usetsdown for building with dual module support (ESM + CJS).
Example (libs/langchain-core/tsdown.config.ts):
Package Structure
Each package follows a consistent structure:Common Scripts
All packages expose consistent npm scripts:Shared Configuration
TypeScript
Packages extend from shared TypeScript config:internal/tsconfig/base.json):
ESLint
Packages extend from shared ESLint config:- No
instanceof(use type guards) - No
process.env(except in tests) - No floating promises
- No explicit
any - Prefer template literals
- File extensions required in imports
Prettier
Shared Prettier config at root (.prettierrc):
Development Workflow
Adding a New Package
- Create package directory in appropriate location (
libs/orlibs/providers/) - Copy structure from existing package or use
create-langchain-integration - Configure
package.jsonwith correct dependencies - Extend shared configs for TypeScript, ESLint, Vitest
- Add to workspace (automatically picked up by pnpm)
- Build core first if your package depends on
@langchain/core
Working Across Packages
- Install dependencies -
pnpm install(from root) - Build core package -
pnpm --filter @langchain/core build - Build your package -
pnpm --filter your-package build - Run tests -
pnpm --filter your-package test
Running Commands
Dependency Management
Installing Dependencies
Dependency Overrides
Rootpackage.json can override transitive dependencies:
Environment Tests
The monorepo includes tests for different JavaScript environments:- Node.js ESM -
environment_tests/test-exports-esm/ - Node.js CJS -
environment_tests/test-exports-cjs/ - Cloudflare Workers -
environment_tests/test-exports-cf/ - Vercel Edge -
environment_tests/test-exports-vercel/ - Webpack -
environment_tests/test-exports-webpack/ - Vite -
environment_tests/test-exports-vite/ - Bun -
environment_tests/test-exports-bun/
Best Practices
Import Conventions
File Naming
- Source files:
my_module.ts(snake_case) - Test files:
my_module.test.ts,my_module.int.test.ts - Type definitions:
types.ts - Index files:
index.ts
Circular Dependencies
Avoid circular dependencies between packages. Check with:Next Steps
Contributing
Learn the contribution workflow
Creating Integrations
Build new integration packages
Testing
Understand the testing infrastructure
