Contributions are welcome! To start working on an issue, leave a comment indicating you're taking it on.
- Search existing PRs related to that issue
- Confirm no other contributors are working on the same issue
- Check if the feature aligns with the project's goals
By contributing, you agree your contributions will be licensed under the same terms as the project. See Contributor License Agreement. This ensures contributions can be used in the open source version (AGPL-3.0) and commercially licensed. You retain all rights to use your contributions elsewhere.
nix run .#setup # Install dependencies
nix run .#tauri-dev # Start development server
nix run .#test # Run all checksOr enter the dev shell: nix develop
Requirements:
- Node.js (see
.node-version) - pnpm
- Rust + Cargo (latest stable)
- Tauri v2 prerequisites
git checkout -b feature/my-feature-name
pnpm install
pnpm tauri devRun before every commit:
pnpm format && pnpm lint && pnpm testThis runs:
- Biome β JS/TS linting and formatting
- Clippy + rustfmt β Rust linting and formatting
- typos β Spellcheck (allowlist in
_typos.toml) - CodeQL β Security analysis (JS, Actions, Rust) β runs in CI
- Unit tests β 330+ Rust tests
- Integration tests β proxy, sync e2e
# Install: brew install codeql
codeql pack download codeql/javascript-queries codeql/rust-queries
# JavaScript
codeql database create /tmp/codeql-js --language=javascript --source-root=.
codeql database analyze /tmp/codeql-js --format=sarifv2.1.0 --output=/tmp/js.sarif codeql/javascript-queries
# Rust
codeql database create /tmp/codeql-rust --language=rust --source-root=.
codeql database analyze /tmp/codeql-rust --format=sarifv2.1.0 --output=/tmp/rust.sarif codeql/rust-queries- Translations: Any UI text changes must be reflected in all 7 locale files (
src/i18n/locales/) - Tauri commands: If you modify Tauri commands, the
test_no_unused_tauri_commandstest will catch unused ones - No hardcoded colors: Use theme CSS variables (see
src/lib/themes.ts), never Tailwind color classes liketext-red-500 - No lock file changes: Don't update
pnpm-lock.yamlorCargo.lockunless updating dependencies is the purpose of the PR - AGPL-3.0: This project is AGPL-licensed. Derivatives must be open source with the same license
- Fill the PR description template
- Reference related issues (
Fixes #123orRefs #123) - Include screenshots/videos for UI changes
- Ensure "Allow edits from maintainers" is checked
- Frontend: Next.js (React) β
src/ - Backend: Tauri (Rust) β
src-tauri/src/ - Proxy Worker: Detached process for proxy tunneling β
src-tauri/src/bin/proxy_server.rs - Sync: Cloud sync via S3-compatible storage β
src-tauri/src/sync/,donut-sync/ - Browsers: Camoufox (Firefox-based) and Wayfern (Chromium-based)
- Issues: Bug reports and feature requests
- Discussions: Questions and general discussion