Thank you for your interest in contributing to OpenTune! This document outlines the guidelines and best practices for contributing to the project. By following these recommendations, you help us maintain high-quality code and a collaborative, inclusive community.
Note
Before you begin, make sure to read and understand our Code of Conduct.
We track bugs using GitHub Issues. Before creating a new issue, please search existing issues to see if the problem has already been reported. If you find a similar issue, feel free to add relevant information or insights as a comment.
When creating a new issue, include:
- Descriptive title that summarizes the issue
- Steps to reproduce the problem
- Expected behavior vs. actual behavior
- Environment details (e.g., app version, device model, Android version)
- Screenshots if applicable
- Relevant logs if available
Tip
Use the provided templates to ensure you include all the necessary details.
We also handle feature suggestions through GitHub Issues. When suggesting a new feature:
- Describe the problem the feature is intended to solve
- Explain the solution and how it would work
- Provide examples or use cases if possible
- Assess the scope of the feature: is it minor, moderate, or large in terms of implementation effort?
Important
Please discuss the feature in an issue and obtain approval from the maintainers before starting development.
Pull Requests (PRs) are the primary way to contribute code to OpenTune. To ensure your PR is effective and easy to review, follow these steps:
- Fork the repository and create a feature branch from
main. - Implement your changes while following the style guide.
- Write or update tests as needed to cover your changes.
- Ensure all tests pass before submitting your PR.
- Update the documentation if your changes affect the public API or usage instructions.
- Submit your pull request with a clear, concise, and informative description.
Your PR description should include:
- Purpose: What problem does this PR solve? What feature or fix does it introduce?
- Motivation: Why is this change necessary or useful? How does it improve the project?
- Implementation details: Briefly explain how the changes were implemented.
- Related issues: Link to any related issues using
Closes #123,Fixes #456, etc.
Example:
### Summary
This PR adds offline playback support for downloaded audio files.
### Motivation
This feature improves the user experience for those who want to listen to music without an internet connection.
### Changes
- Added local media cache management
- Updated playback logic to prefer local files when available
- Modified UI to show offline availability
### Related Issues
Closes #45
Tip
Well-written PRs that clearly explain their purpose and impact are more likely to be reviewed and merged quickly.
- Kotlin: Follow the official Kotlin coding conventions
- XML: Use 4 spaces for indentation
- Variable and function names: Use
camelCase(e.g.,playbackController) - Class names: Use
PascalCase(e.g.,AudioPlayer) - Constants: Use
UPPER_SNAKE_CASE(e.g.,MAX_VOLUME_LEVEL)
We use Conventional Commits to keep commit history clean and meaningful:
<type>(<optional scope>): <short description>
[optional body]
[optional footer]
Common types:
feat: A new featurefix: A bug fixdocs: Documentation-only changesstyle: Changes that do not affect functionality (formatting, whitespace, etc.)refactor: Code changes that neither fix a bug nor add a featureperf: Code changes that improve performancetest: Adding or fixing testschore: Changes to build scripts or auxiliary tools
Examples:
feat(player): add support for offline playback
fix(ui): resolve layout bug in song list
docs(readme): update installation instructions
- Write documentation in Markdown
- Document all public classes and functions
- Include usage examples whenever possible
- Keep the documentation up to date with code changes
We use a structured branching model:
main: The production-ready branchdevelop: The active development branchfeature/xyz: New feature branchesfix/xyz: Bug fix branchesrelease/xyz: Release preparation branches
- Creation: A contributor opens a PR from a feature/fix branch
- Review: Maintainers review the code and provide feedback
- CI Validation: Automated tests are run
- Discussion: Issues are resolved and necessary changes are made
- Approval: Once approved, the PR is ready for merging
- Merge: The PR is merged into the target branch
To set up your local environment for contributing:
-
Install Android Studio (version 2022.1 or newer)
-
Configure Android SDK (API level 33 recommended)
-
Install JDK (version 11 or higher)
-
Clone the repository:
git clone https://github.com/Arturo254/OpenTune.git cd OpenTune -
Build the project using Gradle:
./gradlew build
To help with translations:
- Sign up on Crowdin
- Choose the language you want to contribute to
- Translate missing strings or improve existing translations
- The maintainer team will review and approve submissions
If your language is not listed, contact us at cervantesarturo254@gmail.com.
To contribute design ideas:
- Review the Material Design 3 Guidelines
- Create mockups or interactive prototypes
- Submit your designs in a GitHub issue labeled
design - Include reasoning for how your designs improve the user experience
Thank you for contributing to OpenTune! Your efforts help us build a better experience for all users.
If you have any questions, feel free to open an issue labeled question or reach out directly to the development team.