Thank you for your interest in contributing! Please read this guide before opening issues or pull requests.
- Fork the repository and clone your fork.
- Install dependencies:
pnpm install - Copy
.env.exampleto.envand fill in the required values (see ENV_VARS.md). - Start required services:
docker-compose up -d rabbitmq - Run migrations:
pnpm prisma:generate && pnpm prisma:migrate - Verify everything works:
pnpm test && pnpm lint
Use one of the following prefixes:
| Prefix | When to use |
|---|---|
feat/ |
New feature |
fix/ |
Bug fix |
docs/ |
Documentation only |
refactor/ |
Code change that is neither a fix nor a feature |
test/ |
Adding or updating tests |
chore/ |
Build, CI, or dependency updates |
Examples: feat/p2p-transfer, fix/kyc-validation, docs/contributing-guidelines
Follow the Conventional Commits specification:
<type>(optional scope): <short summary>
[optional body]
[optional footer — e.g. Closes #123]
Types: feat, fix, docs, refactor, test, chore, perf, ci
Rules:
- Summary in imperative mood, lowercase, no trailing period.
- Limit the subject line to 72 characters.
- Reference issues in the footer:
Closes #123orFixes #123.
Examples:
feat(transfer): add createTransfer with KYC validation
fix(auth): handle expired JWT refresh tokens
docs: add contributing guidelines
Closes #478
- Every new feature or bug fix must include tests.
- Tests live in the
tests/directory and mirror thesrc/structure. - Run the full suite before opening a PR:
pnpm test
pnpm test:coverage # optional but appreciated- All tests must pass. PRs with failing tests will not be merged.
- Aim to keep coverage at or above the current project baseline.
- Push your branch and open a PR against
dev(notmain). - Fill in the PR template (summary, what was tested, any blocked items).
- Keep the PR focused — one concern per PR.
- Request a review from at least one maintainer.
- For destructive database migrations, add the
allow-destructive-migrationlabel; the CI pipeline will block the merge otherwise. - A PR is merged only after:
- CI passes (lint, tests, build, migration validation)
- At least one approving review
- TypeScript strict mode is enabled — no
anyunless absolutely necessary. - Run
pnpm lint:fixandpnpm formatbefore committing. - CI enforces both; PRs with lint or format errors will fail.