x402 welcomes contributions of schemes, middleware, new chain support, and more. We aim to make x402 as secure and trusted as possible. Merging contributions is at the discretion of the x402 Foundation team, based on the risk of the contribution and the quality of implementation.
The x402 repository contains implementations in multiple languages plus protocol specifications.
x402/
├── typescript/ # TypeScript SDK (pnpm monorepo)
├── python/ # Python SDK
├── go/ # Go SDK
├── java/ # Java SDK
├── specs/ # Protocol specifications
└── examples/ # Example implementations
├── typescript/
├── python/
└── go/
For setup instructions, development workflow, and contribution patterns for each SDK:
Check existing issues before starting work. For larger features, open a discussion first.
Fork the repository and clone your fork locally.
git checkout -b feature/your-feature-name- Follow the language-specific development guide
- Write tests for new functionality
- Update documentation as needed
Run tests for the packages you modified:
# TypeScript
cd typescript && pnpm test
# Python
cd python/x402 && uv run pytest
# Go
cd go && make test- Fill out the PR template completely
- Link related issues
- Ensure CI passes
All commits must be signed. Configure commit signing before submitting:
git config --global commit.gpgsign trueThe paywall is a browser UI component that exists across TypeScript, Go, and Python. If you modify paywall source files in TypeScript:
cd typescript && pnpm --filter @x402/paywall build:paywallThis generates template files in:
typescript/packages/http/paywall/src/evm/gen/template.tstypescript/packages/http/paywall/src/svm/gen/template.tsgo/http/evm_paywall_template.gogo/http/svm_paywall_template.gopython/x402/src/x402/evm_paywall_template.pypython/x402/src/x402/svm_paywall_template.py
Commit the generated files with your PR.
Schemes dictate how funds are moved from client to server. New schemes require thorough review by the x402 Foundation team.
Recommended approach:
- Propose a scheme by opening a PR with a spec in
specs/schemes/ - Discuss the architecture and purpose in that PR
- Once the spec is merged, proceed to implementation
See specs/CONTRIBUTING.md for spec writing guidelines.
x402 aims to be chain-agnostic. New chain implementations are welcome.
Because different chains have different best practices, a scheme may have a different mechanism on a new chain than it does on EVM. If the scheme mechanism varies from the reference implementation, the x402 Foundation will re-audit the scheme for that chain before accepting.
Each language SDK defines interfaces that chain mechanisms must implement:
TypeScript (@x402/core):
SchemeNetworkClient- Signs payment payloadsSchemeNetworkServer- Validates payment requirementsSchemeNetworkFacilitator- Verifies and settles payments
Go (github.com/coinbase/x402/go):
ClientScheme- Signs payment payloadsServerScheme- Validates payment requirementsFacilitatorScheme- Verifies and settles payments
Python (x402):
- Implement signing in
src/x402/your_chain.py - Integrate with the base client in
src/x402/clients/base.py
See the language-specific guides for detailed implementation patterns.
HTTP middleware packages should:
- Follow best practices for the target framework
- Include tests
- Follow x402 client/server patterns from existing middleware
Examples for each SDK live in examples/:
examples/
├── typescript/ # TypeScript examples
├── python/ # Python examples
└── go/ # Go examples
When adding a new example, follow the patterns in the language-specific guide.
- Search existing issues
- Open a new issue with questions
- Check the language-specific guides for common patterns