Thanks for your interest in contributing to Capso! This document covers the development setup and contribution guidelines.
- macOS 15.0+ (Sequoia)
- Xcode 16+
- XcodeGen (
brew install xcodegen) - Swift 6.0+
git clone https://github.com/lzhgus/Capso.git
cd Capso
xcodegen generate
open Capso.xcodeprojBuild and run with Cmd+R in Xcode. The app requires screen recording, camera, and microphone permissions.
Each SPM package has independent tests:
swift test --package-path Packages/SharedKit
swift test --package-path Packages/AnnotationKit
swift test --package-path Packages/CaptureKit
swift test --package-path Packages/RecordingKit
swift test --package-path Packages/CameraKit
swift test --package-path Packages/OCRKit
swift test --package-path Packages/ExportKit
swift test --package-path Packages/EffectsKitOr run all tests via Xcode:
xcodebuild test -project Capso.xcodeproj -scheme CapsoCapso uses a modular architecture with 8 independent SPM packages. See README.md for the full breakdown.
Key convention: The App/ target is a thin shell. Business logic belongs in the appropriate package under Packages/.
- Swift 6.0 strict concurrency is enforced. All UI coordinators are
@MainActor. - No linter or formatter is configured. Follow existing code patterns.
- Use
@preconcurrency importfor frameworks that haven't adopted Sendable. - Types crossing actor boundaries must conform to
Sendable. - Prefer SwiftUI for new UI; use AppKit (
NSPanel,NSWindow) for overlays and system-level UI.
- Check open issues for existing discussion
- For large changes, open an issue first to discuss the approach
- For small fixes (typos, bugs), feel free to submit a PR directly
- Fork the repository
- Create a feature branch:
git checkout -b feature/your-feature - Make your changes
- Run
xcodegen generateif you modifiedproject.ymlor added/removed source files - Build successfully:
xcodebuild -project Capso.xcodeproj -scheme Capso build - Run relevant package tests
- Submit a PR with a clear description of what changed and why
- Keep PRs focused — one feature or fix per PR
- Include screenshots/GIFs for UI changes
- Update relevant comments if behavior changes
- Don't mix refactoring with feature work
Look for issues labeled good first issue — these are designed to be approachable for new contributors.
Some areas that are particularly welcoming:
- Adding new annotation tools (see
Packages/AnnotationKit/) - Improving localization (currently EN + ZH-Hans)
- Writing tests for existing packages
- UI polish and accessibility improvements
When adding features, consider which layer it belongs to:
| Layer | Location | Purpose |
|---|---|---|
| Package | Packages/[Kit]/ |
Core logic, testable, no UI dependencies |
| Coordinator | App/Sources/[Feature]/ |
Orchestrates UI flow, owns windows/panels |
| View | App/Sources/[Feature]/ |
SwiftUI views and AppKit NSViews |
Packages should depend only on SharedKit and system frameworks. Never add cross-package dependencies between feature kits.
By contributing, you agree that your contributions will be licensed under the same BSL 1.1 license that covers the project.