- Bug fixes
- Translation updates (improvements or new languages)
- Feature requests
- Check existing issues to avoid duplicates
- Open an issue describing the bug if none exists
- Reference the issue in your PR
- Open an issue tagged
enhancement - Wait for maintainer approval before implementing
- Do not submit PRs for unapproved features
- Default English:
res/values/strings.xml - New languages:
res/values-{code}/strings.xml
- Fork the repository
- Create feature branch from
main - Make your changes following code standards
- Run tests locally:
./gradlew test - Ensure ktlint passes:
./gradlew ktlintCheck - Push to your fork
- Open PR against
mainbranch
- ktlint must pass (CI enforces this)
- Existing tests must pass
CRITICAL: This is a privacy-first keyboard. PRs violating these principles will be rejected:
- No network calls
- No analytics or telemetry
- No external dependencies that phone home
- No data collection beyond local device storage
- All user data stays encrypted on device
- Branch from
main, targetmain - Add tests as appropriate
- Pass all CI checks (ktlint, tests, build)
- Reference related issue number if available
See SECURITY.md for reporting security issues. Do not open public issues for vulnerabilities.
Open a GitHub issue for discussion before starting work.