Contributing
Contributions are welcome! Whether it's a bug fix, a new feature, or documentation improvement, your help makes Flashot better.
Getting Started
Fork the repository on GitHub.
Clone your fork:
bashgit clone https://github.com/your-username/flashot.git cd flashotSet up your development environment — see the Setup guide.
Create a feature branch:
bashgit checkout -b feat/my-feature
Development Workflow
Make your changes.
Run tests:
bashpnpm test # Frontend tests cd src-tauri && cargo test # Rust testsRun linting:
bashpnpm lint # TypeScript cd src-tauri && cargo clippy # RustVerify the build:
bashpnpm tauri build
Commit Convention
Flashot follows Conventional Commits:
<type>: <description>
[optional body]
[optional footer]Types
| Type | Usage |
|---|---|
feat | New feature for the user |
fix | Bug fix for the user |
docs | Documentation changes |
style | Code style (formatting, etc.) |
refactor | Refactoring without functionality change |
perf | Performance improvements |
test | Adding or updating tests |
chore | Maintenance (dependencies, build config, CI) |
ci | CI/CD configuration changes |
Examples
feat: add color picker to crosshair cursor
fix: resolve memory leak in session cleanup
refactor: extract window detection logic to separate module
docs: update installation guide for LinuxGuidelines
- Use lowercase for type and description
- Keep the first line under 72 characters
- Use imperative mood ("add" not "added" or "adds")
- Reference issues in the footer when applicable
Pull Request Process
Push your feature branch to your fork:
bashgit push origin feat/my-featureOpen a Pull Request on GitHub against the
mainbranch.Ensure CI passes — the workflow runs:
cargo checkandcargo clippy -D warningscargo testcargo bench --bench crop_bench- On macOS, Windows, and Linux
Request a review from the maintainers.
Address feedback — update your branch with additional commits.
Release Process
Releases are managed by maintainers:
Bump version in
package.json,src-tauri/Cargo.toml, andsrc-tauri/tauri.conf.json.Commit and tag:
bashgit tag v0.1.0 git push origin v0.1.0The
.github/workflows/release.ymlworkflow automatically:- Builds macOS (ARM + Intel), Windows, and Linux installers
- Publishes a GitHub Release
- Updates the Homebrew cask (for non-prerelease releases)
Beta Releases
Tag with a prerelease SemVer version:
git tag v0.1.1-beta.1
git push origin v0.1.1-beta.1The release workflow marks these as GitHub prereleases and copies the updater manifest to the beta branch.
Code of Conduct
Be respectful, inclusive, and constructive. Focus on what's best for the project and its users.