Thanks for your interest in contributing! OpenShot is a community-driven macOS screenshot and screen recording tool. Here's how to get involved.
git clone https://github.com/umutkeltek/OpenShot.git
cd OpenShot
open OpenShot.xcodeproj
# Press Cmd+R to build and runRequirements: macOS 14.0+ (Sonoma), Xcode 15+
On first launch, grant Screen Recording permission in System Settings > Privacy & Security.
- Search existing issues first
- Use the Bug Report template
- Include macOS version, OpenShot version, and steps to reproduce
- Check existing feature requests
- Use the Feature Request template
- Explain the problem you're trying to solve, not just the solution
- Open an issue first for anything non-trivial — discuss before coding
- Fork the repository
- Create a feature branch from
main:git checkout -b feature/my-feature - Make your changes
- Test thoroughly on macOS 14+
- Submit a pull request to
main
The project is organized into functional modules:
OpenShot/
├── App/ # App lifecycle, menu bar, permissions
├── Capture/ # Screen capture engine and modes
├── Annotation/ # Drawing canvas and 17 annotation tools
├── Recording/ # Screen recording, GIF, webcam
├── Overlay/ # Quick access overlay, floating screenshots
├── OCR/ # Vision framework text recognition
├── History/ # SwiftData capture history
├── Settings/ # Preferences and hotkey management
├── Utilities/ # Extensions and helpers
└── Resources/ # Plist, entitlements, assets
See docs/ARCHITECTURE.md for detailed architecture documentation.
- Swift conventions — follow standard Swift naming and formatting
- No external dependencies — use only Apple frameworks. This is a core design principle
- Keep modules focused — each directory has a clear responsibility
- Use
@MainActor— for all UI and capture code - Prefer
async/await— over completion handlers - Use Swift Testing — not XCTest, for new tests
Use Conventional Commits:
feat: add circular crop tool to annotation editor
fix: area selector not appearing on secondary display
docs: update URL scheme reference
refactor: extract timer logic from CaptureEngine
test: add tests for WindowBackgroundRenderer
- Solves a real problem (linked to an issue)
- Minimal, focused changes — one concern per PR
- Works on macOS 14+ without deprecation warnings
- No new external dependencies
- Tests for non-trivial logic
- Screenshots/recordings for UI changes
# Build
make build
# Run tests
make test
# Clean build artifacts
make clean- Use Console.app filtered to "OpenShot" for runtime logs
- The app uses
os.Loggerthroughout — search forLoggerin source - Screen Recording permission must be granted for capture to work
Tests are in OpenShotTests/ using Swift Testing framework:
make testWhen adding new features, add tests in the corresponding test file or create a new one following the existing pattern.
This project follows the Contributor Covenant Code of Conduct. By participating, you agree to uphold a welcoming and inclusive environment.
- Open a Discussion for general questions
- Check existing issues and docs before asking
Thank you for helping make OpenShot better!