Thank you for your interest in contributing to Side Screen! This document provides guidelines and information for contributors.
- Code of Conduct
- Ways to Contribute
- Development Setup
- Coding Standards
- Pull Request Process
- Issue Guidelines
Please be respectful and constructive in all interactions. We're building something together, and a positive environment helps everyone contribute their best work.
Found a bug? Please open an issue with:
- Clear description of the problem
- Steps to reproduce
- Expected vs actual behavior
- Your environment (macOS version, Android version, device model)
Have an idea? Open a feature request issue with:
- Description of the feature
- Use case / why it would be helpful
- Any implementation ideas (optional)
Ready to code? Great! See the development setup below.
Documentation improvements are always welcome:
- Fix typos
- Clarify instructions
- Add examples
- Translate to other languages
The simplest way to help - star the repo to help others discover it!
macOS Development:
- macOS 14 (Sonoma) or later
- Xcode 15+ or Swift toolchain
- Swift 5.9+
Android Development:
- Android Studio Hedgehog or later
- JDK 17
- Android SDK 34
# Clone the repository
git clone https://github.com/tranvuongquocdat/SideScreen.git
cd SideScreen
# Build macOS app
cd MacHost
swift build
# Build Android app
cd ../AndroidClient
./gradlew assembleDebugSideScreen/
├── MacHost/ # macOS Swift application
│ └── Sources/ # Swift source files
├── AndroidClient/ # Android Kotlin application
│ └── app/src/main/ # Kotlin source files
├── scripts/ # Build and install scripts
├── resources/ # Assets (logos, screenshots)
└── website/ # Landing page
- Follow Swift API Design Guidelines
- Use meaningful variable and function names
- Add documentation comments for public APIs
- Keep functions focused and small
// Good
func startStreaming() throws {
// Clear, focused implementation
}
// Avoid
func doStuff() {
// Vague naming, unclear purpose
}- Follow Kotlin coding conventions
- Use Kotlin idioms (null safety, extension functions)
- Prefer immutability (
valovervar) - Use meaningful names
// Good
private fun connectToHost(host: String, port: Int): Result<Connection>
// Avoid
private fun connect(h: String, p: Int): Any?- Write self-documenting code
- Add comments only when the "why" isn't obvious
- Keep commits focused and atomic
- Test your changes before submitting
- Check existing issues/PRs to avoid duplicate work
- For major changes, open an issue first to discuss
- Fork the repository and create a feature branch
Use descriptive branch names:
feature/wifi-supportfix/connection-timeoutdocs/installation-guide
Write clear, descriptive commit messages:
feat: add WiFi Direct connection support
- Implement mDNS discovery for nearby devices
- Add WiFi connection option in settings
- Handle connection state transitions
Closes #42
- Ensure your code builds without errors
- Test your changes on real devices if possible
- Update documentation if needed
- Create a pull request with:
- Clear description of changes
- Link to related issue (if any)
- Screenshots for UI changes
- Maintainers will review your PR
- Be responsive to feedback
- Make requested changes promptly
- Once approved, your PR will be merged
Include:
- Title: Brief, descriptive summary
- Environment: macOS version, Android version, device models
- Steps to reproduce: Numbered steps to trigger the bug
- Expected behavior: What should happen
- Actual behavior: What actually happens
- Screenshots/logs: If applicable
Include:
- Title: Brief description of the feature
- Problem: What problem does this solve?
- Solution: Your proposed solution
- Alternatives: Other solutions you considered
- Additional context: Mockups, examples, etc.
If you have questions about contributing, feel free to:
- Open a discussion on GitHub
- Ask in an issue with the
questionlabel
Thank you for contributing to Side Screen!