Prerequisites
Before you start contributing, make sure you have:- macOS 14.0 (Sonoma) or later
- Xcode with Command Line Tools installed
- Python 3.13 or higher
- Git for version control
- Basic knowledge of Swift/SwiftUI and Python
Getting started
Fork the repository
Go to the Izzy GitHub repository and click the “Fork” button to create your own copy of the project.
Set up the development environment
Run the setup script to create the Python virtual environment:Install Python dependencies:
Development workflow
Creating a feature branch
Always create a new branch for your work. Use descriptive branch names that indicate what you’re working on:Making changes
While developing:- Follow the code style guidelines documented in the Code style page
- Test your changes thoroughly on different scenarios
- Keep commits focused - each commit should represent a single logical change
- Write descriptive commit messages that explain why the change was made
Commit message format
Use clear, descriptive commit messages following this pattern:Testing your changes
Before submitting a pull request:- Build and run the app from Xcode
- Test the feature/fix manually in different scenarios
- Check for console errors or warnings
- Verify that existing features still work correctly
- Test with different music services (YouTube Music, Tidal, JioSaavn)
Submitting a pull request
Create a pull request
Go to the original Izzy repository on GitHub and click “New Pull Request”. Select your fork and branch as the source.
Write a clear description
In your pull request description, include:
- What - A clear description of what the PR does
- Why - The reason for the change (bug fix, new feature, improvement)
- How - Brief explanation of your implementation approach
- Testing - How you tested the changes
- Screenshots - If the change affects the UI
Pull request checklist
Before submitting, make sure:- Code follows the Swift and Python style guidelines
- All new code has appropriate comments and documentation
- The app builds and runs without errors
- Changes have been tested manually
- Commit messages are clear and descriptive
- No sensitive data (API keys, credentials) is included
- Pull request description clearly explains the changes
Areas to contribute
Bug fixes
Check the GitHub issues for reported bugs. Look for issues tagged withbug or good first issue.
New features
Some ideas for new features:- Additional music service integrations
- Enhanced playlist management features
- Improved search filters and sorting
- Keyboard shortcuts customization
- Export/import functionality
- Social features (sharing playlists)
Performance improvements
Izzy is optimized for battery efficiency. Contributions that improve:- Playback performance
- Search speed
- Memory usage
- Network efficiency
- UI responsiveness
Documentation
Help improve:- Code comments and documentation
- User guides and tutorials
- API documentation
- Troubleshooting guides
Architecture overview
Swift/SwiftUI app structure
Python backend
The Python backend (ytmusic_service.py) handles:
- YouTube Music API integration via
ytmusicapi - JioSaavn API integration via
saavn.dev - Tidal integration via
hifi-api - Audio stream URL extraction via
yt-dlp - AI-powered search via Google Gemini
Communication flow
- Swift app communicates with Python service via standard input/output
- Requests are JSON-encoded commands
- Python service processes requests and returns JSON responses
- Managers parse responses and update SwiftUI views
Getting help
If you need help:- Check existing GitHub issues
- Review the project structure in the code style guide
- Look at existing code for similar functionality
- Ask questions in your pull request or issue
Code of conduct
Be respectful and constructive:- Be welcoming to newcomers
- Provide helpful feedback
- Focus on the code, not the person
- Respect different viewpoints and experiences