Thanks for taking the time to contribute. Reloop is open source and we welcome bug reports, feature requests, documentation improvements, and code contributions.
Please read and follow our Code of Conduct in all community interactions.
- Before You Start
- Reporting Bugs
- Requesting Features
- Development Setup
- Branch Conventions
- Commit Message Format
- Pull Request Process
- Code Style
- Community
- Check existing issues — your bug or idea may already be tracked.
- Open an issue first for any significant change (new feature, architectural change, or large refactor). This avoids wasted effort if the direction doesn't fit the project.
- Small fixes (typos, docs, obvious bugs) can go straight to a PR.
Open a GitHub issue using the 🐛 Bug report template and include:
- What happened — a clear description of the bug
- Steps to reproduce — the exact steps to trigger it
- Expected behaviour — what you expected to see
- Environment — OS, Bun version, Docker version, and which service(s) are affected
- Logs — any relevant error output or stack traces
Open a GitHub issue using the ✨ Feature request template and describe:
- The problem you're trying to solve (not just the solution)
- Your proposed solution and any alternatives you considered
- Who it helps — use cases and audience
Follow the Setup Guide to run Reloop locally. The short version:
git clone https://github.com/reloop-labs/reloop.git
cd reloop
bun setup
bun devOr bun setup --start to bootstrap and start the stack in one go. Prerequisites: Bun v1.3+, Docker Desktop, and mkcert for local TLS.
See reloop.sh/docs/setup for the full walkthrough including manual steps, port references, per-service setup, and environment configuration.
Branch off main and use a descriptive name with a type prefix:
| Prefix | Use for |
|---|---|
feat/ |
New features |
fix/ |
Bug fixes |
docs/ |
Documentation only |
refactor/ |
Code changes with no feature or fix |
chore/ |
Tooling, CI, dependency updates |
test/ |
Adding or updating tests |
Examples:
feat/contact-import-csv
fix/webhook-retry-deadlock
docs/self-host-setup
We follow Conventional Commits:
<type>(<scope>): <short description>
[optional body]
[optional footer]
Types: feat, fix, docs, refactor, chore, test, perf
Scope is the service or area affected (e.g. email, auth, dashboard, docs).
Examples:
feat(contacts): add CSV bulk import endpoint
fix(webhook): prevent infinite retry loop on 5xx responses
docs(setup): add Windows hosts file instructions
chore(deps): bump drizzle-orm to 0.44.3
Keep the subject line under 72 characters and use the imperative mood ("add", not "added" or "adds").
- Fork the repository and create your branch from
main - Make your changes — keep commits focused and atomic
- Run checks before pushing:
bun run check # lint + format (Biome) - Open a PR against the
mainbranch - Fill in the PR description — what changed, why, and how to test it
- Link the related issue using
Closes #<issue-number>in the PR body - A maintainer will review your PR. Address any feedback and push additional commits to the same branch
Note
PRs without a linked issue (for significant changes) or a clear description may be closed without review.
Reloop uses Biome for linting and formatting across the entire monorepo.
bun run check # check and auto-fixA Husky pre-commit hook runs this automatically. If you bypass it, CI will catch failures.
General guidelines:
- TypeScript strict mode is enforced — avoid
any - Prefer explicit types on public function signatures
- Keep service boundaries clean — don't import across backend services directly; use the event bus (NATS) or shared packages
- New backend endpoints should include OpenAPI/Swagger annotations via Elysia decorators
Participation in Reloop spaces is governed by our Code of Conduct. To report a violation, email reloop.sh@gmail.com with subject [CoC].
Have questions before contributing? Reach out:
- 💬 Discord — discord.gg/ZBYwWKY96U — best place for real-time discussion
- 🐙 GitHub Issues — github.com/reloop-labs/reloop/issues
- 🐦 Twitter/X — @reloop_labs
- 💼 LinkedIn — reloop-labs