Files
mastodon/CONTRIBUTING.md
jcoffey-dev 319ed76dbd
Crowdin / Upload translations / upload-translations (push) Skipped
Historical data migration test / test (14-alpine) (push) Canceled after 0s
Historical data migration test / test (15-alpine) (push) Canceled after 0s
Historical data migration test / test (16-alpine) (push) Canceled after 0s
Historical data migration test / test (17-alpine) (push) Canceled after 0s
Bundler Audit / security (push) Canceled after 0s
Haml Linting / lint (push) Canceled after 0s
JavaScript Linting / lint (push) Canceled after 0s
Ruby Linting / lint (push) Canceled after 0s
JavaScript Testing / test (push) Canceled after 0s
Ruby Testing / build (production) (push) Canceled after 0s
Ruby Testing / test (.ruby-version) (push) Canceled after 0s
Ruby Testing / test (3.3) (push) Canceled after 0s
Ruby Testing / test (3.4) (push) Canceled after 0s
Ruby Testing / End to End testing (.ruby-version) (push) Canceled after 0s
Ruby Testing / End to End testing (3.3) (push) Canceled after 0s
Ruby Testing / End to End testing (3.4) (push) Canceled after 0s
Ruby Testing / Elastic Search integration testing (.ruby-version, docker.elastic.co/elasticsearch/elasticsearch:7.17.29) (push) Canceled after 0s
Check i18n / check-i18n (push) Canceled after 0s
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (javascript) (push) Canceled after 0s
CodeQL / Analyze (ruby) (push) Canceled after 0s
Ruby Testing / Elastic Search integration testing (.ruby-version, opensearchproject/opensearch:2) (push) Canceled after 0s
Ruby Testing / Elastic Search integration testing (3.3, docker.elastic.co/elasticsearch/elasticsearch:7.17.29) (push) Canceled after 0s
Ruby Testing / Elastic Search integration testing (3.4, docker.elastic.co/elasticsearch/elasticsearch:7.17.29) (push) Canceled after 0s
Check formatting / lint (push) Canceled after 0s
CSS Linting / lint (push) Canceled after 0s
Ruby Testing / Elastic Search integration testing (.ruby-version, docker.elastic.co/elasticsearch/elasticsearch:8.19.2) (push) Canceled after 0s
Chromatic / Check for relevant changes (push) Canceled after 0s
Chromatic / Run Chromatic (push) Canceled after 0s
Import Mastodon v4.7.3
Snapshot of upstream tag v4.7.3 (commit 8ff11c2bb7b9f0714e947b10fa3629c6542c7121) from
https://github.com/mastodon/mastodon, unmodified.
2026-10-05 22:03:13 -07:00

3.8 KiB

Contributing

Thank you for considering contributing to Mastodon 🐘

You can contribute in the following ways:

  • Finding and reporting bugs
  • Translating the Mastodon interface into various languages
  • Contributing code to Mastodon by fixing bugs or implementing features
  • Improving the documentation

Please review the org-level contribution guidelines for high-level acceptance criteria guidance and the DEVELOPMENT guide for environment-specific details. You should also read the project's AI Contribution Policy to understand how we approach AI-assisted contributions.

API Changes and Additions

Any changes or additions made to the API should have an accompanying pull request on our documentation repository.

Bug Reports

Bug reports and feature suggestions must use descriptive and concise titles and be submitted to GitHub Issues. Please use the search function to make sure there are not duplicate bug reports or feature requests.

Security Issues

If you believe you have identified a security issue in Mastodon or our own apps, check SECURITY.

Translations

Translations are community contributed via Crowdin. They are periodically reviewed and merged into the codebase.

Crowdin

Pull Requests

Size and Scope

Our time is limited and PRs making large, unsolicited changes are unlikely to get a response. Changes which link to an existing confirmed issue, or which come from a "help wanted" issue or other request, are more likely to be reviewed.

The smaller and more narrowly focused the changes in a PR are, the easier they are to review and potentially merge. If the change only makes sense in some larger context of future ongoing work, note that in the description, but still aim to keep each distinct PR to a "smallest viable change" chunk of work.

Description of Changes

Unless the Pull Request is about refactoring code, updating dependencies or other internal tasks, assume that the audience are not developers, but a Mastodon user or server admin, and try to describe it from their perspective.

The final commit in the main branch will carry the title from the PR. The main branch is then fed into the changelog and ultimately into release notes. We try to follow the keepachangelog spec, and while that does not prescribe how exactly the entries ought to be named, starting titles using one of the verbs "Add", "Change", "Deprecate", "Remove", or "Fix" (present tense) is helpful.

Example:

Not ideal Better
Fixed NoMethodError in RemovalWorker Fix nil error when removing statuses caused by race condition

Technical Requirements

Pull requests that do not pass automated checks on CI may not be reviewed. In particular, please keep in mind:

  • Unit and integration tests (rspec, vitest)
  • Code style rules (rubocop, eslint)
  • Normalization of locale files (i18n-tasks)
  • Relevant accessibility or performance concerns

Documentation

The Mastodon documentation is a statically generated site that contains guides and API docs. Improvements are made via PRs to the documentation repository.