We welcome PRs of any size! Here's how to get started.
Be kind, be inclusive, be technical. We follow the Contributor Covenant.
This is a poly-repo-style monorepo. Every subfolder in packages/ or apps/ is intended to be splittable into its own git repository. Look for:
README.mdat the top of every package — describes that package in isolation- A meaningful
Makefile/package.json/Cargo.toml/foundry.tomlper package - Cross-package imports go through the SDK (
packages/sdk) — never import acrossapps/
| Branch | Purpose |
|---|---|
main |
Always deployable |
feature/* |
New features (PR target) |
fix/* |
Bug fixes |
docs/* |
Documentation only |
Use conventional commits (feat:, fix:, docs:, refactor:).
| Language | Linter / Formatter |
|---|---|
| TypeScript / React | ESLint + Prettier (root config) |
| Rust | cargo fmt + cargo clippy |
| Solidity | forge fmt + solhint |
| Python | ruff + black |
| Circom | circom --inspect |
Run make format before every commit.
Every package MUST ship tests. Add new tests next to the code you change.
make test # everything
pnpm --filter @ssi/sdk test # single packageCI will block merge if:
- Tests fail
- Coverage drops below 70%
- Lint fails
- Create a folder under
packages/orapps/ - Add
README.md, package config, at least one source file with a TODO - Register the workspace in root
package.json#workspaces(if TS / JS) - Update
docker-compose.ymlif it's a service - Add a one-line entry to root
README.md#repository-layout
Email security@ssi.example — do not file a public GitHub issue.
Drafts for upstream trackers live in docs/upstream-issue-drafts/.
They are not auto-filed — file from your own GitHub identity if/when you take them public.
| Draft | Upstream repo | What it anchors on |
|---|---|---|
docs/upstream-issue-drafts/rs-stellar-xdr-arbitrary-regression.md |
stellar/rs-stellar-xdr |
bug-origin: #[derive(Arbitrary)] calls try_size_hint |
docs/upstream-issue-drafts/rs-soroban-sdk-arbitrary-regression.md |
stellar/rs-soroban-sdk |
consumer-side: 20.0.0 cargo test regression |