First of all, thank you for considering contributing to mailer! We appreciate your help in maintaining this community
project.
This project is now a community-maintained effort. We expect all interactions—whether in Issues, Pull Requests, or Discussions—to be friendly, respectful, and constructive.
Please review our Code of Conduct before participating.
If you find a bug or have a feature request, please submit an issue.
When reporting a bug, please include:
- A clear description of what you expected vs. what happened.
- Reproducible code: A small, standalone Dart snippet is the best way to get a quick fix.
- Environment details: Your Dart SDK version and
mailerversion.
- Fork and Clone the repository.
- Install dependencies:
dart pub get
We enforce strict styling to keep the codebase clean:
- Formatting: We use the default Dart formatter. Run
dart format .before committing. - Analysis: We use
dart analyze --fatal-infos. Ensure your code produces no warnings or hints.
Our GitHub Actions will run these checks on every PR. You can run them locally to save time:
# 1. Check formatting
dart format --output=none --set-exit-if-changed .
# 2. Static analysis
dart analyze --fatal-infos
# 3. Run all tests
dart test
# 4. Verify package integrity
dart pub publish --dry-run
- Create a feature branch for your work.
- If your change affects the API or fix a bug, **update the
CHANGELOG.md**and bump the version inpubspec.yamlfollowing Semantic Versioning. - Submit your PR against the
masterbranch.
mailer uses automated publishing via GitHub Actions and OIDC.
- Once a PR is merged into
master, a maintainer creates a new Git tag (e.g.,v7.1.0). - Pushing the tag triggers the
Publishworkflow. - A maintainer must manually approve the deployment in the GitHub Actions tab.
- Once approved, the package is automatically uploaded to
pub.dev.
Thank you for helping make mailer the best email library for Dart!