Thanks for your interest in contributing. Swyft is built almost entirely by external contributors — the maintainer handles architecture decisions, PR reviews, and releases. Contributors handle features.
Pick up an issue and open a PR — that's it.
- Getting Started
- Development Setup
- Finding Work
- Branch and Commit Conventions
- Pull Request Process
- Code Standards
- Testing
- Issue Labels
- Fork the repository on GitHub.
- Clone your fork:
git clone https://github.com/<your-username>/Swyft.git cd Swyft
- Add the upstream remote:
git remote add upstream https://github.com/Valreb001/Swyft.git
- Follow the Development Setup section below.
| Tool | Version | Notes |
|---|---|---|
| Node.js | ≥ 18 | Use nvm or fnm |
| pnpm | ≥ 8 | npm install -g pnpm |
| Rust | stable | rustup toolchain install stable |
| stellar-cli | latest | See Stellar docs |
| Docker | any | For local Postgres + Redis |
pnpm installcp apps/api/.env.example apps/api/.env
# Edit apps/api/.env — see Environment Variables section in READMEcd apps/api
docker compose up -dpnpm devThis starts the NestJS API and Next.js dApp simultaneously via Turborepo.
cd packages/contract
cargo test --workspacepnpm --filter api test- Browse open issues
- Issues labelled
good first issueare well-scoped and don't require deep protocol knowledge - Issues labelled
bountyhave a financial reward attached - Comment on an issue before starting work to avoid duplication
Branch names follow the pattern:
<type>/<short-description>
Examples: feat/multi-hop-router, fix/pool-tick-overflow, docs/update-readme
Commit messages follow Conventional Commits:
<type>(<scope>): <short description>
[optional body]
[optional footer: closes #<issue>]
Valid types: feat, fix, docs, chore, refactor, test, ci, perf
Examples:
feat(contracts): add tick spacing to pool factory
fix(api): prevent duplicate nonce consumption
docs: add CONTRIBUTING.md
- Branch from
main:git checkout main git pull upstream main git checkout -b feat/your-feature
- Make your changes, including tests.
- Ensure CI passes locally:
pnpm lint pnpm test pnpm build - Push your branch and open a PR against
main. - Fill in the PR template — summary, testing steps, linked issue.
- One maintainer approval is required to merge.
- PRs are squash-merged — keep your commit history clean but it isn't strictly required.
- TypeScript: Strict mode enabled. No
anywithout a comment explaining why. - Rust:
cargo clippymust pass with no warnings. Follow standard Rust idioms. - Formatting: Run
pnpm formatbefore committing. Prettier config is at.prettierrc. - Linting: Run
pnpm lintbefore committing. ESLint config is in each app/package. - Accessibility: Frontend components must meet WCAG 2.1 AA. Use semantic HTML and ARIA attributes where needed.
| Layer | How to run | Expectation |
|---|---|---|
| Soroban contracts | cargo test --workspace in packages/contract |
All tests pass |
| NestJS API unit | pnpm --filter api test |
All tests pass |
| NestJS API e2e | pnpm --filter api test:e2e |
Requires running Postgres + Redis |
| TypeScript SDK | pnpm --filter @swyft/sdk test |
All tests pass |
New features must include tests. Bug fixes should include a regression test.
| Label | Meaning |
|---|---|
good first issue |
No deep protocol knowledge needed |
bounty |
Financial reward attached |
contracts |
Soroban / Rust work |
backend |
NestJS / API work |
frontend |
Next.js / React work |
sdk |
TypeScript SDK work |
docs |
Documentation |
bug |
Something is broken |
enhancement |
New feature or improvement |
Open a GitHub Discussion — the maintainer and community are there to help.