Files
mail/CONTRIBUTING.md
T

4.3 KiB

Contributing to Flectar Mail

Thank you for helping improve Flectar Mail. Keep changes focused, reviewable, and safe for a mail client that handles private user data.

Before starting

  • Search existing issues and pull requests before opening a duplicate.
  • Open an issue before substantial features, architecture changes, new dependencies, protocol changes, or user-visible licensing changes.
  • Never submit real mailbox contents, credentials, OAuth tokens, signing material, or personal fixture data. Use reserved .example domains.

Translations

Translate the application through Weblate. Weblate owns the catalogs in lang/*/LC_MESSAGES/ and sends them back as pull requests, so other pull requests must not edit them. When a change adds, edits or moves translatable strings in .slint files, run scripts/update-translation-template.sh (it needs slint-tr-extractor 1.18.1) and commit only lang/flectar-mail.pot. Weblate merges the template into every language after the change reaches main. Releases require complete Spanish and Russian translations, which scripts/check-translation-completeness.sh es ru checks.

README translations are maintained directly in this repository:

  • Use README.md as the source and add docs/readme/README.<locale>.md, following Spanish or Simplified Chinese.
  • Translate the complete document, including image alternative text, while preserving link destinations, commands, filenames, and technical identifiers. Resolve relative links from docs/readme/: use ../../resources/ for images, ../../README.md for English, and sibling filenames for other translations.
  • Add the language's native name to the language selector in every README translation and in the English README. Highlight each file's own language.
  • Keep the same sections and shared screenshots. When updating documentation, update translations where possible and note any remaining gaps in the pull request.

Accessibility and security

Read ACCESSIBILITY.md when changing the interface or reporting an accessibility barrier. Report vulnerabilities privately using SECURITY.md, rather than opening a public issue.

Platform code

Shared code selects platform behaviour with capability aliases such as mobile, desktop and linux_desktop, not operating-system names. Only the platform layer names a mobile operating system. Read Platform architecture before changing platform-specific code or proposing a new platform; new platforms start as community-maintained ports.

Contribution licensing

Contributions are licensed under the same license that applies to the files being changed, usually AGPL-3.0-only. Contributors retain copyright and must have the right to submit their work under that license. If an employer or another organization owns your work, obtain its authorization before contributing.

Pull requests

  • Keep one logical change per pull request.
  • Explain the problem, the chosen solution, tests, and user-visible effects.
  • Add or update tests for behavior changes.
  • Disclose material use of generative tools. You remain responsible for every submitted line and for confirming that generated material has valid provenance and compatible licensing.
  • Preserve third-party copyright and license notices.
  • Do not add dependencies or copied assets without documenting their source, version, license, and required notices.

Local validation

Run the checks relevant to your change:

cargo fmt --all -- --check
python3 scripts/check-platform-gates.py
cargo clippy --workspace --all-targets --locked -- -D warnings
cargo test --workspace --locked
slint-viewer --check ui/app.slint

UI changes must be rendered and inspected in light and dark themes. Responsive changes must also be checked at the documented phone and tablet preview sizes. Use fictional data in screenshots.

Icon sources, generation and sizing are documented in Lucide icons.

Licensing of accepted contributions

Accepted contributions are published as part of Flectar Mail under AGPL-3.0-only, unless a file is explicitly identified as third-party material under another compatible license.