๐ฌ Contributing to Screenbox
September 29, 2025 ยท View on GitHub
Thank you for your interest in contributing to Screenbox! This guide will help you get started with developing and contributing to the project.
๐ Table of Contents
- ๐ Getting Started
- โ๏ธ Development Environment Setup
- ๐๏ธ Project Structure
- ๐ Development Workflow
- ๐งน Code Guidelines
- ๐งช Testing
- ๐ Translation
- ๐ค Submitting Contributions
๐ Getting Started
Prerequisites
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.
โ๏ธ Development Environment Setup
1. Fork and Clone the Repository
- 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
-
2. Open and Build the Solution
- 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.
๐๏ธ Project Structure
The solution contains two main projects:
Screenbox.sln
โโโ Screenbox/ # Main UWP application (UI layer)
โโโ Screenbox.Core/ # Core business logic library
Key Architecture Patterns
- 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
Main Directories
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.
๐ Development Workflow
๐ Creating an Issue
Creating an issue is a great way to discuss bugs, feature requests, or enhancements with the maintainers and community.
When to Create an Issue
- Bug Reports: When you encounter unexpected behavior or errors
- Enhancements: When you want to improve existing features or add new functionality
Issue Guidelines
- 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
๐ Creating a Pull Request
-
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.
Pull Request Guidelines
- 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
๐งน Code Guidelines
Code Formatting
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.
๐งช Testing
Manual Testing Checklist
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
Platform Testing
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.
๐ Translation
Adding New Strings
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
Contributing Translations
For translating the app to other languages:
- Crowdin (Recommended): crowdin.com/project/screenbox
- Local translation: Only recommended for languages not available on Crowdin
Local Translation Workflow
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
๐ค Submitting Contributions
- 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.
๐ Thank You!
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! ๐