Thank you for your interest in contributing to Composio. This guide covers the root SDK repository. The monorepo contains the TypeScript SDK, Python SDK, docs site, examples, and release tooling.
- Development Setup
- Project Structure
- Development Commands
- Coding Standards
- Documentation Requirements
- Pull Request Process
- Creating New Providers
- Testing Guidelines
- Release Process
- Questions and Support
Tool versions are pinned in mise.toml, which is the source of truth for local development and CI:
- Node.js 24.17.0
- pnpm 11.8.0
- Bun 1.3.10
- Deno 2.6.7
- Python 3.12
- uv 0.8.19
Use mise to install the toolchain:
mise installpnpm is installed through mise's npm backend. Do not rely on Corepack for this repository.
-
Fork and clone the repository:
git clone https://github.com/YOUR_USERNAME/composio.git cd composio -
Install the pinned toolchain:
mise install
-
Install dependencies:
pnpm install
-
Build the project:
pnpm build
-
Run tests:
pnpm test
composio/
├── ts/ # TypeScript SDK workspace
│ ├── packages/
│ │ ├── core/ # Core SDK package (@composio/core)
│ │ ├── cli/ # CLI binary and command implementations
│ │ ├── cli-keyring/ # Keyring helper for the CLI
│ │ ├── cli-local-tools/ # Local tools support for the CLI
│ │ ├── providers/ # AI framework provider adapters
│ │ ├── json-schema-to-zod/ # Schema conversion utility
│ │ └── ts-builders/ # TypeScript build helpers
│ ├── e2e-tests/ # Runtime and CLI end-to-end tests
│ ├── examples/ # TypeScript examples
│ └── scripts/ # TypeScript build and maintenance scripts
├── python/ # Python SDK
│ ├── composio/ # Main Python package
│ ├── providers/ # Python provider adapters
│ ├── tests/ # pytest test suite
│ ├── scripts/ # Python development and release scripts
│ └── docs/ # Python release notes and process docs
├── docs/ # Documentation site
├── test/ # Root-level release/install script tests
└── .github/ # GitHub Actions and shared CI actions
# Build all packages
pnpm build
# Build TypeScript packages only
pnpm build:packages
# Lint TypeScript packages
pnpm lint
# Fix lint issues where possible
pnpm lint:fix
# Format supported files
pnpm format
# Create a new TypeScript provider
pnpm create:provider <provider-name> [--agentic]
# Create a new TypeScript example
pnpm create:example <example-name>
# Check peer dependencies
pnpm check:peer-deps
# Update peer dependencies
pnpm update:peer-deps- Follow the style of the package you are editing.
- Use TypeScript for new TypeScript SDK code.
- Use named exports for public APIs unless the local package pattern says otherwise.
- Keep public API changes typed and documented with TSDoc.
- Add focused tests for new behavior and bug fixes.
- Use ESLint and Prettier through the repo scripts.
- Keep generated or vendored code out of manual edits unless the package explicitly owns that output.
- Follow the existing Python SDK layout under
python/. - Use Ruff formatting and linting through the Python make targets.
- Keep provider-specific changes inside the relevant
python/providers/*package. - Add pytest coverage for behavior changes.
- Use the existing error classes and result shapes in the package you are editing.
- Include enough context in error messages to identify the failing operation.
- Avoid swallowing errors unless the caller has an explicit fallback path.
Update docs when a change affects public behavior, install flows, examples, environment variables, release steps, or provider usage.
For documentation-site work, read docs/CLAUDE.md first. It documents the docs app, MDX conventions, link checking, generated data, and docs branch workflow.
Package documentation should generally include:
- A short package description.
- Installation instructions.
- Usage examples.
- Public API notes.
- Environment variables or authentication requirements when relevant.
- Provider limitations or streaming details when relevant.
-
Create a branch from the target base branch. Most active SDK and docs work targets
next.git checkout next git pull origin next git checkout -b feature/your-feature-name
-
Make focused changes that match the issue or feature scope.
-
Add or update tests for behavior changes.
-
Update documentation when user-facing behavior changes.
-
Add a changeset for changes that affect published TypeScript packages:
pnpm changeset
Root-level documentation-only changes, such as edits to this file, do not need a changeset.
-
Run the smallest meaningful verification command locally before opening the PR.
-
Push your branch and open a PR against the correct base branch.
Use the TypeScript provider creation script:
pnpm create:provider my-provider [--agentic]Then:
- Implement the required provider methods.
- Add tests under the provider package.
- Add examples or docs when the provider has user-facing setup details.
- Run the package tests and relevant build checks.
Use the Python provider creation target from the python/ directory:
cd python
make create-provider name=my-providerFor agentic providers:
cd python
make create-provider name=my-provider agentic=trueThen add provider tests and run the relevant Python checks.
Run the root TypeScript test suite:
pnpm testRun all TypeScript end-to-end tests:
pnpm test:e2eRun runtime-specific end-to-end tests:
pnpm test:e2e:node
pnpm test:e2e:deno
pnpm test:e2e:cli
pnpm test:e2e:cloudflareOpen the Vitest UI:
pnpm test:uiSet up the Python development environment:
cd python
make env
source .venv/bin/activateRun Python checks:
make fmt
make chk
make tst
make sntYou can also run a focused pytest command through uv:
uv run pytest tests/test_sdk.py -vFor docs changes:
cd docs
bun install
bun run build
bun run lint:linksSee docs/CLAUDE.md for the full docs workflow.
Only maintainers publish releases.
For TypeScript package and CLI release details, use ts/docs/internal/release.md. The root scripts are:
pnpm changeset
pnpm changeset:version
pnpm changeset:releaseFor Python package release details, use python/docs/release.md. Python package versioning and release preparation are handled from the python/ workspace.
- Join our Discord Community
- Check our Documentation
- File issues on GitHub
By contributing to Composio SDK, you agree that your contributions will be licensed under the ISC License.