Thank you for your interest in contributing to LocalVoice!
- Clone the repository
- Run the bootstrap script:
- Windows:
.\scripts\bootstrap.ps1 - Unix/macOS:
./scripts/bootstrap.sh
- Windows:
- Start development:
pnpm tauri dev
See docs/dev/index.md for the full developer reference.
This project follows a feature-branch-per-milestone pattern:
main— stable, release-ready codems/*— feature branches for each milestone (e.g.,ms/10-polish)
All work happens on feature branches. Changes are merged via pull requests.
- Language: All code, comments, and commit messages in English
- TypeScript: Strict mode enabled; avoid
any - Rust: Follow
rustfmtconventions; use meaningful names - Style: ESLint and Clippy enforce style rules — run before committing
Format: type(scope): description
Types: feat, fix, docs, refactor, test, chore
Examples:
feat(recording): add microphone selectorfix(transcription): handle empty audio bufferdocs(history): update API reference
- Create a new branch from
main:git switch -c ms/xx-feature-name - Implement your changes
- Run linting and type checks:
pnpm run lint # TypeScript cargo clippy # Rust
- Run tests:
cargo test # Rust tests
- Update documentation if needed
- Open a PR with a clear description
- Ensure all CI checks pass
- Request review
- Rust: Unit tests on all command handlers and business logic
- TypeScript: Component tests for UI components where practical
- Smoke tests: Verify the app launches and basic recording flow works
- User-facing docs:
docs/user/*.md - Developer docs:
docs/dev/*.md - Architecture Decision Records:
docs/adrs/*.md
Update docs when adding or changing features.
Use the issue templates for bug reports and feature requests. Include:
- Steps to reproduce (for bugs)
- Expected vs actual behavior
- OS and app version
- Relevant logs (see Settings → Logs)
Open a discussion on GitHub or reach out via the project channels.