First off, thank you for considering contributing to Flix! It's people like you that make Flix such a great tool.
This project and everyone participating in it is governed by common sense and mutual respect. Be kind, be professional, and be constructive.
Before creating bug reports, please check the existing issues to avoid duplicates. When you create a bug report, include as many details as possible:
- Use a clear and descriptive title
- Describe the exact steps to reproduce the problem
- Provide specific examples
- Describe the behavior you observed and what you expected
- Include screenshots if applicable
- Note your device, Android version, and app version
Enhancement suggestions are welcome! When creating an enhancement suggestion:
- Use a clear and descriptive title
- Provide a detailed description of the suggested enhancement
- Explain why this enhancement would be useful
- List any similar features in other apps if applicable
- Fork the repo and create your branch from
master - If you've added code, test it thoroughly
- Ensure your code follows the existing style
- Update documentation if needed
- Write a clear commit message
- Android Studio (latest stable version)
- JDK 17 or higher
- Android SDK with API 21-34
- Git
- Clone the repository:
git clone https://github.com/willbeeching/flix.git
cd flix-
Open the project in Android Studio
-
Sync Gradle files
-
Build and run:
./gradlew assembleDebugapp/
├── plex/ # Plex API clients
├── screensaver/ # Core screensaver logic
├── service/ # Android DreamService
├── settings/ # API key management
└── ui/ # Jetpack Compose UI screens
- Follow Kotlin coding conventions
- Use meaningful variable and function names
- Add comments for complex logic
- Keep functions small and focused
- Use
Modifierparameters consistently - Extract reusable composables
- Use Google Sans font for consistency
- Follow Material 3 design guidelines
- Use present tense ("Add feature" not "Added feature")
- Use imperative mood ("Move cursor to..." not "Moves cursor to...")
- Limit first line to 72 characters
- Reference issues and PRs when applicable
Example commit messages:
Add support for music libraries
Fix crash when server is unreachable
Update ProGuard rules for Moshi
Before submitting a PR, please test:
- Fresh install - Install the app on a clean device/emulator
- Plex authentication - Verify the QR code flow works
- API settings - Test adding/removing API keys
- Server/library selection - Ensure smooth navigation
- Screensaver preview - Check artwork loads correctly
- Actual screensaver - Set as screensaver and verify it activates
Try to test on:
- Android TV (preferred)
- Android emulator (API 21, 29, 34)
- Phone/tablet (optional but helpful)
If you discover a security vulnerability, please do NOT open a public issue. Email the maintainer directly (see GitHub profile).
We'd especially welcome contributions in these areas:
- Unit tests - The project currently has no tests
- Accessibility - Improving screen reader support
- Documentation - More code comments and guides
- Translations - Multi-language support
- Performance - Optimization and profiling
- New features - See the "Future Enhancements" section in README
Feel free to open an issue with the "question" label if you need help!
By contributing, you agree that your contributions will be licensed under the MIT License.
Thank you for contributing! 🎉