Thank you for your interest in contributing to EsuStellar 🎉 We welcome developers, designers, writers, and community members.
This guide explains how to get set up, follow the project workflow, and submit changes that pass CI.
esustellar/
├── apps/
│ └── web/ # Frontend (React / Next.js)
├── contracts/
│ ├── savings/ # Soroban savings contract
│ └── ephemeral_account/# Ephemeral account contract
├── packages/
│ └── shared/ # Shared utilities and types
├── docs/ # Documentation and specs
├── deploy.sh # Contract deployment script
└── README.md
Click Fork on GitHub, then clone your fork:
git clone https://github.com/phertyameen/esustellar.git
cd esustellarrustup update
rustup target add wasm32-unknown-unknowncargo install --locked stellar-cli --features optnpm installcd apps/web
npm run dev-
Pick an issue from the GitHub Issues tab
-
Look for labels like:
good first issuedocumentationfrontendsmart-contracts
-
Comment on the issue to get assigned
-
Create a feature branch
git checkout -b feat/your-feature-nameFrom the contract directory you’re working on:
cd contracts/savings
# or
cd contracts/ephemeral_accountcargo fmtcargo test
cargo clippy -- -D warnings
cargo build --target wasm32-unknown-unknown --releasestellar contract build
⚠️ CI enforces formatting, tests, and clippy warnings.
npm run build
npm test # if applicable- New features must include tests
- Bug fixes should include regression tests
- Prefer end-to-end contract behavior tests
Run all tests:
cargo testRun a specific test:
cargo test test_full_cycle -- --nocaptureEvery Pull Request must pass:
- ✅
cargo fmt --check - ✅
cargo clippy -D warnings - ✅
cargo test - ✅ WASM build
- ✅ Frontend build (if affected)
If CI fails:
- Read the error carefully
- Reproduce locally
- Fix before requesting review
- Use clear, descriptive commit messages
- Keep commits focused
- Squash noisy commits before making a pr
Examples:
feat: add contribution deadline enforcement
fix: prevent double payouts
fmt: normalize formatting
To squash commits:
git rebase -i HEAD~N- ❌ Never commit private keys or secrets
- ❌ Never weaken authorization checks
- ✅ Assume all contract calls are adversarial
- ✅ Validate all inputs explicitly
Security-sensitive changes should be clearly explained in the PR.
If your change affects:
- Contract behavior
- State transitions
- Errors or events
- Frontend flows
You must update:
README.md- Inline Rust docs (
///) - Any relevant files in
docs/
-
Keep PRs small and focused
-
Reference the related issue in the PR description
-
Clearly explain:
- What changed
- Why it’s needed
- Any breaking behavior
Target branch:
mainfor stable releases
- Use GitHub Issues for bugs and features
- Use Discussions (if enabled) for ideas and questions
- Be respectful, constructive, and collaborative
By contributing, you agree to follow our Code of Conduct (to be added).
Thank you for helping build EsuStellar 💛 Your contributions make the ecosystem stronger.