Thank you for your interest in contributing to Screenbox! This guide will help you get started with developing and contributing to the project.
- 🚀 Getting Started
- ⚙️ Development Environment Setup
- 🏗️ Project Structure
- 🔄 Development Workflow
- 🧹 Code Guidelines
- 🧪 Testing
- 🌍 Translation
- 📤 Submitting Contributions
Before you begin, ensure you have the following installed:
- Visual Studio 2022 (Community, Professional, or Enterprise) or later
- Required workloads:
- WinUI application development
- Required optional components:
- Universal Windows Platform tools
- Windows 11 SDK (10.0.26100.0)
- Recommended extensions:
- XAML Styler
- Required workloads:
- Windows 10 version 1903 (build 18362) or later, or Windows 11
- Developer Mode enabled in Windows settings
Note
JetBrains Rider should also work but specific setup instructions aren't covered in this guide.
- Fork the repository On GitHub, click the Fork button
- Clone your fork
-
Open Visual Studio
-
Select "Clone Repository..." from the File menu
-
Enter your fork's URL, replace
YOUR-USERNAMEwith your GitHub username:https://github.com/YOUR-USERNAME/Screenbox.gitOr, if you are familiar with Git:
git clone https://github.com/YOUR-USERNAME/Screenbox.git
-
- Open the solution in Visual Studio:
Screenbox.sln - Set the platform to match your machine's architecture (typically x64)
- Build the solution to restore NuGet packages:
F6 - Start debugging:
F5
Visual Studio's built-in Git integration should be sufficient for most development workflows.
The solution contains two main projects:
Screenbox.sln
├── Screenbox/ # Main UWP application (UI layer)
└── Screenbox.Core/ # Core business logic library
- MVVM (Model-View-ViewModel): Clean separation of UI and business logic
- Dependency Injection: Services are injected for loose coupling
- Messaging: Components communicate via the MVVM Toolkit messenger
- Services Architecture: Business logic organized into focused services
Screenbox/Pages/: XAML pagesScreenbox/Controls/: Custom controls and user interface componentsScreenbox/Converters/: Data binding convertersScreenbox/Helpers/: Utility and helper classesScreenbox/Strings/: Localization resourcesScreenbox.Core/ViewModels/: Presentation logic and data bindingScreenbox.Core/Services/: Business logic and data access servicesScreenbox.Core/Models/: Data structures and entitiesScreenbox.Core/Messages/: MVVM Toolkit messenger message typesScreenbox.Core/Playback/: Media playback logic and components
For a detailed breakdown of the entire codebase architecture, see the Project Structure documentation.
Creating an issue is a great way to discuss bugs, feature requests, or enhancements with the maintainers and community.
- Bug Reports: When you encounter unexpected behavior or errors
- Enhancements: When you want to improve existing features or add new functionality
- Search existing issues first to avoid duplicates
- Use the appropriate issue template (Bug Report or Enhancement)
- Use descriptive titles that clearly summarize the problem or request
- Provide detailed information as requested in the template
- Be respectful and constructive in your communication
-
Create a new branch from the main branch
- Select "New Branch..." from the Git menu
- Enter a short, descriptive name for your branch
Or, if you are familiar with Git:
git branch BRANCH-NAME git switch BRANCH-NAME
-
Make your changes and commit them with clear, descriptive messages
-
Push to your fork and open a pull request on GitHub
For a full walkthrough of the process, see the GitHub documentation.
- Use descriptive titles following the Conventional Commits standard (e.g.,
feat:,fix:,docs:,refactor:, etc.) - Include a clear description of what changes were made and why
- Link to relevant issues if applicable
- Keep pull requests focused on one feature or fix per PR when possible
- Update documentation if your changes affect user-facing functionality
Before committing changes, please:
- Run XAML Styler (
Ctrl+K, Ctrl+2) on all.xamlfiles you've modified - Use Code Cleanup (
Ctrl+K, Ctrl+E) on all.csfiles you've modified
Your IDE should automatically use the project's .editorconfig rules for formatting.
When testing your changes:
- ✅ Functionality: Verify your feature works as expected
- ✅ Performance: Check that playback remains smooth
- ✅ Error handling: Test edge cases and error scenarios
- ✅ Accessibility: Test with different themes (light/dark/high contrast), screen scale, text scale factor, and gamepad navigation if possible
- ✅ UI: Verify the interface looks correct and responsive
While not required, testing on different architectures (x64, x86, ARM64) and platforms (such as Xbox One and Xbox Series consoles) is helpful if you have access to these systems.
When adding features that require new user-facing text:
- Only add new strings to the
.reswfiles in theScreenbox/Strings/en-US/directory - Use ReswPlus features for pluralization and advanced formatting when needed
- Follow existing naming conventions for resource keys
The main resource files are:
Resources.resw: General UI stringsKeyboardResources.resw: Keyboard shortcuts and commandsManifestResources.resw: App manifest strings
For translating the app to other languages:
- Crowdin (Recommended): crowdin.com/project/screenbox
- Local translation: Only recommended for languages not available on Crowdin
If your language isn't available on Crowdin, you can either request its addition or proceed with local translation. Just follow these steps:
- Under
Screenbox/Strings, create a new sub-folder, for example "fr-FR" for French (France), using the BCP-47 language tag for the folder name. - Copy the contents of the
Screenbox/Strings/en-US/folder into your language folder and translate them.
For detailed guidance on the translation workflow and language support, see:
- Translation section in the main README.
- Microsoft Language Resources for comprehensive language and localization reference
- Ensure your code builds without errors or warnings
- Test your changes thoroughly using the testing checklist above
- Create a pull request with a clear title and description
- Be responsive to feedback during the review process
That's it! The maintainers will review your contribution and provide feedback if needed.
Every contribution helps make Screenbox better for everyone. Whether you're fixing bugs, adding features, improving documentation, or translating the app, your efforts are appreciated! 🙏