Before You Start
Key Principles
- Open source doesn’t mean unrestricted changes - Not every change is appropriate for the project
- Test on multiple platforms - Windows is the most used platform
- Consider the impact - Changes in one area can affect others
- Keep it simple - Avoid adding unnecessary options that confuse new users
- Take responsibility - Test thoroughly before submitting
Requirements
Technical Skills
Learn the codebase
Spend time studying the existing code, especially the areas you intend to change. There are hundreds of thousands of lines to learn from.
Understand C++ and Qt
QLC+ requires solid C++ and Qt knowledge. If you’re an amateur developer or expert in other languages, extra study time is needed.
Testing Requirements
Platform Testing
- Test on multiple platforms if possible
- Windows testing is critical - it’s the most used platform
- Platform-specific areas require extra care:
- Audio/video code
- Timers
- Plugins
- UI customizations
Submission Guidelines
Pull Requests
Discuss major changes first
For significant changes, start a thread in the Development Forum before implementing.
Explanation Requirements
The more you explain what you did and why, the faster the review will be.
- Small changes (few lines) - Quick review likely
- Large changes (dozens/hundreds of lines) - Detailed explanation required
- Engine/VCWidget changes - Must be discussed first
Coding Standards
Style Guidelines
Code Organization
- Follow the organization of existing files
- Keep related functionality together
- Maintain clear separation between engine and UI code
Documentation
Documentation PRs
Submit documentation changes to the docs repository via pull request. If you don’t document your changes, someone else has to spend their time doing it.Areas Requiring Special Care
Engine Classes
The engine is the core of QLC+ and affects all functionality. Examples:Doc(engine/src/doc.h:54)Function(engine/src/function.h:93)Fixture(engine/src/fixture.h:71)MasterTimer
VCWidget Class
The Virtual Console widget base class affects all UI widgets.Platform-Specific Code
Extra care needed for:- Audio/video rendering
- Timer implementations
- Plugin interfaces
- Hardware I/O
What Gets Accepted
Consider Before Adding
Is this feature really needed?
Is this feature really needed?
- Does it solve a real problem?
- Will it confuse new users?
- Is there a simpler solution?
Will it work for everyone?
Will it work for everyone?
- Have you tested on multiple platforms?
- Does it cause regressions?
- Have you checked related areas?
Is it consistent with QLC+?
Is it consistent with QLC+?
- Does it follow existing patterns?
- Is the code style consistent?
- Does it fit the project’s goals?
Common Rejection Reasons
- Not tested on Windows - Most users are on Windows
- Tests fail - Must pass
make check - Unclear purpose - Need explanation of what and why
- Breaks existing functionality - Causes regressions
- Not discussed first - Engine/VCWidget changes need discussion
- Poorly explained - Large changes need detailed explanations
Types of Contributions
Code Contributions
- Bug fixes
- New features
- Performance improvements
- Refactoring
- Plugin development
Non-Code Contributions
- Fixture definitions (.qxf files)
- RGB scripts
- Documentation
- Translation
- Bug reports
- Testing
Getting Help
Where to Ask
Development Forum
Discuss technical questions and implementation details
GitHub Issues
Report bugs and request features
Before Opening an Issue
- Search existing issues
- Check the Help Wanted tag
- Provide clear reproduction steps
- Include platform and version information
Fixture Definitions
Contributing fixture definitions is one of the easiest ways to help:- Create new fixture definitions
- Improve existing definitions
- Test fixture definitions
Review Process
Timeline
- Small PRs - Usually reviewed within days
- Large PRs - May take weeks, require more discussion
- Engine changes - Require extensive review and testing
What Reviewers Look For
- Code quality - Style, organization, clarity
- Testing - All tests pass, adequate coverage
- Platform compatibility - Works on all supported platforms
- Impact - No regressions, well-isolated changes
- Documentation - Code is documented, user docs updated
Community Standards
Be Respectful
- Respect maintainer’s time and decisions
- Be patient during review
- Accept feedback constructively
- Help other contributors
Take Responsibility
- Test thoroughly before submitting
- Fix issues found during review
- Monitor your PR after merge
- Help users affected by your changes
