Thank you for your interest in contributing! This document covers the process for submitting changes and the standards we follow.
-
Make sure you meet the Polkadot SDK requirements (Rust nightly toolchain,
wasm32-unknown-unknowntarget, etc.). -
Fork the repository and clone your fork.
-
Run the one-time setup:
just setup
-
Build and run tests:
cargo build --release cargo test
- All changes must go through a pull request — no direct pushes to
main. - Never force-push (
git push --force). - CI must pass before merging.
- Address all review comments or explain why you disagree.
- Branch from
main(or the current development branch). - Keep PRs focused on a single concern.
- Open as Draft while work is in progress; mark Ready for review when done.
- Write a clear description: what changed, why, and how to test.
- Ensure
cargo test,cargo clippy, and formatting all pass locally before requesting review.
# Rust formatting (requires nightly)
cargo +nightly fmt --all
# TOML formatting
taplo format --check --config .config/taplo.toml
# Clippy linting
cargo clippy --all-targets --all-features --workspace -- -D warningsSee CLAUDE.md for additional code review guidelines and project conventions.
This repository is dual-licensed. The license that applies depends on the crate:
| License | Crates |
|---|---|
| GPL-3.0-only | runtimes/, provider-node/, user-interfaces/ |
| Apache-2.0 | pallet/, primitives/, client/, precompiles/, storage-interfaces/ |
Each crate declares its applicable license in its Cargo.toml or
package.json.
By submitting a pull request, you agree to license your contribution under the same license that applies to the crate(s) you are modifying.
The security policy for this project is governed by the paritytech organization-level security policy. If you discover a vulnerability, please follow the responsible disclosure process described there — do not open a public issue.