AI Assistance Disclosure
When using AI assistance, please include:- Extent of use: Did AI help with documentation only, or did it generate code?
- Response generation: Are PR comments or commit messages AI-generated?
- Understanding: You must understand the code produced and be able to answer questions about it
Getting Started
Prerequisites
Before contributing, ensure you have:- Completed the development setup
- Read the architecture overview
- Reviewed this contribution guide
Check for Existing Work
Search Existing Issues
Before starting work, search existing issues to ensure no one else is already working on the same feature or bug.
Comment on Issues
If you plan to work on an issue, comment to indicate you’re working on it. This prevents duplicate effort.
Code Standards
Formatting and Linting
Code quality is automatically enforced via git hooks (installed by./scripts/setup.sh):
SwiftFormat: Handles code formatting
Git hooks are configured in
lefthook.yml and automatically format your code before each commit.Coding Conventions
Follow existing patterns: Review similar code in the codebase to understand established patterns. Use modern Swift/SwiftUI APIs: Prefer newer APIs when possible, but maintain backward compatibility. File organization: Place files in the appropriate directory:- Models go in
Models/ - Services go in
Services/ - Reusable UI components go in
UI/ - Feature modules go in
Modules/
- Use clear, descriptive names
- Prefer
letovervarwhen possible - Use type inference where it improves readability
- Document complex logic with comments
Compatibility & OS Versions
Current minimum deployment target: macOS 15.0 If a feature requires a newer OS version:- Use
@availableor#if availablechecks to preserve compatibility - Provide fallback behavior for older OS versions
- Open an issue to discuss trade-offs if raising the minimum version would significantly benefit the feature
Project Configuration
This project uses XcodeGen. Never manually edit project settings in Xcode. To modify project settings:Testing & Quality
Running Tests
In Xcode: Press ⌘U (Product → Test) Via CLI:Requirements
All pull requests must meet these requirements:
- All existing tests pass
- New features include appropriate tests
- Code builds without warnings
- Code follows formatting standards (automatic via git hooks)
Security & Safety
Security best practices:- Be mindful of user privacy and data handling
- Follow secure coding practices for web content handling
- Never commit
.envfiles or private keys - Use
.gitignoreto exclude sensitive files - Review what you’re committing with
git statusandgit diff
Pull Request Process
Before You Start
- Fork the repository on GitHub
- Clone your fork locally:
- Run setup:
Creating a Pull Request
Create a feature branch
Create a branch from Branch naming conventions:
main with a descriptive name:feature/- New featuresfix/- Bug fixesdocs/- Documentation changesrefactor/- Code refactoring
Make your changes
Write your code, following the coding standards above.Commit frequently with clear, descriptive messages:Git hooks will automatically:
- Format your code with SwiftFormat
- Lint your code with SwiftLint
- Stage any auto-fixes
Open a pull request
- Go to the Ora Browser repository
- Click “Pull requests” → “New pull request”
- Click “compare across forks”
- Select your fork and branch
- Fill out the PR template
PR Requirements Checklist
Your pull request must:- Build successfully without errors or warnings
- Tests pass (all existing tests + new tests if applicable)
- Follow formatting standards (automatic via git hooks)
- Have a descriptive title and description explaining what changed and why
- Include screenshots if UI changes were made
- Reference related issues (e.g., “Fixes #123” or “Closes #456”)
- Disclose AI assistance if any was used
- Check for duplicate functionality (ensure similar features don’t already exist)
PR Description Template
Use this template for your PR description:Review Process
Once you submit a PR:- Automated checks run: GitHub Actions runs tests and checks
- Maintainers review: Maintainers will review your code and provide feedback
- Address feedback: Make requested changes and push updates
- Approval: Once approved, a maintainer will merge your PR
Be patient and respectful during the review process. Maintainers are volunteers and review PRs as time permits.
Reporting Issues
Bug Reports
Be descriptive and thorough. A good bug report includes:Environment details
- macOS version (e.g., macOS 15.2)
- Ora Browser version (e.g., 0.2.11)
- Hardware (Intel or Apple Silicon)
Clear reproduction steps
Step-by-step instructions to reproduce the issue:
- Open Ora Browser
- Navigate to example.com
- Click the bookmark button
- Observe the error
Feature Requests
Provide detailed context. A good feature request includes:- Clear description: What feature do you want and why?
- Use case: How would this feature be used?
- Alignment with goals: How does it fit with Ora’s vision (fast, secure, beautiful)?
- Implementation ideas: Suggestions for how it could work
- Uniqueness: Check that similar functionality doesn’t already exist
Community Guidelines
Ora Browser is an open-source project that thrives on respectful collaboration.
- Treat all contributors with respect
- Provide constructive feedback
- Focus on the code and ideas, not individuals
- Help maintain a welcoming environment
Release Process
Creating a Release
Ora uses Sparkle for automatic updates.Setup Sparkle tools
Install Sparkle command-line tools:This generates DSA keys in the
build/ directory.Configure signing
Copy the public key from
build/dsa_pub.pem to Info.plist as SUPublicEDKey.Keep build/dsa_priv.pem secure—it signs releases.Resources
Development Setup
Complete environment setup guide
Architecture
Learn about Ora’s architecture
Hot Reloading
Set up live SwiftUI updates
Discord Community
Join the community on Discord
GitHub Repository
View source code and issues
Security Guide
Security practices and disclosure
Questions?
Join the community on Discord or open an issue for discussion.By contributing to Ora Browser, you agree that your contributions will be licensed under the GPL-2.0 License.
