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
.exampledomains.
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.mdfor 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.