Thanks for your interest in contributing. This is an open-source project maintained in the author's free time — contributions are welcome but the maintainer has final say on everything that gets merged. Reviews and merges might take a few days, so please bear with us.
Right now, our main focus is on security hardening (specially around the auto-updater and credential management) and bringing platform-specific features — overlay, audio ducking, Discord Rich Presence, game detection, currently Windows-only — to macOS and Linux. Because of this, massive new features might take a backseat or take a bit longer to get reviewed.
developis our default branch. All new features, bug fixes, and refactors MUST be PR'd againstdevelop.- Please do not open Pull Requests against
main.mainis strictly reserved for production releases. - CI is Mandatory: We do not bypass GitHub Actions. Your PR will not be merged until the
cargo fmtandcargo clippychecks are perfectly green. - Merge Conflicts: If your PR has merge conflicts, please resolve them locally, verify compilation with
cargo checkandcargo fmt, and push the fix. If you can't, the maintainer will push the resolution directly to your branch — no "PR Bridges" will be created, to keep the history clean and your authorship intact. - PRs against
developare merged using squash and merge. (mainonly ever receives release merges fromdevelop, and always as a merge commit.)
Open an issue for:
- Bug reports — include OS version, terminal, steps to reproduce, and what you expected vs. what happened
- Feature requests — describe the use case, not just the feature. Dealing with third-party APIs, cookies, and tokens requires careful security decisions. Let's talk about it first so you don't waste your time building something we might not be able to merge safely.
PRs are welcome. Before opening one:
- Open an issue first to discuss the change — this avoids wasted effort on PRs that won't be merged
- Keep the scope small — one fix or one feature per PR, no unrelated cleanup
- Write a clear description — explain what the change does and why it's needed; the diff alone is not enough
- Rust — follow the existing style; run
cargo fmtandcargo clippybefore committing, both must pass cleanly - Commits — use Conventional Commits:
feat:,fix:,docs:,chore:, etc. - UI strings — English and Spanish (
locales/en.jsonandlocales/es.json) must both be updated when adding any visible text - No commented-out code, no dead code left behind
- No
unwrap()— useexpect("reason")or?
- Large refactors without prior discussion
- New dependencies without a strong justification
- Features that conflict with the project's focused scope
- Anything that breaks the existing UX without a clear improvement
By contributing, you agree that your contributions will be licensed under the MIT License.